cubemx的配置方法我就不多说了
配置RCC时钟。。。设置sys。。。配置uart串口。。。初始化DMA。。。dma那里的rx要设置为circle,否则接收不到。。。然后generate code
主要是原子的教程里面是自己配置串口的,不是用cubemx,因此配置出来的结构体。。好像有人说是句柄,的名称不一样,如果照着原子的抄的话会找不到定义的结构体
如:__HAL_DMA_GET_FLAG(&UART1TxDMA_Handler,DMA_FLAG_TCIF3_7
&UART1TxDMA_Handler这个一直找不到,然后又不知道cubemx配置出来的叫什么,因此很难弄。
答案是在dma.c文件里面,里面有
DMA_HandleTypeDef hdma_usart1_rx;
DMA_HandleTypeDef hdma_usart1_tx;
定义了这两句,我们要做的是把原子给的例子里面的变量替换:
&UART1TxDMA_Handler ------ &hdma_usart1_Tx
&UART1RxDMA_Handler ------ &hdma_usart1_rx
在dma.h文件里面加上
extern DMA_HandleTypeDef hdma_usart1_tx;
即可
DMA的一些函数
获取是否在发送DMA数据,如果是则返回1
__HAL_DMA_GET_FLAG(&hdma_usart1_rx,DMA_FLAG_TC4)
获取DMA还剩多少数据没发
__HAL_DMA_GET_COUNTER(&hdma_usart1_tx);
发送完成后清除标志位(第一条代码的标志位清零)
__HAL_DMA_CLEAR_FLAG(&hdma_usart1_tx, DMA_FLAG_TC4);