第九届蓝桥杯-嵌入式比赛体会与备赛经验

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第九届蓝桥杯-嵌⼊式⽐赛体会与备赛经验
原⽂地址:
说起蓝桥杯,相信很多电⼦类的学⽣,应该很熟悉了吧。

上周⽇,我也去湖北⼯业⼤学参与了⼀下。

说起这次经历,我还是觉得有点惋惜,但还是觉得应该写出来。

先说⽐赛体会吧。

关于考点(湖北⼯业⼤学考点),个⼈觉得,湖⼯承办的这次⽐赛还是⽐较出⾊的,但也有以下⼏点瑕疵。

1、未设带队⽼师休息点。

赛前,我们在赛场外候场时,偶然碰到某个学校的两个带队⽼师与⼯作⽼师询问休息点,才得之此事。

2、⽐赛环境未准备充分。

以嵌⼊式⽐赛为例,⽐赛计算机未为考⽣准备PDF阅读器,导致部分考⽣浪费很长时间寻找安装包,安装阅读器环境。

⽽且安装阅读器环境版本较低。

其次,部分考⽣计算机嵌⼊式开发板的驱动未安装或未安装成功(包括我在内),赛前⼯作⼈员未尽到安装和调试的义务。

这导致⽐赛开始后,寻找⽼师解决问题时,耗费了⼤量时间。

--- 以我为例,我尝试过⾃⼰安装驱动,失败后,共计来了3名⽼师尝试安装驱动,都只是在重复简单的安装步骤,未果后。

⽼师建议换机,但苦于没有空闲机器了。

⽼师尝试重启后,问题才得以解决(注意:⽐赛过程,考⽣不允许重启计算机,重启可能会丢失之前数据)。

这个过程花费了我将近四⼗分钟⽐赛时长(共5⼩时)。

3、⽐赛监考设置存在问题。

以本赛场为例,有两名学⽣做监考,且⽐赛注意事项都由学⽣朗读,声⾳⼩且模糊,导致我们后排附近的考⽣听不清,带来很多不必要的⿇烦,⽐如提交答案的⽹址,解压密码等听不清,需要再次单独询问。

以上三点,就是我发现的⼀些问题,个⼈认为这是考点未尽到义务的地⽅。

真诚希望湖⼯以后可以注意下这⼏点,同时也希望湖⼯越来越好。

关于⽐赛过程
1、⼀般是提前20分钟进场,考⽣检查开发板,⽰波器是否有明显损坏,检查电脑环境,如解压软件,PDF阅读器,串⼝驱动和下载器驱动,keil等。

检查提供的资料,是否可⽤。

(快速检查,不然20分钟⼀般检查不完,当然⼀般没问题,但有问题的话要及时反映,这⼀般需要很长时间才能解决。

如上所诉)。

2、考场监考员宣读⽐赛细则,注意事项。

考⽣按考点给的⽹址,登录考试系统。

(如果听不清,⼀定要要求其讲清楚,不然之后没听清会很⿇烦。


3、阅读考试系统说明,如提交⽅式等,下载试题。

(试题是加密的压缩包)
4、考试开始后,考点给出试题解压密码。

(试题是PDF版本的,分客观题和程序题两个⽂件分开的)
5、作答,并提交答案。

(建议先做简答,做完后在考试系统上提交答案,然后在做程序题。

答案可提交多次,以最后⼀次为准。


6、程序题需要在开发板上有程序,还要按考试系统要求提交源码到考试系统。

注:考试时间以考试系统倒计时为准。

关于⾃⼰
我得承认,我的能⼒及⼼态是有问题的。

以上指出考点存在的问题并不是掩盖⾃⼰的不⾜。

我确实存在很多问题,⽐如我竟然忘了初始化NVIC优先级,分配TIM优先级等等。

所以考完回来,我就⼀直在检讨,但详细的就不说了。

⾔归正传,重点说我的⼼态吧。

起初,因为考试系统⽹址和解压密码听不清,看不清,有点⼼烦。

等平静下来却发现提供的LCD例程⽆法下载,驱动显⽰黄⾊感叹号。

多次尝试⽆果,寻找⽼师,⽼师当时不在现场,只能找当时的学⽣监考,他们表⽰这需要去找⽼师,这时⼼情已经低⼊⾕底。

当然期间⽼师也是换了⼜换,⽆法解决,等问题真正解决了,看了时间⼜觉得时间⼜不够了。

后来也仅实现了部分功能。

当然,解决最后问题的那个⽼师,也提过要给我补部分⽐赛时长。

被我⾃⼰拒绝了,可能是当时⼼态已蹦,已经想要放弃了吧。

事后想想,还确实挺后悔的。

总之,放弃的是⾃⼰,后悔的也是⾃⼰。

⼼态调整的不好,且不能怨天尤⼈,只能慢慢从经历中反思,提⾼⾃⼰的能⼒。

不管怎么说,我还是参与了,我也和其他同学努⼒了那么久。

关于备赛经验,我想我还是可以提供点参考的。

对于嵌⼊式的开发板CT117E,还是值得仔细对待的。

关于LED驱动
我想,可能⼤家都会觉得LED没什么可说的了,只是简单地IO操作。

但是我想说,No,这⾥有个陷阱。

⽽且我觉得如果想参加蓝桥杯嵌⼊式并⽤过这个开发板的⼈,应该都会碰到。

这个问题就是,LED与LCD,PC8-15端⼝公⽤的问题。

不考虑这个问题的后果就是,LCD和LED同时使⽤时,如果操作了LCD后,再去控制⼀个LED,可能会出现没被控制的LED,被莫名其妙的点亮或熄灭。

原因为何?能解决么?怎么解决?
原因:LCD和LED同时使⽤时,如果操作了LCD后,会导致pc8-15上的电平改变,如果此时控制某个LED灯,更新锁存器,会造成被LCD改变的电平也同步到LED灯造成误触发。

可以解决,解决的原理是,每次更新LED时,将PC8-PC15的引脚状态都更新到合适电平后,再更新锁存器。

提供我⾃⼰的代码,⽅法不⽌这⼀种,仅供参考。

1//LED灯控制函数
2//注意:第⼀次调⽤此函数时,务必需要控制所有灯,即LED_Control(GPIO_Pin_All,0);或 LED_Control(GPIO_Pin_All,1);
3//原因是:保证LED状态标记变量和当前LED状态同步
4//LED:被控制LED所连接的STM32引脚,如GPIO_Pin_8,GPIO_Pin_All
5//LED_Status:新的状态,0:灭 1:亮
6void LED_Control(uint16_t LED, uint8_t LED_Status)
7 {
8static u16 temp = 0; //16bit,静态的LED状态标记变量,保存LED的状态
9
10if(LED_Status == 0)
11 {
12 temp = temp | LED; //更新LED状态标记变量,将某⼀位值(受控LED对应的)置⾼电平
13 }
14else
15 {
16 temp = temp & (~LED); //更新LED状态标记变量,将某⼀位值(受控LED对应的)置低电平
17 }
18
19 GPIO_Write(GPIOC, temp); //将LED状态标记变量写出,改变LED状态
20
21 GPIO_SetBits(GPIOD, GPIO_Pin_2);
22 GPIO_ResetBits(GPIOD, GPIO_Pin_2); //状态锁存
23 }
关于蜂鸣器
为保证考试环境安静,感觉蜂鸣器⼀般考试时不会涉及,。

但作为⼀个考点--引脚重映射,也可能会考。

以下三句话就是引脚重映射(注意AFIO时钟使能)
1 GPIO_PinRemapConfig(GPIO_Remap_SWJ_NoJTRST,ENABLE); //PB4 重映射
2 GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable,ENABLE);
3 GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);
PB4与PA13,PA14,PA15,PB3⼀样属于SWJ接⼝IO,有多种分配⽅式
如下图,任意⼀种可⽤的重映射⽅式都可以。

即上述三句,任⽤其中⼀句。

(注意:SWJ重映射,可能导致下载时需要按⼀次复位键,才可以)
关于按键
按键例程,写的较为简单,未消都,也不能保证按键次数。

因此,按键例程不具有参考意义。

建议理解使⽤正点原⼦提供的按键例程⽅案(只讨论⽅案,这绝不是⼴告,资料可免费,免注册在开源电⼦⽹下载,)。

原理是:检测到按键按下时,返回⼀次键值,并置位标志,不在返回有效键值。

直到检测到按键被释放后,才会复位标志位,继续下⼀次按键扫描并返回键值。

这样就保证了⼀次按键按下,只有⼀次有效键值被返回。

关于uart
串⼝就是⼀个简单地外设,配置较为简单。

再此只强调已回车结束的接受中断。

1#define RX_MAX 20
2extern uint8_t USART_RXBUF[RX_MAX + 1]; //接受数组
3 uint8_t RXOVER = 0; //接受完成标志
4
5void USART2_IRQHandler(void)
6 {
7 u8 Rx_temp = 0;//临时接受
8static u8 Rx_ipos = 0; //数组数据位置标志
9static u8 Rx_flag = 0; //接收到回车(0x0d)等待换⾏符(0x0a)的标志
10
11if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET) //判断中断线
12 {
13 Rx_temp = USART_ReceiveData(USART2); //接受数据
14 USART_ClearITPendingBit(USART2, USART_IT_RXNE); //清中断标志
15
16if(!Rx_flag) //未接收到回车符
17 {
18//判断接受的数据是什么
19if(Rx_temp != 0x0d && Rx_temp != 0x0a)
20 {
21//普通数据,接受
22 USART_RXBUF[Rx_ipos++] = Rx_temp;
23 }
24else if(Rx_temp == 0x0d)
25 {
26//回车符,开始等待换⾏符以确认结束信号的到来
27 Rx_flag = 1;
28 }
29else
30 {
31//换⾏符,此情况下⽆回车符,数据不合法,丢弃该帧
32 Rx_ipos = 0; //将位置复位,即丢弃该帧数据
33 }
34 }
35else if(Rx_temp == 0x0a)
36 {
37//接收到0x0d的情况下,接受到0x0a,数据正确合法,接受完成
38 USART_RXBUF[Rx_ipos] = '\0'; //加⼊数组结束符
39 RXOVER = 1;//置位接受完成标志位
40//等待下⼀帧数据来临
41 Rx_flag = 0;//恢复等待回车符
42 Rx_ipos = 0;//存储位置复位
43 }
44else
45 {
46//接收到0x0d的情况下,却没有接收到0x0a,数据帧不完整,丢弃该帧
47 Rx_flag = 0;//恢复等待回车符
48 Rx_ipos = 0;//存储位置复位
49 }
50 }
51 }
关于x24c02,timer(PWM,捕获),RTC,ADC,DAC,EXIT等考到的知识点,都较为常⽤,且这部分例程还可以。

再次不在展开了。

有不理解或想了解其他的,请留⾔。

此贴完。

相关文档
最新文档