【STM32】HAL库串口DMA发送接收

目录

一、工程创建

 二、keil文件的创建

三、烧录运行

 四、输出

五、参考链接


一、工程创建

【STM32】HAL库串口DMA发送接收_第1张图片

 【STM32】HAL库串口DMA发送接收_第2张图片

 【STM32】HAL库串口DMA发送接收_第3张图片

 DMA设置

【STM32】HAL库串口DMA发送接收_第4张图片

 时源设置

【STM32】HAL库串口DMA发送接收_第5张图片

 【STM32】HAL库串口DMA发送接收_第6张图片

 二、keil文件的创建

【STM32】HAL库串口DMA发送接收_第7张图片

 while循环

 while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
		 if(recv_end_flag == 1)  //接收完成标志
		{
			
			
			DMA_Usart_Send(rx_buffer, rx_len);
			rx_len = 0;//清除计数
			recv_end_flag = 0;//清除接收结束标志位
//			for(uint8_t i=0;i

stm32f1xx_it.c中

#include "usart.h"

void USART1_IRQHandler(void)
{
	uint32_t tmp_flag = 0;
	uint32_t temp;
	tmp_flag =__HAL_UART_GET_FLAG(&huart1,UART_FLAG_IDLE); //获取IDLE标志位
	if((tmp_flag != RESET))//idle标志被置位
	{ 
		__HAL_UART_CLEAR_IDLEFLAG(&huart1);//清除标志位
		//temp = huart1.Instance->SR;  //清除状态寄存器SR,读取SR寄存器可以实现清除SR寄存器的功能
		//temp = huart1.Instance->DR; //读取数据寄存器中的数据
		//这两句和上面那句等效
		HAL_UART_DMAStop(&huart1); //
		temp  =  __HAL_DMA_GET_COUNTER(&hdma_usart1_rx);// 获取DMA中未传输的数据个数   
		//temp  = hdma_usart1_rx.Instance->NDTR;//读取NDTR寄存器 获取DMA中未传输的数据个数,
		//这句和上面那句等效
		rx_len =  BUFFER_SIZE - temp; //总计数减去未传输的数据个数,得到已经接收的数据个数
		recv_end_flag = 1;	// 接受完成标志位置1	
	 }
  HAL_UART_IRQHandler(&huart1);

}

三、烧录运行

【STM32】HAL库串口DMA发送接收_第8张图片

 四、输出

【STM32】HAL库串口DMA发送接收_第9张图片

 频率更快的输出

五、参考链接

(9条消息) 【STM32】HAL库 STM32CubeMX教程十一---DMA (串口DMA发送接收)_Z小旋的博客-CSDN博客_stm32cubemx dma

你可能感兴趣的:(stm32,单片机,arm)