stm32串口调试问题
{
if(USART_GetITStatus(USART1,USART_IT_RXNE)!=RESET)
{
GPIO_SetBits(GPIOA,GPIO_Pin_0);
USART_ClearITPendingBit(USART1,USART_IT_RXNE);
}
}
主函数
int main(void)
{
NVIC_Configuration();
USART1_Config();
while(1);
}
配值函数
USART_InitStructure.USART_BaudRate =9600;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_Parity = USART_Parity_No ;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
USART_Init(USART1, &USART_InitStructure); //填充完结构体,调用库函数USART_Init()向寄存器写入配置参数。
USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);//开接收中断
USART_Cmd(USART1, ENABLE);
为什么我一开串口调试工具灯就灭了,我还没发数据灯就没了,而且一打开串口灯又亮了pa1.0 不知道咋回事
有可能是你的串口调试软件的问题啊,打开软件他就发送了一个数据,纯属猜测
串口配置应该没问题
看看程序的其他地方有没有使用p1.0口的led灯的,看看原理图led是高电平亮还是低电平亮,在中断里翻转led状态,。
/* Enable USART1 clock */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
/* Configure USART 1 Tx as alternate function push-pull */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
/* Configure USART 2 Rx as input floating */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);
如上,你有没有开串口的时钟,有没有去设置你串口的TX、RX的引脚的输入或输出的类型呢
'一开串口调试工具灯就灭了,我还没发数据灯就没了,而且一打开串口灯又亮了pa1.0 不知道咋回事'
’灭了‘和’没了‘是不是都是指不亮了?’而且一打开串口灯又亮了‘如何打开?
灯是PA0低电平亮还是高电平亮?
如果你在中断例程里面没有将引起中断的状态位清零,你中断一返回,马上就会又产生中断,就死在中断里面了!应该最后这句对你有用
GPIO_SetBits(GPIOA,GPIO_Pin_0);
把这句话注释掉 看看有什么现象
这问题LZ应该解决了,楼上那么多高手都已经给出所有的可能了