备赛记录第一天——HAL库串口DMA和空闲中断

一、STM32串口DMA;

1、串口DMA除其他基本配置以外,DMA配置如图;

	HAL_UART_Receive_DMA(&huart1, (uint8_t *)RxData, sizeof(RxData));

2、main函数前加上这句程序,RxData为自定义容量为7的数组,储存收到的数据;

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
	if(huart->Instance==USART1)
	{
	if(RxData[0]==0xAA&&RxData[6]==0x55)
	{

		HAL_UART_Transmit_IT(&huart1, (uint8_t *)TxData, sizeof(TxData));
	}
	HAL_UART_Receive_DMA(&huart1, (uint8_t *)RxData, sizeof(RxData));
   }
	
}

0xAA和0x55为数据帧的帧头和帧尾,回调函数可以执行所需要的内容;

二、串口空闲中断

1、cubemx的配置不变,main函数前加上以下语句,RxData_V为自定义的容量为50的数组:

	  HAL_UARTEx_ReceiveToIdle_DMA(&huart1,RxData_V,50);

2、其他代码:

void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
{
  if(huart->Instance==USART1)
  {

		HAL_UART_Transmit_IT(&huart1,(uint8_t*)Size,2);
  }
	  HAL_UARTEx_ReceiveToIdle_DMA(&huart1,RxData_V,50);
}

SIze为数据的长度,半空闲中断也会触发空闲中断函数,使用时如果有必要,需关闭半空闲终端函数,具体内容参见keysking的B站教程

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值