上一节我们初步了解了中断的配置、串口的调试以及中断处理子程序的定义,接下来我们就来学习一下具体如何去应用串口中断。
一、真题引入
1.功能概述
2.串口功能
二、环境配置
我们依旧以第四节完成的第12届蓝桥杯节选题为初始环境进行配置,复制出副本改名为USART
1) CubeMX 初始化 USART1
(一配引脚和异步通讯,二配速率、长度等,三配中断允许和优先级);
2) 打开keil,将main.c恢复到两节前的内容
参考原来代码里的全局变量、头文件、函数声明、函数定义进行文件恢复。
这告诉我们编程时及时存档拷贝备份是很重要的!!)
3)在 main 中 while 循环前第一次调用 HAL_UART_Receive_IT(),允许接收中断;
**HAL_UART_Receive_IT(UART_HandleTypeDef huart, uint8_t pData, uint16_t Size)
**功能:**设置接收数据存放的位置和接收数据的长度。串口接收到指定长度数据后,关闭中断(只触发一次),进入中断接收回调函数。
函数定义位于stm32g4xx_hal_uart.c文件1370行左右
将该函数写在进入while(1)的前一行:
HAL_UART_Receive_IT(&huart1, (uint8_t *)usart_rx_buffer,RxLen);
第一个参数为选择的串口,第二个参数为存储接收信息的数组,第三个参数为接收信息长度。
可以看见图中报错,是因为我们并没有对这些变量进行定义。
将定义写入usart.h中:
接收信息长度为22,是因为题目中停车场信息长度规定且定长
uart.c文件中也要进行变量的声明定义: