第十三届蓝桥杯嵌入式省赛


在看过题目后可知,大致要用到LCD、LED小灯、按键、串口、定时器PWM等。

一、首先大致将需用到的GPIO、外设等使用CubeMX初始化配置
(1)按键配置


根据原理图可知PB0、PB1、PB2、PA0对应四个按键,直接将这四个IO口配置为输入

(2)PWM输出配置


已知PA1输出,点击该Pin口发现有定时器2的通道2


由于已将该芯片配置系统时钟为80MHz,后再1分频将APB1总线也设为80MHz,定时器2挂载在该总线上,所以要输出1KHz频率的方波,则80/(Pre+1)/(ARR+1)=1K,这里我将Pre设置为79,ARR设置为999。
为了后续便于测试PWM输出是否正确,开启定时器4,使用输入捕获检测该输出


(3)开启串口,设置参数


由于需要接收数据进行分析,我们直接开启串口中断,简单方便

****Tips:

(4)设置为输出


同理,将PC8~PC15、PD2设置OUTPUT,其余默认即可
考虑到LED实现需计时等功能,我们再开启定时器6开启中断,配置为1ms进入一次。

二、各个功能代码的实现
(1)LED代码的实现


*此处LED2的闪烁不要使用HAL_GPIO_TogglePin()这个函数
由于G431的屏幕的IO与LED的IO复用,若使用该函数会导致LED的小灯状态不确定
(2)按键部分代码





(3)LCD屏幕
直接将官方给的驱动移植到工程中使用

(4)定时器功能实现



(5)串口功能



三、测试输出频率占空比是否正确



四、演示视频
在一系列调试修改后,功能实现视频如下(屏幕下方显示占空比与频率的代码在测试后注释即可):
