GD32F150C8T6串口问题

[复制链接]
1313|11
手机看帖
扫描二维码
随时随地手机跟帖
搬砖的小蚂蚁|  楼主 | 2020-10-15 11:24 | 显示全部楼层 |阅读模式
void USART0_IRQHandler(void)
{
        uint8_t rec;
        if(RESET != usart_interrupt_flag_get(BLE_UART, USART_STAT_RBNE,USART_INT_RBNEIE)){

                /* receive data */
        rec = usart_data_receive(BLE_UART) ;

    }

}
这个没有清除中断标志的,一直进入中断,难道要关闭中断使能再重新启动吗?我看到其他型号里面会有个usart_interrupt_flag_clear的函数~~~~~有人用这个型号的吗,这里怎么处理啊?

使用特权

评论回复
sonicll| | 2020-10-15 11:35 | 显示全部楼层
仔细看手册,读取USART接收数据寄存器,会自动清零RBNE标志位

使用特权

评论回复
xdqfc| | 2020-10-15 11:38 | 显示全部楼层
进中断,不一定是进入接收完成的中断,你用仿真器看看,究竟是哪一个中断标志被置位了,然后处理一下即可。

使用特权

评论回复
xdqfc| | 2020-10-15 11:45 | 显示全部楼层
最好注意一下溢出中断标志是不是被置位了。

使用特权

评论回复
搬砖的小蚂蚁|  楼主 | 2020-10-15 13:55 | 显示全部楼层
sonicll 发表于 2020-10-15 11:35
仔细看手册,读取USART接收数据寄存器,会自动清零RBNE标志位

是一直会进到这个中断里面,不是进入if语句里面,读取数据会清除RBNE标志位,但这个标志位不是产生中断的标志位啊,所以会一直进入这个中断!

使用特权

评论回复
sonicll| | 2020-10-15 16:39 | 显示全部楼层
搬砖的小蚂蚁 发表于 2020-10-15 13:55
是一直会进到这个中断里面,不是进入if语句里面,读取数据会清除RBNE标志位,但这个标志位不是产生中断的 ...

那你就需要查看寄存器,看具体是哪个中断标志置位了,是否应该清除

使用特权

评论回复
搬砖的小蚂蚁|  楼主 | 2020-10-15 17:05 | 显示全部楼层
找到问题了,我用的GD32F1x0_standard_peripheral库比较老,里面没有这个函数,好多其他的函数也不一样,从官网下载了一个新的固件库就可以了,这个资料是真的乱

使用特权

评论回复
lvben5d| | 2020-10-16 08:55 | 显示全部楼层
搬砖的小蚂蚁 发表于 2020-10-15 17:05
找到问题了,我用的GD32F1x0_standard_peripheral库比较老,里面没有这个函数,好多其他的函数也不一样,从 ...

GD32F1X0 V1.0的库 跟V3.0是不一样, 不过官网下最新的, 楼主用150为了用USBD吗?   没有USBD的应用,选通用130的哈。
ps:  无论哪款MCU串口中断 一般用到3类:第1个是接收,第2个(如果喜欢开发送中断的话)就会有发送中断,当然部分应用查询发送不会导致程序阻塞太久 也是可以的。 第3个【重要】接收错误中断,发生后要清异常错误标志,否则程序就会一直进,如果开了看门狗,就会因为中断太快而无法喂狗。  第3个是大家特别容易忽视的,有时候,你字节接收中断响应较慢 必然会引起接收溢出错误中断(这个只要串口中断优先级较高,收到1个字节就读出去的话 可以避免),不管如何,先设置到接收错误中断可以清0,程序都不会卡死而因看门狗复位!

使用特权

评论回复
lvben5d| | 2020-10-16 09:20 | 显示全部楼层
GD32F130的串口0 1  都要gpio_af_set(GPIOA, GPIO_AF_1, GPIO_PIN_X);     原生引脚上,基本都要AF_1  属于复用。 大家注意下,我第一次没注意,没调试不错。这个复用引脚的描述 是写在 DataShee_Rev 跟引脚定义在一个地方, 而编程手册里,我没注意是否有写这个。 564225f88f57853c99.png

使用特权

评论回复
搬砖的小蚂蚁|  楼主 | 2020-10-19 16:52 | 显示全部楼层
lvben5d 发表于 2020-10-16 08:55
GD32F1X0 V1.0的库 跟V3.0是不一样, 不过官网下最新的, 楼主用150为了用USBD吗?   没有USBD的应用,选 ...

嗯嗯,就是库的版本原因,使用新的库就可以了,一直都是用的中断做接收,发送不用中断,也没有用过错误接收中断。感谢指点!

使用特权

评论回复
lvben5d| | 2020-10-20 13:05 | 显示全部楼层
搬砖的小蚂蚁 发表于 2020-10-19 16:52
嗯嗯,就是库的版本原因,使用新的库就可以了,一直都是用的中断做接收,发送不用中断,也没有用过错误接 ...

查询发送 是最简单最常用方式,缺点是代码会因为查询发送结束标志而阻塞 直到发送完毕。

使用特权

评论回复
搬砖的小蚂蚁|  楼主 | 2020-10-22 10:16 | 显示全部楼层
lvben5d 发表于 2020-10-20 13:05
查询发送 是最简单最常用方式,缺点是代码会因为查询发送结束标志而阻塞 直到发送完毕。 ...

这样确实会堵塞,有什么更好的处理方式吗?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

9

帖子

0

粉丝