本帖最后由 any_014 于 2015-7-20 17:34 编辑
STM32io口串电阻再接LED灯到3.3V,然后把IO口设置成开漏模式,程序里把IO口设置成ON(输出低电平),结果灯亮了,用示波器观测IO口电压,发现是个PWM波。
把IO口设置成OFF(输出截止),结果灯都灭了,IO口波形是有个下拉尖峰的高电压波形。
- void GPIO_Config(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure;
-
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOD, ENABLE);
-
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(GPIOA, &GPIO_InitStructure);
-
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_5;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;
- GPIO_Init(GPIOB, &GPIO_InitStructure);
-
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
- GPIO_Init(GPIOB, &GPIO_InitStructure);
-
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;
- GPIO_Init(GPIOD, &GPIO_InitStructure);
- }
复制代码
- int main(void)
- {
- u8 value;
- GPIO_Config();
- POW(ON);
- RUN(ON);
- ERR(ON);
- // USART1_Config();
- // SPI_Config();
- while(1)
- {
- // ADT7310Delay(10000);
- // value = ReadFromADT7310ViaSPI(0x01);
- // ADT7310Delay(10000);
- // USART_SendData(USART1, value);
- // USART_SendData(USART1, 0x55);
- // GPIOA -> ODR ^= GPIO_Pin_1;
- // GPIOB -> ODR ^= GPIO_Pin_3;
- }
- }
复制代码- #ifndef __GPIO_H
- #define __GPIO_H
- #include "stm32f10x.h"
- #define ON 0
- #define OFF 1
- #define ERR(a) if(a)\
- GPIO_SetBits(GPIOA, GPIO_Pin_0);\
- else\
- GPIO_ResetBits(GPIOA, GPIO_Pin_0)
- #define RUN(a) if(a)\
- GPIO_SetBits(GPIOA, GPIO_Pin_1);\
- else\
- GPIO_ResetBits(GPIOA, GPIO_Pin_1)
- #define POW(a) if(a)\
- GPIO_SetBits(GPIOA, GPIO_Pin_2);\
- else\
- GPIO_ResetBits(GPIOA, GPIO_Pin_2)
- #define ADT7310_CS(a) if(a)\
- GPIO_SetBits(GPIOD, GPIO_Pin_0);\
- else\
- GPIO_ResetBits(GPIOD, GPIO_Pin_0)
- #define AD7193_CS(a) if(a)\
- GPIO_SetBits(GPIOD, GPIO_Pin_1);\
- else\
- GPIO_ResetBits(GPIOD, GPIO_Pin_1)
- #define ADG738_CS(a) if(a)\
- GPIO_SetBits(GPIOD, GPIO_Pin_2);\
- else\
- GPIO_ResetBits(GPIOD, GPIO_Pin_2)
- #define SPI_SCL(a) if(a)\
- GPIO_SetBits(GPIOB, GPIO_Pin_3);\
- else\
- GPIO_ResetBits(GPIOB, GPIO_Pin_3)
- #define SPI_MOSI(a) if(a)\
- GPIO_SetBits(GPIOB, GPIO_Pin_5);\
- else\
- GPIO_ResetBits(GPIOB, GPIO_Pin_5)
- #define SPI_MISO() GPIO_ReadInputDataBit(GPIOB, 4)
- void GPIO_Config(void);
- #endif
复制代码
|
那就好
还没解决...
发现配置IO口的时候,屏蔽掉PD0,PD1,PD2的配置,就正常了。
如果加上,则单片机不停的复位。
看上去像是复位芯片引起的,但测量了下复位芯片的VCC,还算正常。
怀疑是PD0,PD1,PD2外围电路不正常,PD配置后可能吧VCC拉低了,但我用示波器观测不到VCC变化。
一个两个的话没事,多了的话就不停复位了。
应该是复位芯片引发的复位,但示波器观测不到VCC变化,也许太快了?100Mz的示波器应该能采样到吧?
修改了电路后现在正常。