第十二届蓝桥杯嵌入式总结及分享

蓝桥杯嵌入式总结以及分享

这是我第一次写CSDN的文章,如果有什么写的不好的,还请各位见谅,不喜勿喷,谢谢。
经过这两个星期时间准备省赛,两个星期准备国赛,最终取得了国二的成绩,个人认为这个比赛就是耗时长,我对源码不够熟悉,所以导致时间基本都耗在了源码的调试上,蓝桥杯嵌入式比赛是提供源码的,但是不一定全,需要自己更改为自己需要的源码,也就是他提供的代码,不一定是你的开发板上的。好,那我们废话不多说了,步入正题。

蓝桥杯资源包

链接: 蓝桥杯资源包.
提取码:1112在这里插入图片描述
在这里插入图片描述省赛资源包就是没有以上框选的的代码提供。

客观题部分

客观题部分会有几道关于stm32的题目,可以查看该文档来查找
在这里插入图片描述
其他客观题问模电数电,这个可以找学校老师拿“客观题讲义”,也就是往届客观题的汇总。或者就是去CSDN找,都可以找到的。我大多数都是蒙的。哈哈哈~~~~~

代码部分

代码部分我是看的一位大佬发的文章,上连接链接: 蓝桥杯嵌入式备赛手册.
这位大佬写得很详细,如何移植蓝桥杯官方的代码。非常感谢这位大佬的分享

LED控制代码

在这里插入图片描述由于LED灯和LCD共用了io口,LED又是通过74HC573芯片控制的,大概就是锁存器的意思,所以他的控制代码必须这样写,他才不会出现LED混乱的情况。

void led_ctr(u8 led)
{
	GPIO_Write(GPIOC,~led<<8);
	GPIO_SetBits(GPIOD,GPIO_Pin_2);
	GPIO_ResetBits(GPIOD,GPIO_Pin_2);
}

其他的代码,按照那位大佬的写法基本上是没有问题的。
接下来我分享一下我调试代码遇到的问题

按键PA0、8 、 PB1、2
串口TX PA2、RX PA3
电位器PB0
蜂鸣器PB4
TIM2PA1-CH2、PA2-3
TIM3PA6-CH1、PA7-CH2

串口代码

void usart_SendString(u8 *str)
{
	u8 i=0;
	do{
		USART_SendData( USART2, str[i]);
		while(!USART_GetFlagStatus( USART2,  USART_FLAG_TXE));			
		i++;
	}while(str[i]!=0);
}
//记住这里的u8 i=0;要不然数据会发不出去
//定义数组str存储发送的数据,通过do-while一个个的传输
//USART_FLAG_TXE:发送数据寄存器空标志位

/****接收函数也是那位大佬分享的,如下****/
u8 recevie;	//接收标志位
u8 usart_str[20];	//数据缓存区
u8 buf;		//数据位
u8 temp;		//数据接收
void USART2_IRQHandler(void)
{
  if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)
  {
   USART_ClearITPendingBit(USART2, USART_IT_RXNE);//清除标志位
    /* Read one byte from the receive data register */
    temp = USART_ReceiveData(USART2);
		
    if(temp == 'A')
    {
	recevie=1;	//接收完成,失能
	buf=0;
      /* Disable the USARTy Receive interrupt */
      USART_ITConfig(USART2, USART_IT_RXNE, DISABLE);
    }
          else
	usart_str[buf++]=temp;
  }
}
/************数据接收*********/
	if(recevie==1)
	{
	recevie=0;
	LCD_ClearLine(Line2);
	sprintf((char*)str,"usart:%s",usart_str);
	LCD_DisplayStringLine(Line2,str);
	memset(usart_str,0,sizeof usart_str);	//在string.h头文件中,
	USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);//使能接收
	}

上面的代码需要记住memset(usart_str,0,sizeof usart_str);也就是将数组清零,若不清零
在LCD上显示不同数组长度,你就会发现一些奇怪的事情。慢慢试一试吧o( ̄︶ ̄)o。

按键代码

按键长按短按基本上可以说是必考

void key_m(void)
{
	key=key_scan();
	if(key!=key_long)	//判断是长按还是短按
	{
		key_long=key;
		key_time=Time;
	}
	else
		key=0;
	if(key==1)		//短按执行代码
		led>>=1;
	if(key_long==1)			//长按执行代码
	{
		if(Time-key_time>800)
		{
			key_time=Time;
			led<<=1;
		}
	}
}

工程代码

链接:工程代码
提取码:1112
这里面的工程文件有按键和led灯等等的代码,我看过一些,发现里面的代码就像是往届赛题的代码。所以一定要仔细看一看,要学会做界面,长按短按这些,这些都是必考的。
在这里插入图片描述这里面代码很多,多看看总有好处的

温度传感器

国赛代码是没有DS18B20的读函数的

s16 ds18b20_read(void)
{
	s16 x;
	u8 i;
	u8 val[2];
	
	ow_reset();
	ow_byte_wr(OW_SKIP_ROM);
	ow_byte_wr(DS18B20_CONVERT);
	
	delay_us(7500);
	ow_reset();
	ow_byte_wr(OW_SKIP_ROM);
	ow_byte_wr(DS18B20_READ);
	
	for(i=0;i<2;i++)
	{
		val[i]=ow_byte_rd();
	}
	x=val[1];
	x=x<<8;
	x+=val[0];
	return x;
}

三轴传感器

三轴传感器的代码也是没有的,这个代码可以,但是我一直感觉他测出来的数据不对,这个在往届赛题中似乎都没有考过。所以你懂的吧。。。

void lis320_init(void)
{
	lis320_write(0x20,0x47);	//地址0x20,0x47上电使能xyz轴
}
0x38写0x39读
读取值
u8 lis320_data[3];
u8* lis320_read_data(void)
{
	if(lis320_read(0x27)&0x08)
	{
		lis320_data[0]=lis320_read(0x29);	//x地址
		lis320_data[1]=lis320_read(0x2B); 	//y地址
		lis320_data[2]=lis320_read(0x2D); 	//z地址
	}
	return lis320_data;
}

新板和旧板的区别

蓝桥杯嵌入式是出了一块新版的,所以他考的时候要注意两块板子的区别
在这里插入图片描述

在此预祝参加蓝桥的各位同学们,都能取得优秀成绩。加油

  • 11
    点赞
  • 156
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

゜落尘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值