江苏省第十届蓝桥杯嵌入式省赛赛后总结

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/dbfy666/article/details/88780250

2019.3.24

比赛地点是在常州的江苏理工学院,

先来吐槽一下把

作为参赛者来讲,感觉主办方非常的不用心,可能是不重视这种比赛,比赛地点在力行楼,靠近南门的地方,去的时候不让进,让我们把车开到北门进,北门的保安也不知情,直接说不让进,我们说是南门的保安让我们开到北门后,他才让我们下车走进去,但还是没让大巴开进去,于是我们要横跨校园去比赛地点,进学校后,没有导航的人不说,连醒目的导向牌都没有,于是我们只能开百度地图找地方,报单片机的比赛地点似乎百度地图还搜不到。终于到比赛机房后,也没有老师解释情况,有两个老师在整理考场,我们就在外面等,监考的老师对整个流程也不熟悉,比赛开始半个小时后才给我们发资料包,解压密码也半天才说,然后中途不知道什么时候(已经开始比赛,没在意)突然开始念起来比赛注意事项,最难受的是本校参赛的还当场发午饭,我是第一次参赛,没考虑到还可以带面包之类的进去中午充饥,因为比赛时间是早上9点到下午14点,共5个小时,不过问题不大,我3个小时左右的时候就写完了,检查了一下就出去点外卖了嘻嘻。话说常州外卖还挺实惠的,9块钱点了不少东西。

还有就是感觉省赛太水了,准备了很充分,串口、PWM输出、比较输出PWM、捕获输入、IIC等都准备了,然而考试只用到了ADC,,,看完题目的时候我心态就有些崩了,感觉都白准备了,,,题目没带回来

题目的要求大概就是 用ADC测量R37的电压,然后显示出来,然后有上下限,大于上限一个LED灯以0.2s间隔闪烁,小于下限另一个闪烁,中间就没有警报,然后上下限,具体哪个LED灯亮可以通过按键设置,LCD有两个界面,一个显示测量参数,另一个是设置界面。实现的功能就是这样,具体还有一些细节,比如两个LED灯不能相同,电压上下限范围为0-3.3V等。

相比于往年的题目感觉很简单,要配置的外设少,要设计的系统也很常规。

比赛时遇到的问题的话就是,

就是想让某一个LED灯亮的问题,赛前练习的时候一直是用GPIO_ResetBits(GPIOC,1<<(ledx+7));

这句代码来设置,一直没发现这跟直接用 GPIO_ResetBits(GPIOC,GPIO_Pin_8);其实是一样的,然后蓝桥杯的CT117板子8个LED灯的io口是跟LCD共用的,通过锁存器来控制,所以每次想亮一个灯的时候,应该是LCD的程序让这几个管脚都输出低电平,所以会8个灯全亮。

解决方法有两种,①是把1<<(ledx+7)取反后直接赋值给控制寄存器  ②是在 GPIO_ResetBits某个管脚前,先把所有管脚输出高电平,即 GPIO_SetBits(GPIOC,0xff00);,然后再把某个管脚输出低电平

第一种方法要去找寄存器,第二种方法虽然代码多,但编起来思路清晰,我采用了第二种方法。

还有就是延时问题,我采用系统滴答计时器来延时,在中断里设置了一个变量的自增,因为初始化后每1ms会进一次中断,所以可以用来延时,同时不影响程序运行,相关代码如下,但是设置完,LED差不多2s闪烁一次,我不知道是哪里卡了时间,我把Update_Time显示出来看,是正常的,差不多两秒加到2000,然后从头开始,但是LED就是不配合,最后我就缩小了100倍对2取余来判断了,现象来看差不多了,但是还是不知道问题出在哪。

SysTick_Config(SystemCoreClock/1000); //初始化

u16 Update_Time=0;//定义变量

extern u16 Update_Time;  //中断在stm32f10x_it.c里,要声明外部变量
void SysTick_Handler(void)  //滴答定时器的中断
{
	TimingDelay--;
	Update_Time++;
	if(Update_Time==2001) Update_Time=1;  //2000ms即2s一轮回
}

if(Update_Time%200==0)  //判断0.2s了

最后,还有一点,就是做完题要提交的文件是确定的,有讲,一个是改动过的文件,还有就是.axe什么的文件,我没认真看规则,所以我整个工程文件夹压缩提交了,不知道会不会有什么问题。

总之,感觉比赛是挺水的,老师监考不严,也不重视,题目也不难,但是报了比赛可以成为自己学习stm32的动力,报了比赛就要好好准备参加,像参加这次蓝桥杯,虽然之前就已经学过了stm32,但是准备过程还是学到了很多新的编码方式以及算法等,还是挺值的。这次有我们学校好像有两个报了名没来参赛的,我觉得既然报了名,参赛的态度还是要有的,不然就是简直浪费钱。

想学东西还是得参加比赛,因为比赛相当于就是学以致用的过程,你会知道你需要学什么,你也会看到你学的东西可以怎么用,这是一个正反馈,学了用,还能拿奖,不然就自己光想着学一些技术,很难坚持下去。

猜你喜欢

转载自blog.csdn.net/dbfy666/article/details/88780250