RTThread实际开发问题统计

文章讨论了在使用DMA进行UART接收时遇到的问题,包括数据帧未完整接收即触发中断,解决方法是禁用特定的中断回调;PB3/PB4等端口与JTAG复用时的配置,需启用特定的AFIO和复用设置;以及在关闭并重新打开串口后接收不到数据,原因是close操作未重置DMA接收缓冲区的偏移,修复需要在代码中添加适当的清理步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


在这里插入图片描述

开启DMA rx中断,数据帧总是接收不全就产生中断?

因为代码中默认开启了Rx Half transfer中断,我这就没有具体去找中断的配置,我是直接在drv_usart.c中将HAL_UART_RxHalfCpltCallback里面的实现给注释掉的。

PB3/PB4等和JTAG复用的管脚不能使用?

因为这两个管脚是需要打开JTAG的复用功能的,所以在drv_gpio.c中的rt_hw_pin_init函数结尾加上 __HAL_RCC_AFIO_CLK_ENABLE(); __HAL_AFIO_REMAP_SWJ_NOJTAG();这两个函数就可以了。

uart使用DMA传输,调用close再open之后就接收不到数据了?

使用的版本是4.0.3
使用rt_device_close关闭串口后,重新config波特率,之后再调用rt_device_open打开串口。就会提示"Warning: There is no enough buffer for saving data," " please increase the RT_SERIAL_RB_BUFSZ option."之后串口就收不到数据了。
经过排查发现代码对于DMA传输,会维护一个uart->dma_rx.last_index用于记录buffer的偏移。但是close的时候并没有置为0导致出问题,这里在stm32_control中加上下图一段就可以解决问题。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值