Fqqq的蓝桥杯每日一练

蓝桥杯15届备战Day1

14届蓝桥杯省赛



前言

备战蓝桥杯嵌入式,刷题第一天,对象为14届蓝桥杯省赛题
工程代码在此 网盘


提示:以下是本篇文章正文内容,下面案例可供参考

一、客观题

1.什么是时序逻辑电路 数电
2.减法器计算当前状态 数电
例如:一个 8位二进制减法计数器, 初始状态为 00000000, 问经过 268个输入脉冲后, 此计数器的状态为 ______。
8位二进制数计数2^8 = 256次后回到00000000,__还剩268-256=12次计数,计数1次后从“00000000”减为“11111111”,__此后再减11(00001011),得到11110100
3.晶体管的Iceo能够体现出什么 链接在此 模电
4.STM32 系列微控制器,程序可以在哪些区域上运行 答案是rom和ram都可以
5.DAC的相关计算     ~~~    比如一个8位分辨率的DAC电路,其最大数字值为255(2的8次方减1),参考电压为5伏特,二进制输入值为10101010,则输出电压计算如下:
输出电压 = (170 ÷ 255) × 5V = 3.33V      ~~~~     补充说明:ADC的最低有效位LSB zhihu
6.门电路中,输出端可以直接相连实现线与的是
7.中断优先级及是否支持设置中断优先级及是否支持设置在这里插入图片描述
8. 工作在线性区域的运算放大器应处于什么状态 闭环 即有反馈
9. 同步电路和异步电路的区别是 知乎
10.内联函数 关键字 inline 知乎

二、主观题程序设计

1.CUBEMAX配置

时钟配置 选择外部高速时钟 80M就行了官方用的80M
在这里插入图片描述

按键配置
在这里插入图片描述
定时器配置 10ms
在这里插入图片描述
PA1 配置PWM输出 f = Clock/(psc + 1)/(counter + 1)
在这里插入图片描述
输入捕获 测周法使用 原理放在这里了 另一个博主
在这里插入图片描述
在这里插入图片描述
然后是adc 勾上就能用其他不用改
在这里插入图片描述

2.代码部分(完成大部分任务,少部分没有仪器就没做)

按键的代码如下:

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
	static uint16_t count_data;
	if(htim->Instance == TIM17)
	{
		if(if_start_tim)count_data++;
		if(count_data >= 500)
		{
			count_data = 0;
			if_start_tim = 0;
		}
		Get_adc();
		//获取按键此时状态
		keys[0].Key_sta = HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_0);
		keys[1].Key_sta = HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_1);
		keys[2].Key_sta = HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_2);
		keys[3].Key_sta = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0);
	}
	for(unsigned char i = 0; i < 4; i++)
	{
		switch(keys[i].Judge_sta)
		{
			case 0:
			{
				if(keys[i].Key_sta == 0)//如果等于0 开始消抖
				{
					keys[i].key_precess_time = 0;
					keys[i].Judge_sta = 1;
				}
				
			}break;
			
			case 1:
			{
					if(keys[i].Key_sta == 0)//如果此时仍等于0 按键按下
					{
						keys[i].Judge_sta = 2;//等待按键弹起
					}
					else 
					keys[i].Judge_sta = 0; //如果此时等于1 按键未按下 重新定义状态
				
			}break;
			
			case 2:
			{
				if(keys[i].Key_sta == 1)//如果此时弹起的话 已松手
				{
					keys[i].Judge_sta = 0;//状态闲置态
					if(keys[i].key_precess_time<70)
					{
						keys[i].Key_Short = 1;
					}
				}
				else
				{
					keys[i].key_precess_time++; //10ms 2s 2000ms
					if(keys[i].key_precess_time>200)
					{
						keys[i].Key_Long = 1;
					}
					
				}
			}break;
			
		}
		
	}
	
	
}

注意一定要在while前初始化这些外设

 /* USER CODE BEGIN 2 */
	HAL_TIM_Base_Start_IT(&htim17);//开启中断
	HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_2);//pwm使能
	HAL_TIM_IC_Start_IT(&htim3,TIM_CHANNEL_2);//direct 的通道
	LCD_Init();
  /* USER CODE END 2 */

总结

以上就是今天要讲的内容,掌握了hal库的使用和相关函数之间的调用,以及复习了数电模电单片机的相关知识,看完不要忘记点赞谢谢铁铁们,可以在评论区交流

  • 59
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值