实现目标
1、利用UART实现上位机PC与下位机开发板之间的数据通信
2、学会STM32CubeMX软件关于UART 中断方式的配置
3、具体目标:1、开发板将接收到的上位机数据反发送回上位机串口调试助手。
一、中断方式简介
1、中断方式
中断就是在寄存器有一个字节数据的时候触发一次中断,而不用一直扫描寄存器状态,节约了系统资源。例如串口接收24字节数据,HAL_UART_Receive_IT(&huart1, (uint8_t *)&Rx, 1) 意思就是每来一个字节数据中断一次,中断之后就进入回调函数进行处理,此时Rx是一个uint8_t的字节数据。HAL_UART_Receive(&huart1, (uint8_t *)Rx, 24)意思是没来一个字节数据中断一次,等接收到24个字节数据之后再统一进入回调函数之后进行处理,此时Rx是一个uint8_t的数组字节数据。
缺点:虽然解决了轮询不断扫描寄存器状态的缺点,但CPU接收数据会触发中断,对于实时要求高的场所,不适用。
二、原理图设计
三、STM32CubeMX 配置
1.USART1 中断方式配置
四、程序设计
1、定义接收数组和一个接收标志位
/* USER CODE BEGIN PV */
uint8_t Rxbuf[2];
uint8_t RxFlag = 0;
/* USER CODE END PV */
2、开启接收中断
/* USER CODE BEGIN 2 */
HAL_UART_Receive_IT(&huart1, (uint8_t *)Rxbuf, 2); // 使能串口接收中断
/* USER CODE END 2 */
3、功能程序设计
while(1)
{
if (RxFlag)
{
RxFlag = 0;
//发送
HAL_UART_Transmit(&huart1,Rxbuf,2,100);
}
}
4、回调函数
/* USER CODE BEGIN 4 */
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
if (huart->Instance == USART1)
{
RxFlag = 1;
HAL_UART_Receive_IT(&huart1, (uint8_t *)Rxbuf, 2); // 使能串口接收中断
}
}
/* USER CODE END 4 */