这是F4 HAL库的USART bug?
用F4 HAL库的串口发现一个很扯的问题,USART->SR寄存器值初始为0x0000 00C0,如图1所示图 1.USART->SR寄存器初始值
接收到串口数据后,进入串口中断,此时USART->SR寄存器值变为0x0000 00F0,,如图2所示
图 2.接收中断后,USART->SR寄存器值
然后单步运行,进入官方HAL_UART_IRQHandler()函数,一进入USART->SR寄存器值就变为0x0000 00C0,也就是说RXNE位被清除了!!!!如图三所示
图3. 刚进入HAL_UART_IRQHandler函数,USART->SR寄存器值
下面附带SR寄存器映射图
有没有大侠遇到过相似的问题的?具体怎么回事?
没有问题,是你读方式不对。首先看状态寄存器 (USART_SR)的初始值,你显示的就不对了。如下图,复位值:0x00C0 0000,而不是0x0000 00c0.
https://www.stmcu.org.cn/module/forum/forum.php?mod=image&aid=391114&size=300x300&key=36fddcb15abf257a&nocache=yes&type=fixnone
再看中断函数,先读的寄存器的USART_SR_PE 、USART_SR_FE、USART_SR_ORE 、USART_SR_NE位。再读USART_SR_RXNE位,如下图
https://www.stmcu.org.cn/module/forum/forum.php?mod=image&aid=391115&size=300x300&key=1f0bd57b3d4c7085&nocache=yes&type=fixnone
程序能执行到UART_Receive_IT(huart);语句,说明USART_SR_RXNE位的值是1.
真要观察一个寄存器的值,可以用指针或变量去读取该寄存器的值,而不是依赖编译器的那些便捷窗口。
衔胆栖冰 发表于 2017-3-20 21:31
没有问题,是你读方式不对。首先看状态寄存器 (USART_SR)的初始值,你显示的就不对了。如下图,复位值 ...
你这个文档怕是有错吧,图中SR寄存器有效位明显处于低八位,数据怎么能跑到高八位?
另外,这个读取程序是STM32官方自带的,没做一丝改变。:L 酱哒哒 发表于 2017-3-21 09:37
你这个文档怕是有错吧,图中SR寄存器有效位明显处于低八位,数据怎么能跑到高八位?
另外,这个读取程序 ...
多说无益
页:
[1]