一、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站教程