问题
第七章的实例二主要是基于第六章的两个实例,对第六章的两个实例进行完善并增添功能。这里先把相关问题全部展示在下方。
第六章实例1:串行异步通信应用——收发信息。
借助串口助手,通过串口打印信息是一种常用的调试方法,在特定位置输出打印信息可以直观地观察程序的运行状态,判断程序的运行结果是否与预期逻辑一致。本例采用CH340芯片实现USB转串口。利用上位机的串口与STM32的SUART1通信。上位机通过键盘给STM32的串口发送字符,STM32将接收到的字符再传回上位机。在上位机上通过串口调试助手显示结果。
第六章实例2:串行异步通信应用——上位机控制LED亮灭
本例通过串口调试助手来实现与上位机通信,要求如下:
1)按键控制LED2亮灭
2)上位机可下发指令控制LED1亮灭,数据协议如下:
协议头 | 数据来源 | LED1控制状态 | 保留 |
AABBCCDD | 00:上位机 | 00:灭,01:亮 | 0000 |
3)下位机通过串口中断接收上位机下发的指令,主程序判断指令的有效性,若有效则解析指令并控制LED1亮灭,若无效则上传指令无效信息(8个字节全为0)
4)下位机每隔一段时间向上位机上传LED1和LED2状态信息,数据协议如下:
协议头 | 数据来源 | LED1控制状态 | LED2控制状态 | 保留 |
AABBCCDD | 01:下位机 | 00:灭,01:亮 | 00:灭,01:亮 | 00 |
第七章实例2:定时器设计实例——串行口定时上传信息
结合第六章的串行通信,采用定时器定时中断功能,间隔1s上传LED1和LED2状态信息,其他要求不变。
代码
这里直接给出工程文件中main文件中的代码,由于本人相关经验不足,为了方便调试,将所有代码集成在了同一个文件内。请读者见谅。
#include "stm32f10x.h" // Device header
#define data_num 8 //定义数据个数,见表6-2
#define check_num 4 //定义检测帧头数据
#define LED1_control_Bit 5 //LED1 控制位
#define LED2_control_Bit 6 //LED2 控制位
//定义LED开关函数
void LED1_On(void)
{
GPIO_SetBits(GPIOA,GPIO_Pin_2);
}
void LED1_Off(void)
{
GPIO_ResetBits(GPIOA,GPIO_Pin_2);
}
void LED