蓝桥杯嵌入式串口通信(DMA方式)

文章详细介绍了如何使用STM32CubeMX进行配置,特别是在UART通信中选择PA9和PA10端口。代码部分展示了发送和接收的实现,包括计数器控制发送、中断处理和DMA回调函数的应用,用于实现串口数据的发送与接收。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.STM32CubeMX配置

 首选也是只能选PA9\PA10,原因无他,别的都被占用了?(不确定昂)

  

2.代码

(1)代码发送组成部分

void Task_Time(void)
{
   if(++key_count==10){key_count=0;key_scan=1;}
	 if(++uart_count==1000){uart_count=0;uart_send=1;}
	 if(++lcd_count==100){lcd_count=0;lcd_show=1;}
}

void UART_Send(void)
{
	 if(uart_send==1)
	 {
	    uart_send=0;
		  sprintf((char*)TX,"  HELLO WORLD\r\n");
      HAL_UART_Transmit_DMA(&huart1,(uint8_t*)TX,strlen((char*)TX));
	 }
}

void Task_List(void)
{
   Key_Scan();
	 UART_Send();
	 LCD_Show();
	 Uart_Recv();
}

LCD_DisplayStringLine(Line4,(uint8_t*)TX);

(2)代码接受组成部分

需要在串口中断处理上方加if语句

在usart.c中添加dma回调函数,并在main.h中添加函数名,

处理函数

void USART1_IRQHandler(void)
{
  /* USER CODE BEGIN USART1_IRQn 0 */
  if(__HAL_UART_GET_FLAG(&huart1,UART_FLAG_IDLE)!=RESET)
	{
	   __HAL_UART_CLEAR_IDLEFLAG(&huart1);//Çå³ýÖжÏ
		 HAL_UART_DMAStop(&huart1);//Í£Ö¹DMA
		 HAL_UART_IdleCpltCallback(&huart1);
	}
  /* USER CODE END USART1_IRQn 0 */
  HAL_UART_IRQHandler(&huart1);
  /* USER CODE BEGIN USART1_IRQn 1 */

  /* USER CODE END USART1_IRQn 1 */
}

void HAL_UART_IdleCpltCallback(UART_HandleTypeDef *huart)
{
   re_count =20- __HAL_DMA_GET_COUNTER(&hdma_usart1_rx);
   re_count = 0;
   HAL_UART_Receive_DMA(&huart1,rx,20);
   rx_deal = 1;	
}

if(rx_deal==1)
{
	rx_deal=0;	
	HAL_UART_Transmit_DMA(&huart1,rx,strlen((char*)rx));
}


    __HAL_UART_ENABLE_IT(&huart1, UART_IT_IDLE);   
	__HAL_UART_CLEAR_IDLEFLAG(&huart1);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓝本生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值