Bootstrap

H743教程三:stm32H743 ucosii下的串口DMA发送和中断接收加空闲中断

1.ucosii移植参考本人上一篇:https://blog.csdn.net/winnerycy/article/details/119089995?spm=1001.2014.3001.5501

2.cubumx配置串口,如下图

3.配置DMA

 4.配置中断

 5.生成代码后,添加空闲中断使能代码

__HAL_UART_ENABLE_IT(&huart1, UART_IT_IDLE);//使能idle中断

6.h743的DMA比较特别,他有几个内存区,默认的内存区与DMA不相连,所以定义buf的时候要定义到与DMA相连的地址上

 

 

 7.所以修改工程下的stm32h743xx_flash.icf文件,添加如何下画圈部分

8.定义buf时这样定义: 

 

 9.串口DMA发送代码:

if(HAL_UART_Transmit_DMA(&huart1,cbuffer,csize) != HAL_BUSY)

10.串口中断接收代码

HAL_UART_Receive_IT(&huart1, cbuffer, RX_BUF_SIZE);

11.中断处理

 

12. usart1_Rx()   ,usart1_Tx()  为加入了环形队列的发送接收接口函数

13.中断中不能调用ucosii先关的函数,例如信号量的处理等,加了暴力测试串口时会出错,查了下貌似和内核管理中断有关,这个玩意CPU_CFG_KA_IPL_BOUNDARY。但也尝试了中断加OSIntEnter() 和OSIntExit(),修改中断号范围>CPU_CFG_KA_IPL_BOUNDARY, 也不行。具体原因还未找到,忘赐教。

;