STM32F103处理器USART2接收中断读RXNE总是为0的原因请教?

2019-12-23 18:37发布

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);


请各位大侠分析分析原因看。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
10条回答
southcross
1楼-- · 2019-12-24 17:42
 精彩回答 2  元偷偷看……
LYU
2楼-- · 2019-12-24 23:33
这个问题难道没人清楚?
07071624
3楼-- · 2019-12-25 04:42
进入中断函数后要把中断标志清除了
lingjun1015
4楼-- · 2019-12-25 07:28
这个不是我们的代码问题,估计你和我一样,是不是把Keil的串口外设窗口打开了,Keil会通过总线读取DR寄存器的数值,这个正好满足清RXNE标志的条件.
keil坑的不轻呀!!!!!!!!!!!!!

一周热门 更多>