基于STM32F1的超级终端串口控制程序思路分析(洋桃派M1)
一、准备
- 洋桃电子 M1 核心板;
- 用户程序中的“1-2-11-超级终端串口控制程序”;
- HyperTerminal 超级终端软件。
二、业务说明
- 需求说明:
打开超级终端软件,连接对应的 COM 口,按下键盘上回车键之后出现操作提示菜单:
按照菜单提示输入相应的指令,超级终端上返回对应的字符串,STM32 的 LED 灯作出相应的反应,如图所示(这里省略了单片机的状态照片):
如果输入了错误的指令,超级终端会显示“指令错误!”,STM32 不会作出反应,如下图所示:
三、业务逻辑分析
- 总体的思路是 STM32 对输入的指令进行识别,根据输入指令的不同 STM32 给出不同的反应;
- 代码中可定义一个全局的 16 位串口接收状态变量(
USART1_RX_STA
),根据这个值判断什么时候接收完成以及接收数据的数量是多少; - 全局变量的高两位用来判断是否接收到
0x0d
和0x0a
(键盘上的回车)。当接收到0x0d
时 USART1_RX_STA 变量第 15 位置 1(即USART1_RX_STA|=0x4000;
),当接收到0x0a
时,USART1_RX_STA 变量第 16 位置 1(即USART1_RX_STA|=0x8000;
); - 程序中设置将接收到的超级终端发送来数据放在数组
USART1_RX_BUF
中,该数组最大的长度是 200,读到0x0d
和0x0a
证明数据接收结束,只有当USART1_RX_STA & 0xC000
为真时才能执行 main 函数中的while(1)
循环中的代码,进而 STM32 才会做出响应; - 通过递增全局变量后 14 位的值,可以将接收到的数据放在数组中,当该值的大小超过数组最大接收长度时,该全局变量将清零,重新计数;
- main 函数将全局变量 USART1_RX_STA 的初始值设置为
0xC000
,以便按下回车后可以直接输出按键提示命令; - 程序对单片机执行一次操作后,要记得将全局变量 USART1_RX_STA 清零,以便下一次判断超级终端的输入。
上述的操作整理成流程图,如下所示: