2020年嵌入式第十一届省赛真题解析
按键扫描:检测按键状态,切换状态机和调整占空比。 LED控制:根据状态显示对应的LED信号。 LCD显示:显示当前状态信息和参数值。 ADC采样:读取V37值,用于占空比计算。
发布日期:2025-06-19 06:42:35
浏览次数:4
分类:精选文章
本文共 1454 字,大约阅读时间需要 4 分钟。
全片分析与程序实现
一、系统概述
系统基于STM32微控制器,通过定时器和PWM技术实现对PA6和PA7引脚的控制。系统主要包含按键扫描、LED显示、LCD显示、UART通信、ADC采样以及定时器PWM输出等功能。按键B3用于切换显示界面和模式切换,系统能够在数据界面和参数界面之间切换,并根据ADC输入值调整输出占空比。
二、状态机分析
系统采用状态机控制,状态包括:
- 状态0:数据界面
- 状态1:参数界面
- 状态2:自动模式
- 状态3:手动模式
状态机通过按键B3切换,按键B3在数据界面下保持原占空比不变,同时切换频率输出。
三、PWM控制实现
系统使用定时器TIM3和TIM17输出PWM信号,分别控制PA6和PA7引脚。
1. PWM频率调节
- 定时器配置:
- 主频为80MHz,经分频后得到计数频率1MHz。
- 自动重载值决定PWM周期:
- PA6(绿色):200Hz(周期1000)
- PA7(黄色):100Hz(周期500)
2. 占空比调节
通过HAL_TIM_SET_COMPARE函数设置占空比:
- 占空比计算:占空比为V37/3.3 × 100%
- 配置方式:
- 自动模式:PA6占空比为100% × V37/3.3,PA7占空比为50% × V37/3.3
- 手动模式:PA6占空比为50% × V37/3.3,PA7占空比为100% × V37/3.3
四、程序实现
程序主要包含以下功能:
1. 状态切换逻辑
- 数据界面切换:LCD显示切换为参数界面。
- 模式切换:自动模式切换为手动模式或反之。
2. 占空比调整
- 数据界面:显示参数界面,PA6和PA7值可调。
- 参数界面:显示当前占空比,PA6和PA7值自动调整。
五、关键代码解析
// 定时器配置HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1); // PA6HAL_TIM_PWM_Start(&htim17, TIM_CHANNEL_1); // PA7// 按键扫描void Key_Proc(void) { if ((uwTick - uwTick_Key_Set_Point) < 50) return; uwTick_Key_Set_Point = uwTick; ucKey_Val = Key_Scan(); // 切换状态机和调整占空比}// LCD显示void Lcd_Proc(void) { if ((uwTick - uwTick_Lcd_Set_Point) < 100) return; uwTick_Lcd_Set_Point = uwTick; // 刷新LCD显示 // 状态显示 if (state == 2 || state == 3) { sprintf(Lcd_Disp_String, " Mode:AUTO"); } else { sprintf(Lcd_Disp_String, " Mode:MANU"); }} 六、总结
本系统通过状态机和PWM技术实现了对PA6和PA7引脚的精确控制,支持自动模式和手动模式切换,且占空比可根据需求调整。系统结构清晰,代码简洁,易于扩展和维护。
发表评论
最新留言
第一次来,支持一个
[***.219.124.196]2026年06月05日 09时46分48秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!