蓝桥杯备赛——第十一届省赛第二场(研究生组)

相比于本科组的题目,其多加入了一个条件:在数据界面下每次按下B3按键,互换PA6和PA7脉冲信号频率。这个条件的加入,让我一开始的程序设计逻辑有点混乱。遇到较为复杂的设计逻辑,应尽量多梳理其状态变换。
在这里插入图片描述
注:B4其实有两种状态的变换。(PA6手动模式和手动模式地转换跟PA7的转换是不同的)
过程变换图:
在这里插入图片描述

相应代码:


	switch(ucKey_Down)
	{
		case 1:
			if(!ucState)
			{
				ucState = 1;
			}
			else
			{
				ucState = 0;
			}
		break;
		
		case 2:
			if(ucState)
			{
				PA6_Duty_Int += 10;
				if(PA6_Duty_Int >= 110)
					PA6_Duty_Int = 10;
			}
		break;

		case 3:
			if(ucState)
			{
				PA7_Duty_Int += 10;
				if(PA7_Duty_Int >= 110)
					PA7_Duty_Int = 10;
			}
			else
			{
				if(ucPWM_State == 0)
					ucPWM_State = 1;
				else if(ucPWM_State == 1)
					ucPWM_State = 0;
				else if(ucPWM_State == 2)
					ucPWM_State = 3;
				else if(ucPWM_State == 3)
					ucPWM_State = 2;
			}
		break;
		
		case 4:
			if(ucPWM_State == 0)
				ucPWM_State = 2;
			else if(ucPWM_State == 2)
				ucPWM_State = 0;
			else if(ucPWM_State == 1)
				ucPWM_State = 3;
			else if(ucPWM_State == 3)
				ucPWM_State = 1;
		break;		
	}
void PWM_Proc(void)
{
	switch(ucPWM_State)
	{
		case 0:
			__HAL_TIM_SET_AUTORELOAD(&htim3, 1000);	//100hz
			__HAL_TIM_SET_AUTORELOAD(&htim17, 500);//200hz
		
			__HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_1, PA6_Duty_Int * 10);
			__HAL_TIM_SET_COMPARE(&htim17, TIM_CHANNEL_1, PA7_Duty_Int * 5);
		break;
		
		case 1:
			__HAL_TIM_SET_AUTORELOAD(&htim3, 500);	
			__HAL_TIM_SET_AUTORELOAD(&htim17, 1000);
		
			__HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_1, PA6_Duty_Int * 5);
			__HAL_TIM_SET_COMPARE(&htim17, TIM_CHANNEL_1, PA7_Duty_Int * 10);	
		break;
		
		case 2:
			__HAL_TIM_SET_AUTORELOAD(&htim3, 1000);	
			__HAL_TIM_SET_AUTORELOAD(&htim17, 500);
		
			__HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_1, ADC_Value / 3.3 * 1000);
			__HAL_TIM_SET_COMPARE(&htim17, TIM_CHANNEL_1, ADC_Value / 3.3 * 500);
		break;
		
		case 3:
			__HAL_TIM_SET_AUTORELOAD(&htim3, 500);	
			__HAL_TIM_SET_AUTORELOAD(&htim17, 1000);
		
			__HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_1, ADC_Value / 3.3 * 500);
			__HAL_TIM_SET_COMPARE(&htim17, TIM_CHANNEL_1, ADC_Value / 3.3 * 1000);
		break;
	}
}

自动重装载值设置函数:
__HAL_TIM_SET_AUTORELOAD(&htim3, 1000);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 蓝桥杯是全国性的计算机大赛,旨在提高大学生的计算机技术水平和创新能力。嵌入式STM32G431是一款嵌入式芯片,具有高性能和低功耗的特点。第十二届第一场省赛停车计费系统是蓝桥杯的一道工程题目,要求参赛选手设计一个停车场计费系统。 停车计费系统是指通过嵌入式技术实现对车辆进入和离开停车场的自动检测、计时和计费的系统。对于这个题目,参赛选手可以根据题目要求,使用STM32G431芯片设计一个具有以下功能的系统: 1. 车辆进入检测:使用车辆传感器检测车辆的进入,触发计时。 2. 车辆离开检测:使用车辆传感器检测车辆的离开,停止计时。 3. 计时功能:使用内部时钟模块获取进入和离开的时间,并计算停车时间。 4. 计费功能:根据停车时间,按照一定的计费规则进行计费。 5. 显示功能:使用液晶显示屏显示当前的停车信息,如车牌号、停车时间、费用等。 6. 数据存储功能:使用闪存等储存介质将停车数据进行存储,以便后续的数据分析和查询。 设计一个停车计费系统涉及到硬件设计和软件编程两个方面。硬件方面,参赛选手需要选择合适的传感器、显示屏、存储介质等,以及设计电路和接口进行连接。软件方面,需要使用C语言或者汇编语言编写程序,对芯片进行编程,实现各项功能。 通过此次比赛,选手们可以锻炼嵌入式系统的设计能力和编程能力,了解实际应用中嵌入式系统的工作原理和应用场景。同时,也能提升对STM32G431芯片的理解和运用能力。这对于培养嵌入式技术人才,推动物联网技术的发展都具有积极意义。 ### 回答2: 蓝桥杯是面向计算机爱好者的智力竞赛,而嵌入式STM32G431是一款嵌入式系统开发板。第十二届第一场省赛的停车计费系统真题工程,则是要求参赛选手设计并实现一个能够进行停车计费的系统。 停车计费系统是一种用于自动计费和管理停车场的系统。这个系统可以通过识别车辆的进出以及停车的时间,自动计算并收费。在这个工程中,选手需要使用嵌入式STM32G431开发板以及相关的硬件和软件,来设计一个能够实现停车计费功能的系统。 首先,选手需要使用传感器或摄像头来实现车辆进出的检测。当车辆进入或离开停车场时,传感器会发出信号并通过STM32G431进行检测。接着,选手需要编程实现识别车辆的算法,以便能够识别不同的车辆。当车辆停放时,系统会通过计时器记录停车的时间。 然后,选手需要编写计费算法,根据停车的时间来计算费用。这个算法可以根据停车场的规则来确定费用的计算方式,例如按小时计费或按照不同的时间段采用不同的费率。 最后,选手还需要设计一个界面,使得系统能够与用户进行交互。用户可以通过该界面查询停车费用,并进行付款。同时,选手还需要保证系统的稳定性和安全性,确保数据的准确性和保密性。 总而言之,蓝桥杯嵌入式STM32G431第十二届第一场省赛停车计费系统真题工程要求选手使用硬件和软件开发能力,设计并实现一个完整的停车计费系统。这需要选手具备嵌入式系统开发、传感器技术、算法设计和界面设计等多方面的知识和技能。 ### 回答3: 蓝桥杯嵌入式stm32g431——第十二届第一场省赛停车计费系统真题工程是一个基于STM32G431开发板的停车计费系统设计题目。该系统的主要功能是实现停车场的车辆进入、出场的计费管理。 首先,该系统需要实现一个车辆进入检测的功能。当车辆进入停车场时,系统会通过传感器检测到车辆的到达,并记录下进入的时间。 然后,系统需要实现一个车辆出场的功能。当车辆准备离开停车场时,系统会通过传感器检测到车辆的离开,并记录下离开的时间。 接下来,系统需要计算车辆停留的时间。通过进入时间和离开时间的差值计算得出车辆停留的时长。 最后,系统需要计算停车费用。根据停车场的计费规则,根据车辆停留的时长计算出停车费用,并将费用显示在屏幕上。 在实现上述功能的过程中,需要运用STM32G431开发板的各种功能和模块,包括GPIO口、定时器、中断、串口通信等。通过编写相应的代码,实现按钮的控制、传感器检测、时间的计算以及屏幕的显示等功能。 该项目的设计需要考虑多种情况,比如车辆重复进入出场、车辆进入出场顺序错乱等,要充分考虑这些异常情况并进行相应的处理。在代码编写过程中,还需注意代码的优化和资源的合理利用,以提高系统的性能和效率。 通过完成这个项目的设计与实现,可以加深对STM32G431嵌入式系统的了解和应用,并提升嵌入式系统开发的能力。同时,也能锻炼自己的逻辑思维、问题解决能力和团队合作精神。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值