文章目录
- 开启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中加上下图一段就可以解决问题。


![[CrackMe]Cruehead.1.exe的逆向及注册机编写](https://img-blog.csdnimg.cn/4764eed52f69487ba009f911e869420a.png)

















