蓝桥杯嵌入式USART

1.STM32Cube配置

USART1的默认端口不可用,所以需要更换为PA9,PA10

开启中断,设置传输速率等,生成代码

 

2.发送代码

发送比较简单,主要会使用sprintf和HAL_UART_Transmit_IT两个函数即可,有一些类型转换需要注意。


  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */
		sprintf((char *)str,"%d:I from shan dong universer of technology and science\r\n",Num);
		HAL_UART_Transmit_IT(&huart1,(unsigned char *)str,strlen((char *)str));
		HAL_Delay(500);
    /* USER CODE BEGIN 3 */
  }

 3.接收代码

这个是最麻烦的,我暂时不太会写接收多个不定长字符的;

目前接收一个的还可以,首先打开串口接收,在初始化的时候,之后编写中断回调函数,再次打开接收函数,准备下一次接收。

回调函数在一次接收完成之后才会进入,第三个参数表示需要接收这么多个字节的数据后才能进入中断。

 HAL_UART_Receive_IT(&huart1,RX,1);
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
  if(huart==&huart1)
	{
	   HAL_UART_Receive_IT(&huart1,RX,1);
	}
}

DMA+中断的形式

STM32CubeMX 的配置

还是要配置中断,另外添加两个DMA并打开他的中断

代码

1.在初始化时打开空闲中断标志位,并清除空闲中断标志位,之后打开接收函数

   __HAL_UART_ENABLE_IT(&huart1,UART_IT_IDLE);//´ò¿ªIDLEµÄ±ê־λ
   __HAL_UART_CLEAR_IDLEFLAG(&huart1);//Çå³ý¿ÕÏбê־λ
   HAL_UART_Receive_DMA(&huart1,RX,20);

 2.在中断函数前添加判断语句,清除空闲中断,停止DMA,并处理接收数据

	if(__HAL_UART_GET_FLAG(&huart1,UART_FLAG_IDLE)!=RESET)
	{
	     __HAL_UART_CLEAR_IDLEFLAG(&huart1);//Çå³ýÖжÏ
		 HAL_UART_DMAStop(&huart1);//Í£Ö¹DMA
		 HAL_UART_IdleCpltCallback(&huart1);
	}

3.编写处理函数

void HAL_UART_IdleCpltCallback(UART_HandleTypeDef *huart)
{
   recount =20- __HAL_DMA_GET_COUNTER(&hdma_usart1_rx);
   HAL_UART_Transmit_IT(&huart1,RX,recount);
   recount = 0;
   HAL_UART_Receive_DMA(&huart1,RX,20);
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

蓝本生

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

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

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

打赏作者

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

抵扣说明:

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

余额充值