版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
(2025年)蓝桥杯嵌入试题库及答案一、基础外设综合应用(GPIO、ADC、定时器、串口)硬件连接说明:LED模块:LED1(PA8,推挽输出)、LED2(PA9,推挽输出)按键模块:S1(PB0,上拉输入)、S2(PB1,上拉输入)模拟信号:电位器R1(滑动端接ADC1_IN5,即PB12)串口:USART1(PA9-TX,PA10-RX,波特率115200)功能要求:1.LED1以500ms周期闪烁(亮250ms,灭250ms);2.S1按下时LED2点亮,松开时熄灭(需软件消抖,消抖时间20ms);3.持续按下S2超过1.5s时,LED1停止闪烁并保持常亮;若松开S2且未达到1.5s,LED1恢复闪烁;4.实时采集R1电压值(范围0-3.3V),通过串口每秒发送一次,格式为"Volt:%.2fV\r\n"。答案:1.CubeMX配置要点:时钟配置:HSE=8MHz,PLL锁相环倍频至170MHz(系统时钟);GPIO:PA8、PA9设为Output,PB0、PB1设为Input(上拉);ADC1:单通道IN5(PB12),连续转换模式,采样时间24.5个周期;定时器TIM2:预分频系数16999(170MHz/(16999+1)=10kHz),自动重装载值4999(500ms周期),使能更新中断;USART1:异步模式,波特率115200,8位数据位,1位停止位,无校验。2.关键代码实现:```cinclude"main.h"include"stdio.h"ADC_HandleTypeDefhadc1;TIM_HandleTypeDefhtim2;UART_HandleTypeDefhuart1;//全局变量uint8_tled1_flag=0;//LED1闪烁标志(0-灭,1-亮)uint32_tled1_tick=0;//LED1计时uint8_ts1_press=0;//S1按下状态uint32_ts2_press_time=0;//S2按下计时floatadc_volt=0.0f;//ADC电压值//定时器中断回调(500ms周期)voidHAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDefhtim){if(htim->Instance==TIM2){if(!led1_flag){//LED1未被锁定时闪烁HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_8);}}}//按键扫描函数(需在主循环中周期调用,如10ms一次)voidKey_Scan(void){//S1检测(消抖)staticuint8_ts1_cache=1,s1_cnt=0;uint8_ts1_val=HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0);if(s1_val!=s1_cache){s1_cnt++;if(s1_cnt>=2){//20ms消抖s1_press=!s1_val;s1_cache=s1_val;s1_cnt=0;}}else{s1_cnt=0;}HAL_GPIO_WritePin(GPIOA,GPIO_PIN_9,s1_press?GPIO_PIN_RESET:GPIO_PIN_SET);//LED2控制(低电平亮)//S2检测(长按1.5s)staticuint8_ts2_prev=1;uint8_ts2_val=HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_1);if(s2_val==0&&s2_prev==1){//按下瞬间s2_press_time=HAL_GetTick();}elseif(s2_val==0&&s2_prev==0){//持续按下if(HAL_GetTick()s2_press_time>=1500){led1_flag=1;//锁定LED1常亮HAL_GPIO_WritePin(GPIOA,GPIO_PIN_8,GPIO_PIN_RESET);//假设低电平亮}}elseif(s2_val==1&&s2_prev==0){//松开if(HAL_GetTick()s2_press_time<1500){led1_flag=0;//解除锁定,恢复闪烁}}s2_prev=s2_val;}//ADC电压采集(需在主循环中调用)voidGet_ADC_Volt(void){HAL_ADC_Start(&hadc1);HAL_ADC_PollForConversion(&hadc1,10);uint32_tadc_val=HAL_ADC_GetValue(&hadc1);adc_volt=(float)adc_val3.3f/4095.0f;//12位ADC}//主函数intmain(void){HAL_Init();SystemClock_Config();MX_GPIO_Init();MX_ADC1_Init();MX_TIM2_Init();MX_USART1_UART_Init();HAL_TIM_Base_Start_IT(&htim2);//启动定时器中断while(1){Key_Scan();//10ms周期调用Get_ADC_Volt();//采集电压staticuint32_tuart_tick=0;if(HAL_GetTick()uart_tick>=1000){//每秒发送uart_tick=HAL_GetTick();charbuf[32];sprintf(buf,"Volt:%.2fV\r\n",adc_volt);HAL_UART_Transmit(&huart1,(uint8_t)buf,strlen(buf),100);}}}```二、定时器与PWM综合应用(舵机、电机控制、频率测量)硬件连接说明:舵机:控制信号接TIM2_CH1(PA0,50HzPWM);直流电机:驱动信号接TIM3_CH2(PA7,20kHzPWM);红外对射传感器:输出方波接TIM1_CH1(PA8,测量频率范围10Hz-1kHz)。功能要求:1.舵机角度通过按键S3(PB2)调节,每次按下增加30°(0°~180°循环),对应PWM占空比0.5ms(0°)~2.5ms(20ms周期);2.电机转速由电位器R2(ADC1_IN6,PB13)调节,电压0V对应0%占空比,3.3V对应100%占空比;3.实时测量红外传感器输出方波的频率(精度±1Hz),通过串口发送格式"Freq:%dHz\r\n"。答案:1.CubeMX配置要点:TIM2(舵机PWM):预分频系数169(170MHz/(169+1)=1MHz),自动重装载值19999(20ms周期,1MHz/20000=50Hz),CH1设为PWM模式1;TIM3(电机PWM):预分频系数8(170MHz/(8+1)≈18.89MHz),自动重装载值944(18.89MHz/945≈20kHz),CH2设为PWM模式1;TIM1(输入捕获):预分频系数169(1MHz计数频率),CH1设为输入捕获模式(上升沿触发),使能捕获中断;ADC1:新增通道IN6(PB13),连续转换模式。2.关键代码实现:```c//全局变量uint8_tservo_angle=0;//当前舵机角度(0°、30°...180°)uint32_tmotor_duty=0;//电机占空比(0-944)uint32_tfreq_value=0;//测量频率uint32_tcapture_buf[2]={0};//输入捕获缓冲区uint8_tcapture_flag=0;//捕获完成标志//舵机角度转换(0°~180°→0.5ms~2.5ms高电平)voidSet_Servo_Angle(uint8_tangle){uint16_tpulse=500+(angle2000)/180;//0.5ms=500us,2.5ms=2500us__HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_1,pulse);//TIM2_ARR=19999(20ms),1us对应1个计数}//电机占空比设置(0-100%→0-944)voidSet_Motor_Duty(floatvolt){motor_duty=(uint32_t)(volt/3.3f944);if(motor_duty>944)motor_duty=944;__HAL_TIM_SET_COMPARE(&htim3,TIM_CHANNEL_2,motor_duty);}//输入捕获中断回调voidHAL_TIM_IC_CaptureCallback(TIM_HandleTypeDefhtim){if(htim->Instance==TIM1){if(capture_flag==0){capture_buf[0]=HAL_TIM_ReadCapturedValue(htim,TIM_CHANNEL_1);capture_flag=1;__HAL_TIM_SET_CAPTUREPOLARITY(htim,TIM_CHANNEL_1,TIM_INPUTCHANNELPOLARITY_FALLING);//切换下降沿捕获}else{capture_buf[1]=HAL_TIM_ReadCapturedValue(htim,TIM_CHANNEL_1);uint32_tdiff=capture_buf[1]capture_buf[0];if(diff<0xFFFF){//避免溢出freq_value=1000000/(diff2);//1MHz计数频率,测量周期为2diffus(上升沿到下降沿再到上升沿)}capture_flag=0;__HAL_TIM_SET_CAPTUREPOLARITY(htim,TIM_CHANNEL_1,TIM_INPUTCHANNELPOLARITY_RISING);//恢复上升沿}}}//主函数关键逻辑intmain(void){HAL_Init();SystemClock_Config();MX_GPIO_Init();MX_ADC1_Init();MX_TIM2_Init();MX_TIM3_Init();MX_TIM1_Init();MX_USART1_UART_Init();HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_1);//启动舵机PWMHAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_2);//启动电机PWMHAL_TIM_IC_Start_IT(&htim1,TIM_CHANNEL_1);//启动输入捕获中断while(1){//S3按键处理(PB2,上拉输入)staticuint8_ts3_prev=1;uint8_ts3_val=HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_2);if(s3_val==0&&s3_prev==1){//上升沿触发HAL_Delay(20);//消抖if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_2)==0){servo_angle=(servo_angle+30)%181;//0~180循环Set_Servo_Angle(servo_angle);}}s3_prev=s3_val;//电机电压采集与控制HAL_ADC_Start(&hadc1);HAL_ADC_PollForConversion(&hadc1,10);floatr2_volt=(float)HAL_ADC_GetValue(&hadc1)3.3f/4095.0f;Set_Motor_Duty(r2_volt);//频率发送(每0.5秒)staticuint32_tfreq_tick=0;if(HAL_GetTick()freq_tick>=500){freq_tick=HAL_GetTick();charbuf[32];sprintf(buf,"Freq:%dHz\r\n",freq_value);HAL_UART_Transmit(&huart1,(uint8_t)buf,strlen(buf),100);}}}```三、I2C与传感器综合应用(E2PROM、温湿度传感器、蜂鸣器控制)硬件连接说明:E2PROM(AT24C02):I2C1(PB6-SCL,PB7-SDA,地址0xA0);温湿度传感器(SHT30):I2C2(PB10-SCL,PB11-SDA,地址0x44);蜂鸣器:TIM4_CH1(PC6,1kHzPWM驱动)。功能要求:1.系统启动时读取AT24C02中地址0x00的1字节作为湿度阈值H_th(默认50%);2.每2秒读取SHT30的温度(℃)和湿度(%RH),温度分辨率0.1℃,湿度分辨率0.1%;3.当实时湿度>H_th时,蜂鸣器以1kHz频率鸣叫(占空比50%);否则停止;4.将最新的温湿度数据(温度2字节,湿度2字节)和H_th存入AT24C02地址0x01~0x05(每更新一次覆盖)。答案:1.CubeMX配置要点:I2C1、I2C2:快速模式(400kHz),启用重映射(若需);TIM4:预分频系数169(1MHz计数频率),自动重装载值999(1kHz频率),CH1设为PWM模式1;其他:GPIO复用为I2C功能。2.关键代码实现(部分函数):```c//AT24C02读写函数voidAT24C02_Write(uint8_taddr,uint8_tdata){uint8_tbuf[2]={addr,data};HAL_I2C_Master_Transmit(&hi2c1,0xA0,buf,2,100);HAL_Delay(5);//等待写入完成}uint8_tAT24C02_Read(uint8_taddr){uint8_tdata;HAL_I2C_Master_Transmit(&hi2c1,0xA0,&addr,1,100);HAL_I2C_Master_Receive(&hi2c1,0xA0|0x01,&data,1,100);returndata;}//SHT30读取函数(返回温度、湿度)voidSHT30_Read(floattemp,floathumi){uint8_tcmd[2]={0x24,0x00};//高精度单次测量HAL_I2C_Master_Transmit(&hi2c2,0x44<<1,cmd,2,100);HAL_Delay(50);//等待测量完成uint8_tdata[6];HAL_I2C_Master_Receive(&hi2c2,(0x44<<1)|0x01,data,6,100);//解析温度(16位原始值→℃)uint16_ttemp_raw=(data[0]<<8)|data[1];temp=-45.0f+175.0ftemp_raw/65535.0f;//解析湿度(16位原始值→%RH)uint16_thumi_raw=(data[3]<<8)|data[4];humi=100.0fhumi_raw/65535.0f;}//主函数关键逻辑intmain(void){HAL_Init();SystemClock_Config();MX_GPIO_Init();MX_I2C1_Init();MX_I2C2_Init();MX_TIM4_Init();//初始化H_th(AT24C02地址0x00)uint8_tH_th=AT24C02_Read(0x00);if(H_th>100)H_th=50;//校验,异常则设为默认HAL_TIM_PWM_Start(&htim4,TIM_CHANNEL_1);//启动蜂鸣器PWMwhile(1){floattemp,humi;SHT30_Read(&temp,&humi);//蜂鸣器控制(1kHz,50%占空比)if(humi>H_th){__HAL_TIM_SET_COMPARE(&htim4,TIM_CHANNEL_1,500);//ARR=999,500/999≈50%}else{__HAL_TIM_SET_COMPARE(&htim4,TIM_CHANNEL_1,0);}//数据存储到AT24C02(地址0x01~0x05)uint8_tbuf[5];buf[0]=(uint8_t)(temp10)>>8;//温度高8位(0.1℃精度)buf[1]=(uint8_t)(temp10)&0xFF;//温度低8位buf[2]=(uint8_t)(humi10)>>8;//湿度高8位buf[3]=(uint8_t)(humi10)&0xFF;//湿度低8位buf[4]=H_th;//阈值HAL_I2C_Master_Transmit(&hi2c1,0xA0,&0x01,1,100);//写入地址HAL_I2C_Master_Transmit(&hi2c1,0xA0,buf,5,100);//写入数据HAL_Delay(5);HAL_Delay(2000);//2秒周期}}```四、综合应用(LCD显示、串口命令解析、状态机)硬件连接说明:LCD(ST7735):SPI1(PA5-SCK,PA7-MOSI,PA4-CS,PB0-RS,PB1-RST);其他:复用前3题的温湿度、E2PROM数据。功能要求:1.LCD初始化后显示:首行:"Mode:Normal"(正常模式)或"Mode:ALARM"(温度>30℃时);次行:"Temp:25.3℃"(实时温度);第三行:"Humi:45.6%RH"(实时湿度);第四行:"TH:50"(湿度阈值H_th);2.串口接收上位机命令(格式:"CMD:SET,TH=60;"),解析TH值(0-100)并更新H_th,同时保存到AT24C02;3.温度>30℃时,LCD背景色变为红色;否则为蓝色;4.所有显示内容每1秒刷新一次。答案:(限于篇幅,此处给出关键函数框架)```c//ST7735显示函数(部分)voidLCD_ShowString(uint16_tx,uint16_ty,charstr,uint16_tcolor){//实现字符显示(略)}voidLCD_SetBackcolor(uint16_tcolor){//填充背景色(略)}//串口接收中断处理(使用HAL_UART_RxCpltCallback)uint8_tuart_buf[32]={0};voidHAL_UART_RxCpltCallback(UART_HandleTypeDefhuart){if(huart->Instance==USART1){if(strstr((char)uart_buf,"CMD:SET,TH=")){//解析命令charp=strstr((char)uart_buf,"TH=")+3;uint8_tnew_th=atoi(p);if(new_th>=0&&new_th<=100){
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 研学旅行安全协议书(活动组织方和家长)
- 岸电建设协议书
- 蔬菜农资供应链管理系统开发协议
- 2025年期货从业人员资格考试(期货基础知识)测试题及答案
- 2025年银行从业资格考试公共基础知识历年真题库(附答案)
- 普通铣工岗前实操熟练考核试卷含答案
- 中级出版专业资格考试《基础知识》模拟题及答案
- 2026年数据分析师数据可视化面试题及答案
- 高中体育教学中体能训练方法科学化教学课题报告教学研究课题报告
- 2026年建筑行业质量评估员面试准备与参考答案
- DL-T+5174-2020燃气-蒸汽联合循环电厂设计规范
- 消费者在直播带货中冲动行为的影响因素探究
- 人工智能中的因果驱动智慧树知到期末考试答案章节答案2024年湘潭大学
- 智能水杯行业状况分析报告
- 公司财务部门工作职责
- 数字化转型赋能高校课程思政的实施进路与评价创新
- 人教版九年级数学上册22 3 3拱桥问题和运动中的抛物线 一课一练 (含答案)
- 网球运动基本知识及规则课件
- 年产10吨青紫霉素发酵工厂设计毕业设计
- GB/T 5760-2000氢氧型阴离子交换树脂交换容量测定方法
- FZ/T 92023-2017棉纺环锭细纱锭子
评论
0/150
提交评论