使用GD32F103C8T6串口接收,不进入中断,RBNE自动清零了

[复制链接]
1594|6
手机看帖
扫描二维码
随时随地手机跟帖
未成熟的小麦|  楼主 | 2019-9-18 17:56 | 显示全部楼层 |阅读模式
本帖最后由 未成熟的小麦 于 2019-9-18 18:00 编辑

刚接触这个系列的芯片,小白一个。开始调试GD32F103C8T6的串口接收功能,初始化的时候调用gd_eval_com_init(EVAL_COM0);初始化串口,串口能顺利发出数据了,但接收始终无法进入中断,仿真发现串口在收到一个byte以后,串口能收到,STAT也能把RBNE置1,但却不进入中断。

而且奇怪的是,当我点“执行下一步”执行任意一个语句的时候,DATA里面数据还在,RBNE自动清零了。这样就导致我把接收标志位检测放在主循环也收不到数据了。
1935d81febaa64af.png



512135d81fde6438de.png

使用特权

评论回复
sonicll| | 2019-9-18 19:47 | 显示全部楼层
本帖最后由 sonicll 于 2019-9-18 19:54 编辑

先确定有没有使能接收中断,有没有配置NVIC?
然后RBNE这个标志位,只要读USART_DATA寄存器就会清零,包括你在keil的窗口里看寄存器,也会清零。所以调试这种中断需要打断点,然后全速运行到断点,不要单步执行,或者不要开窗口观察寄存器,防止清零

使用特权

评论回复
未成熟的小麦|  楼主 | 2019-9-19 10:15 | 显示全部楼层
sonicll 发表于 2019-9-18 19:47
先确定有没有使能接收中断,有没有配置NVIC?
然后RBNE这个标志位,只要读USART_DATA寄存器就会清零,包括 ...

第一步,我在中断里面打了断点,但没进入中断。这样是不是能推出没开中断呢?
第二步,我把查询RBNE标志位的接收处理程序放在主循环了,里面加断点,仍然没进入。
然后我迫不得已才开观察窗口的。

使用特权

评论回复
未成熟的小麦|  楼主 | 2019-9-19 10:48 | 显示全部楼层
sonicll 发表于 2019-9-18 19:47
先确定有没有使能接收中断,有没有配置NVIC?
然后RBNE这个标志位,只要读USART_DATA寄存器就会清零,包括 ...

可以了!非常感激~

使用特权

评论回复
18339739721| | 2019-9-20 17:06 | 显示全部楼层
楼主怎么解决了?我的好像也是进不去接收中断,但是可以发送数据

使用特权

评论回复
未成熟的小麦|  楼主 | 2019-10-8 11:36 | 显示全部楼层
18339739721 发表于 2019-9-20 17:06
楼主怎么解决了?我的好像也是进不去接收中断,但是可以发送数据

我的配置程序是这样的,你试试
/* configure COM0 */
        gd_eval_com_init(EVAL_COM0);
        usart_interrupt_enable(EVAL_COM0,USART_INT_RBNE);
        nvic_irq_enable(USART0_IRQn, 0, 2);

使用特权

评论回复
炫炫啊炫| | 2021-11-22 18:19 | 显示全部楼层
楼主,这个UASRT的中断标志位的窗口是怎么调出来的?

使用特权

评论回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则