2018年安徽省单片机竞赛AHTCM1队赛后总结

获奖感言:

十分感谢学院领导和老师带领我们参加2018年安徽省单片机大赛,也感谢金力老师、孙大勇老师对我们的信任与支持,让我们有这个机会去参加比赛,最后也拿到了理想的成绩。

学习经历:

我是从大三寒假的时候才学的stm32,以前从来没有接触过这个,完全是一时新鲜就准备比赛用这个平台了。寒假之前准备自己着手买一套战舰,后来孙大勇老师听说我要自己买,从实验室给我拿来了一套战舰,当时真的是从心底地感激老师。

寒假大概随便看了十几天的视频教程,当时感觉有点懵懂,不过还是觉得在自己驾驭范围之内,和我们飞思卡尔的K60很类似,只不过K60的底层调用起来更加方便,尤其是定时器模块,K60直接用的是PIT定时器,用起来方便。Stm32的定时器用的是TIM定时器,使用前同样也是先初始化一下,配置中断优先级,映射到中断向量表。唯一不同的就是K60的底层库更方便一点,直接传一个实参,这个实参就是代表我要多少ms中断一次,TIM定时器中断可能就要稍微复杂一点,要带入公式Tout=((arr+1)*(psc+1))/Tclk根据时钟频率来算中断间隔时间。几天煎熬的看原子哥的视频教程,感觉收获很少,基本没有任何提升,我所做的不过就是把一些原子提供的例程下载了一遍,也没调试多少,端口都改不了。我后来也在网上搜了一下如何快速入门stm32,网上给的建议无非就是多下程序,多看手册,多改引脚。我也是按照这个方法来学的,感觉学起来相对轻松很多,涉及到底层的东西就跳过去了没有怎么深入去研究。三天后,自己准备做一个开机界面,在论坛移植了一部分的代码,感觉也不是那么难。最后我准备显示一下我们学校的校徽在stm32上面,大概做了两天,在网上找各种资源,终于成功的将校徽显示在了TFT上面,当时做出来还是比较兴奋的。

对照着原子哥给的stm32库函数手册,我玩了很多比较常用的模块,当时就觉得stm32只是用来玩的,并没有什么技术含量(当时对底层不熟悉)。我后来尝试着去做孙大勇老师给的往年的题目,当时做的第一套就是15年的题,是做一个温度显示界面,通过按键可以调控温度的高温区和低温区,还要将温度的实时变化放在二维表中。当时感觉这个题目实在是太难了,几乎很难下手,尤其是显示界面要怎么做。我大概琢磨了将近一天,也不知道该如何去写这些界面,后来在网站上寻找一些能做图形界面的方法,终于找到一种叫做EMWIN的图形界面。

EMWIN大概学了几天,感觉就是在调用封装好的一些API,最后学着学着就放弃了,发现这个东西和比赛不对接……问了孙老师,孙老师直接给了我以前学长学姐们写得比较好的程序,说这里面一般有写好的图形界面。我立马把精力投入到前人的程序中,成功移植了温度显示界面、温度曲线显示界面、紫金花开机界面等各种精美界面,最后在原子论坛里面找到了一个显示时钟的界面。最终寒假结束的那几天,我成功把15年的题目还有17年的题目全部做完。

寒假回学校后,由于智能车竞赛规则变化较大,我也是第一年做电磁直立,这本身就是一个巨大的挑战,所以从3月份一直到4月份一直在忙碌智能车,stm32的学习之旅也就告了一段落。4月份左右,金力老师和孙大勇老师开始逐渐重视我们单片机竞赛组,基本每周会给我们开会(如果老师不重视,我估计也不会继续参加这个比赛了)。我后来赶紧做了决策,决定今年重新整治一下竞赛组,一定要把单片机竞赛搞好!我从我自身做起,每天花2个多小时学习stm32,由于学习的时间跨度不是很远,所以我很快又回复到了最佳的状态,做车和单片机两不误。

4月尾,合肥学院的老师给我们开了一次培训会,由于培训费收费400/人,当时老师就让我一个人去了,我去了之后,决定不辜负老师的期望,基本上把培训会老师说的重点全部记下来并分享在了我们竞赛群里面。当时对合肥学院的老师感觉还是很欣慰的,他们在自己做宣传的时候就说了这位主讲老师带出了很多国特的学生。老师在培训会主要就是讲了单片机的时序,还主要点了一下中断程序一定要简短。我当时对这两个概念并不是很熟悉,而且正好相反,我所有的控制全部写在了中断里面,中断里面冗余的代码非常大,尤其是矩阵按键扫描,只要矩阵按键按住不放,整个单片机全部卡死在delay_ms。起初我觉得这并不是很大的问题,只要我按矩阵按键按一下就立马松手就不会出现上面的问题,不过问题是多面性的。当我用到超声波模块的时候,我用的是共阴极数码管显示超声波的距离,这个涉及到动态扫描的过程。整个数码管一直在闪,我即便是把按键消抖去掉都没有用(减少程序执行时间)。后来了解到,数码管动态显示每秒每位要至少刷50次才不会闪屏。我后来大改了时序,将中断写的十分简短,只用中断处理一些比较重要的数据,最终的效果也是显而易见的。

学习stm32这么点时间,让我觉得最难的不是什么外部中断,也不是什么pwm、dma、adc啥的,而是数码管,我大概花了将近一周的功夫才攻克了这个模块,不过到现在还是有点疑惑,为什么数码管的数据口必须要用连续的端口,而且必须是要用低八位或者高八位才可以正常显示,我曾经试着将引脚换成其他的,不过数码管显示时总是会缺胳膊短腿的。后期我要画stm32的引脚图,将比赛用到的模块最好全部分散开,很少有重复,那么低八位的IO口都已经被其他模块占用了。当时都准备放弃数码管了,不过问题并没有这么糟,论坛坛友再一次帮助了我,给了我一种不是从低八位开始处理数码管的方案,虽然代码有点冗余,不过还是很有帮助的。

5月份左右,我们将新的模块基本已经全部移植成功,而且做到了引脚没有任何重复,移植过程也是出现了各种问题,尤其在做AT24C02存储模块的时候,只要一存多个数,后面就会将前面存的全部给覆盖(页式存储,换页数据会丢),芯片手册也看得不是很懂,什么页式存储也根本不会操作。最后几天的煎熬,还是勉强将这个模块做好了,不过每存一部分数据会丢失一小部分,这个问题我现在还没有解决,不过对于比赛来说,只要稍微处理一下就完全OK了。当然我也希望这个问题能够在接下来的时间里去逐渐解决。

 

 

赛前准备:

最后比赛的前几天,我还是有点紧张的,我自己能感觉到自己这次离省一应该不远了,清单模块全部移植成功,电子秤项目做得也是非常出色,我们最后把硬件用胶枪固定在硬纸板上面,以方便连线。比赛的前一天是开幕式,当时金力老师和我们一起吃的中饭,看着老师也这么勤恳地帮我们加油助威,当时有点泪奔,回校后,我暗自发奋,力争冲取省一,不辜负金力老师的期望!

比赛前的一晚,我睡得很香,因为我知道,现在想再多也没有任何作用了,平时的功夫就基本决定了明天的发挥。第二天比赛四个小时简直就是煎熬,当时虽然有点紧张,不过还好,算是正常发挥,提前30分钟就将所有题目全部完成。比赛完之后,我感觉像是做了梦一样,因为这次的题目我已经全部完成了,分数也是非常高,90多分左右,我心里有十足的把握能冲击省一。然而比赛完毕之后并不是一身轻松,最终成绩还是在比赛完的2天后才发布,这两天我入睡不是很香。

最后是省一,这是在我的预料范围之内的,比赛前我曾经对我家人说这次比赛九成是省一。当然结果也不错,我们是安徽省stm32组的第三名,我比完了之后感觉也并不是特别开心,因为这些都是我们慢慢努力得到的,一份耕耘一份收获吧!即便这次没有拿到省一,我感觉并没有什么大不了,失败能让我们成长,而成功的结果并没有带给我们什么好处。最后再贴上我这两年的智能车感悟,做智能车就一定要有一颗敢失败的心,我们因为电磁采集干扰问题一下画了六个板子,这六个板子是那种集成度比较高的主板—驱动一体板。从去年年尾一直到5月份,电磁采集一直干扰很大,我们尝试六个硬件方案,还是会有问题,当时都崩溃了,不过我们最终还是坚持下来了,也最终确定了最后的干扰源—电感,我们没有给电感配频导致的。当这个问题拨开云雾的时候,我们都觉得值了。

比赛感悟:

第一,大赛有助于提高综合素质,我们学会在错误和失败中成长,学会随机应变,学会当遇到突发状况,如何在巨大的压力和短暂时间的状况下处理好突发状况,需要我们沉着冷静的思考和随机应变的潜力,队友也起了很关键的作用,我们是一个团队,互相激励、互相鼓励。

第二,对自我的成长很有很大帮忙。一次次的比赛,从阅历上,给自我增添了一笔色彩,也拓展了自我的视野。在竞争激烈的比赛中,我们能够脱颖而出,但是,在如今这个现实的社会中,我们也务必给自我一个定位,超越自我,才能赢得掌声。

 

汪子健

2018年5月18日

阅读更多
文章标签: 省单片机竞赛
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭