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通道。

posted @ 2021-11-09 14:52  jamaal555  阅读(35)  评论(0)    收藏  举报