你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32单片机IO口控制出错。

[复制链接]
any_014 提问时间:2015-7-20 17:25 /
悬赏3ST金币未解决
本帖最后由 any_014 于 2015-7-20 17:34 编辑

STM32io口串电阻再接LED灯到3.3V,然后把IO口设置成开漏模式,程序里把IO口设置成ON(输出低电平),结果灯亮了,用示波器观测IO口电压,发现是个PWM波。
把IO口设置成OFF(输出截止),结果灯都灭了,IO口波形是有个下拉尖峰的高电压波形。

  1. void GPIO_Config(void)
  2. {
  3.         GPIO_InitTypeDef GPIO_InitStructure;
  4.         
  5.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOD, ENABLE);
  6.         
  7.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2;
  8.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;
  9.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;        
  10.         GPIO_Init(GPIOA, &GPIO_InitStructure);
  11.         
  12.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_5;
  13.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;
  14.         GPIO_Init(GPIOB, &GPIO_InitStructure);
  15.         
  16.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
  17.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
  18.         GPIO_Init(GPIOB, &GPIO_InitStructure);
  19.         
  20.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2;
  21.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;
  22.         GPIO_Init(GPIOD, &GPIO_InitStructure);
  23. }
复制代码


  1. int main(void)
  2. {
  3.         u8 value;
  4.         GPIO_Config();
  5.         POW(ON);
  6.         RUN(ON);
  7.         ERR(ON);
  8. //          USART1_Config();
  9. //        SPI_Config();
  10.         while(1)
  11.         {
  12. //                ADT7310Delay(10000);
  13. //                value = ReadFromADT7310ViaSPI(0x01);
  14. //                ADT7310Delay(10000);
  15. //                USART_SendData(USART1, value);
  16. //                USART_SendData(USART1, 0x55);
  17. //                GPIOA -> ODR ^= GPIO_Pin_1;
  18. //                GPIOB -> ODR ^= GPIO_Pin_3;
  19.         }
  20. }
复制代码
  1. #ifndef __GPIO_H
  2. #define __GPIO_H

  3. #include "stm32f10x.h"

  4. #define ON 0
  5. #define OFF 1

  6. #define ERR(a)  if(a)\
  7.                                         GPIO_SetBits(GPIOA, GPIO_Pin_0);\
  8.                                 else\
  9.                                         GPIO_ResetBits(GPIOA, GPIO_Pin_0)

  10. #define RUN(a)  if(a)\
  11.                                         GPIO_SetBits(GPIOA, GPIO_Pin_1);\
  12.                                 else\
  13.                                         GPIO_ResetBits(GPIOA, GPIO_Pin_1)

  14. #define POW(a)  if(a)\
  15.                                         GPIO_SetBits(GPIOA, GPIO_Pin_2);\
  16.                                 else\
  17.                                         GPIO_ResetBits(GPIOA, GPIO_Pin_2)

  18. #define ADT7310_CS(a)          if(a)\
  19.                                                         GPIO_SetBits(GPIOD, GPIO_Pin_0);\
  20.                                                 else\
  21.                                                         GPIO_ResetBits(GPIOD, GPIO_Pin_0)

  22. #define AD7193_CS(a)          if(a)\
  23.                                                         GPIO_SetBits(GPIOD, GPIO_Pin_1);\
  24.                                                 else\
  25.                                                         GPIO_ResetBits(GPIOD, GPIO_Pin_1)

  26. #define ADG738_CS(a)          if(a)\
  27.                                                         GPIO_SetBits(GPIOD, GPIO_Pin_2);\
  28.                                                 else\
  29.                                                         GPIO_ResetBits(GPIOD, GPIO_Pin_2)

  30. #define SPI_SCL(a)          if(a)\
  31.                                                         GPIO_SetBits(GPIOB, GPIO_Pin_3);\
  32.                                                 else\
  33.                                                         GPIO_ResetBits(GPIOB, GPIO_Pin_3)

  34. #define SPI_MOSI(a)          if(a)\
  35.                                                         GPIO_SetBits(GPIOB, GPIO_Pin_5);\
  36.                                                 else\
  37.                                                         GPIO_ResetBits(GPIOB, GPIO_Pin_5)

  38. #define SPI_MISO()                GPIO_ReadInputDataBit(GPIOB, 4)

  39. void GPIO_Config(void);

  40. #endif
复制代码


收藏 评论5 发布时间:2015-7-20 17:25

举报

5个回答
any_014 回答时间:2015-7-20 17:39:02
好象是焊接的问题,STM32在不停的复位。
数码小叶 回答时间:2015-7-20 21:09:08
楼主自己找到原因了,
你好我好大家好! 回答时间:2015-7-21 10:07:29
数码小叶 发表于 2015-7-20 21:09
楼主自己找到原因了,

那就好                           
any_014 回答时间:2015-7-21 10:11:55
数码小叶 发表于 2015-7-20 21:09
楼主自己找到原因了,

还没解决...
发现配置IO口的时候,屏蔽掉PD0,PD1,PD2的配置,就正常了。
如果加上,则单片机不停的复位。
看上去像是复位芯片引起的,但测量了下复位芯片的VCC,还算正常。
怀疑是PD0,PD1,PD2外围电路不正常,PD配置后可能吧VCC拉低了,但我用示波器观测不到VCC变化。
  1. void GPIO_Config(void)
  2. {
  3.         GPIO_InitTypeDef GPIO_InitStructure;
  4.        
  5.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOD, ENABLE);
  6.        
  7.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2;
  8.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;
  9.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;       
  10.         GPIO_Init(GPIOA, &GPIO_InitStructure);
  11.        
  12.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_5;
  13.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;
  14.         GPIO_Init(GPIOB, &GPIO_InitStructure);
  15.        
  16.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
  17.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
  18.         GPIO_Init(GPIOB, &GPIO_InitStructure);
  19.        
  20.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2;
  21.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  22.         GPIO_Init(GPIOD, &GPIO_InitStructure);
  23. }
复制代码
any_014 回答时间:2015-7-21 10:51:20
就是外围电路设计不合理的原因,IO口没有接限流电阻直接下拉光耦。
一个两个的话没事,多了的话就不停复位了。
应该是复位芯片引发的复位,但示波器观测不到VCC变化,也许太快了?100Mz的示波器应该能采样到吧?
修改了电路后现在正常。
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版