STM32F103处理器USART2接收中断读RXNE总是为0,原因不明,请教各位大侠:
开发环境: IAR5.4 +IAR J-Link, DX STM32开发板子;使用STM32官方的3.0版本库
移植OS: RT-Thread OS 0.3
故障现象: 1.USART2设置接收中断模式,能够相应中断,能够进入中断程序;发送是设置为轮询模式。
2. 进入中断程序以后,执行以下语句,不能正确读取RXNE状态,返回结果是“RESET”。
if(USART_GetITStatus(USART2 USART_IT_RXNE) != RESET)//读取USART2的中断标志位。正确情况应该返回1.
3. 将以上判断语句去除,直接读取USART2的接收寄存器,可以得到正确的数据。(上位机发什么数据,USART2就接收到什么数据)
4. 通过IAR环境,J_link单步调试,查看USART2的状态寄存器SR,在IAR环境下看到的RXNE位始终为0。(不管USART2是否产生接收中断)
同样的USART1设置,但是USART1能够正确读取到RXNE的置1。(在IAR环境下,查看RXNE依然是0,但是程序读取出来是RXNE位是1)
我的USART2设置代码如下:
USART_InitStructure.USART_BaudRate = 115200;
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_ClockInitStructure.USART_Clock = USART_Clock_Disable;
USART_ClockInitStructure.USART_CPOL = USART_CPOL_Low;
USART_ClockInitStructure.USART_CPHA = USART_CPHA_2Edge;
/* Enable USART2 Rx Interrupt request */
USART_ClockInitStructure.USART_LastBit = USART_LastBit_Disable;
USART_Init(USART2, &USART_InitStructure);
USART_ClockInit(USART2, &USART_ClockInitStructure);
USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);
USART_Cmd(USART2, ENABLE);
请各位大侠分析分析原因看。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
如果是通过设置断点再单步执行,则在程序停到断点时,调试器的显示功能在读取状态寄存器的同时已经清除了标志,你再单步执行时RXNE已经变为了'0'。这种情况下,应该把调试断点放在判断语句之后而不是之前。
一周热门 更多>