第十二届蓝桥杯嵌入式——赛后总结

前言

本人系第一年参加蓝桥杯嵌入式,本文仅作为自己的赛后总结,写的不好还请海涵。使用的开发板是新板(STM32G431)。

主观题分析

这次的主观题难度不很大,要求你设计一个八车位的停车场管理系统,具有显示车位占用状态、收费标准调整、通过串口存储车牌信息并进行处理、自动计算停车费并通过串口反馈等功能。设计到的外设主要有:LED、按键、串口、LCD、定时器。
因为在准备其他比赛,所以暂时没空复现完整代码,这里只写思路,有空补上。

LED

点灯人,点灯魂,点灯是考的基础的GPIO输出应用。通过查看资源包中的原理图,可以很快判断:GPIO输出低电平&先拉低再拉高PD2,即可点亮LED。

LED部分原理图
但是,每次更新LED对应IO口时,必须对所有LED的IO进行电平设定,原因大概是操作LCD时,会把PC8~PC15拉低(在蓝桥杯群里看见的,之前都没注意这个问题)
LCD部分原理图

按键

按键就是简单的GPIO输入应用,题目要求对按键进行消抖处理,且响应时间小于0.2s(200ms)。实现起来也非常简单,直接使用查询的方式,对应IO口读到低电平,HAL_Delay,再读到低电平则可判断按键被按下。延时我写的是100ms,效果挺不错的,没出现过重复触发的情况。
按键原理图

串口

串口需要注意的是题目中要求的波特率是9600。剩下的就没啥了,根据协议长度,定义buffer,开启中断接受,重写串口中断回调函数,记不得的话可以ctrl+f直接搜索,但一定别复制错了(《关于我复制错了函数名然后一个小时没找出协议解析失败原因这件事》)。

数据处理

先上协议:
停车类型(4位):车牌号(4位):YYMMDDhhmmss,加起来一共22位,冒号做分隔符。

查询与存储

计算停车费,首先得记录该车的车牌、入场时间、停车类型这三项信息。看见这个需求,我第一反应就是——上链表!灵活的增加、删除数据,感觉很不错,但是我忘了咋写(dbq马上重新去学数据结构)。无奈之下采用了一个二维数组和几个一维数组来存储信息。还好只有8个车位,存储和查询直接遍历问题都不会很大。
在存储数据前,我们应先查询该车是出场还是入场——即检查数组中是否有该车牌信息。这部分可以通过遍历解决,先判断读取的停车类型是否与当前的类型吻合,若吻合,则判断车牌号,否则继续查询,同时记录下最后一个空闲状态的车位地址,若该车是入场则可以直接进行存储。

停车费计算

当查询到吻合的车牌号后,便可以判定是出场了。首先将多位uint8_t型的时间信息转换为具体的小时,其中分和秒单独计算,因为不满一小时按一小时计。然后直接根据停车类型和收费标准干就完事了,最后HAL_UART_Transmit,解决。

其它部分

下述部分全部放在while里就行。

按键切屏

检测到按键按下,调用给的函数重新输出LCD信息即可。

空闲车位亮灯

和按键一样,不断查询。

PWM和低电平切换亮灯

这部分当时没来得及做(本来应该最先做的),设定个定时器,输出PWM,通过改变占空比在方波和低电平间切换。

赛后总结

第一次参加蓝桥杯,也是蓝桥杯嵌入式第一年用新板+HAL库。看往年的标准库经验都是找到官方例程–>复制–>粘贴,所以没大上心,只留了一个晚上熟悉板子。在考场上随便看了两眼题目觉得不难,一开始慢悠悠的边写边测外设,浪费了不少时间。坐我隔壁看着挺老练的哥们看着比我还闲,更加坚定了我对题目量很小的错觉(到最后发现原来是他不会)。
通过本次“力争省四”的经历,总结如下。
1.因为HAL库代码量很大,所以先读题,然后把所有用到的IO和外设都在Cube里先配好,一次生成,节省时间。
2.赛前一定要能熟练编写相关外设代码(实际上也没几个),上了赛场可以很快的复现出来,减少测试外设代码的时间。中断回调函数函数名一定别敲错。
3.提前一天看客观题。
4.心态要稳,别漏提交文件
5.早饭一定要吃,同时确保自己的水杯杯盖能扭开(关于我泡了热茶结果场上扭不开然后嗓子冒了五小时烟这件事)

发布本文时离省赛出结果大概还有一个星期左右,PWM没写费用没测试+最后一分钟提交并在一天后想起漏交main.h的我觉得自己已经可以参加省四争夺赛了。

2021.05.26更新:
结果出了,意外拿了个省二,回本基础上还能赚点小钱钱造车,这波不亏。明年时间较为充裕(大概不做RM了),好好准备一手,争取搞个省一回来。

2022.03.12更新:
沉迷造车的鸽子终于想起来还有一个月不到就省赛了,把板子和题目翻出来又做了一遍。脱离生产环境好久手速也不行了,前前后后做了好久。。。尝试了之前想的链表方案,写出来相对有点复杂,而且有点bug不想修了,就用遍历法简单写了一个。大体测试了下没啥问题,下面附上链接:
du盘:https://pan.baidu.com/s/14M4SYPv-Ja8wXI1zMRcKTQ?pwd=paay
提取码: paay
LED部分还在有点问题,暂时把文件先删了,编译的时候需要自己补上led代码

  • 8
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 14
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值