文章目录
- 开启DMA rx中断,数据帧总是接收不全就产生中断?
- PB3/PB4等和JTAG复用的管脚不能使用?
- uart使用DMA传输,调用close再open之后就接收不到数据了?
开启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
中加上下图一段就可以解决问题。