usart dma
cubemx配置usart1后:【STM32】HAL库 STM32CubeMX教程四---UART串口通信详解_Z小旋-CSDN博客_hal_uart_transmit
发送:
HAL_UART_Transmit()可以发送;
接受:
HAL_UART_Receive_IT()开启中断。//函数内部有置位中断位
USART1_IRQHandler()写中断服务函数。调用HAL_UART_IRQHandler(),并重新开启中断。FIFO满的时候,调用HAL_UART_RxCpltCallback。

写逻辑在HAL_UART_RxCpltCallback()。
HAL_UART_Receive
收发:
HAL_UART_Transmit发送,
HAL_UART_Receive_IT接收//使用中断,可以有数据时收
中断:
DMA:
STM32带FIFO的DMA传输应用示例_茶话MCU的博客-CSDN博客 解释fifo的作用。主要是转换字长。
【STM32】HAL库 STM32CubeMX教程十一---DMA (串口DMA发送接收)_Z小旋-CSDN博客 cubemx配置dma串口
正点原子f7 492页
cubemx配置好后,HAL_UART_Transmit_DMA发送即可。
HAL_UART_Receive_DMA中没有接收数据,而是转到了UART_Start_Receive_DMA,这里才接收数据从串口的数据寄存器中。然后进入UART_DMAReceiveCplt回调函数,此函数中先关闭DMA,进入HAL_UART_RxCpltCallback,在这里写处理逻辑。在这里重新打开DMA。(和中断的处理过程类似)
//HAL库UART按DMA方式发送和接收函数简析及测试_u012780337的专栏-CSDN博客
以Normal方式传输时会关闭UART的DMA通道,并使能UART传输完成中断,触发UART传输完成中断。
------------------------------------------------------------------------------------------------------------------------------------------------------------------
串口使用:
step1 cubemx配置
step2 一般采用中断接收(HAL_UART_Receive_IT),超时发送(HAL_UART_Transmit)。HAL_UART_Receive_IT的意思是,在串口的数据寄存器接收到数据后,触发中断,并把数据传送到指定的内存中。HAL_UART_Receive_IT不会每次都触发回调,而是达到size后才会触发回调,这点可以看正点原子的ppt。
注意两点,首先,需要先调用一次HAL_UART_Receive_IT以打开中断;其次,由于中断后会自动关闭中断,每次在终端回调函数中,写完逻辑后,需要重新HAL_UART_Receive_IT,以重新打开中断。
step3 采用dma时的操作与中断相似。dma是通过中断实现的,所以需要cube中打开串口global中断。按照“HAL库UART按DMA方式发送和接收函数简析及测试_u012780337的专栏-CSDN博客”即可实现dma收发。同样初始化时先调用一次HAL_UART_Receive_DMA。在回调函数中重新调用HAL_UART_Receive_DMA以打开DMA通道。

浙公网安备 33010602011771号