1、cubemax端配置
1.1 初始化配置
首先通过STM32cubemax进行基础配置:
cubemax基础配置
1.2 GPIO配置
通过一个LED小灯(高电平有效)来观察效果,对PB0引脚进行GPIO配置,如下图所示:
1.3 UART配置
1.3.1 串口基础配置
1.3.2 DMA配置
首先对RX进行配置,如下图所示:
接着对TX进行配置(默认就行),如下图所示:
2、keil端代码设计
2.1 初始化配置
首先在主函数上方进行发送、接收数组设置,如下图所示:
uint8_t tx[] = "TX ok"; uint8_t Rx[2];
2.2 DMA接收初始化配置
HAL_UART_Receive_DMA(&huart1,Rx,sizeof(Rx));
2.3 DMA发送配置
HAL_UART_Transmit_DMA(&huart1,tx,sizeof(tx)); HAL_Delay(1000);
2.4 接收回调函数设置
首先找到HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)函数,如下图所示:
接着将函数按下图所示复制到主函数上方:
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { /* Prevent unused argument(s) compilation warning */ UNUSED(huart); /* NOTE: This function should not be modified, when the callback is needed, the HAL_UART_RxCpltCallback could be implemented in the user file */ }
2.5 回调函数内容代码编写
2.5.1 接收回调函数
//接收到数据 LED小灯电平翻转
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { if(huart1.Instance == USART1) { HAL_GPIO_TogglePin(LED_GPIO_Port,LED_Pin); } }
2.5.2 发送回调函数
将接收回调函数中R改成T即可实现发送回调函数功能。如下图所示:
当有数据发送,回调函数进行工作,如下图所示:
uint8_t tx2[] = "TX_IT ok"; //发送回调函数 void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart) { if(huart1.Instance == USART1) { HAL_UART_Transmit_DMA(&huart1,tx,sizeof(tx2)); } }
2.6 回调函数内容代码优化
当在回调函数中添加延时后,会发现程序卡死,因此需要对NVIC进行配置,如下图所示: