2025年蓝桥杯嵌入试题库及答案_第1页
2025年蓝桥杯嵌入试题库及答案_第2页
2025年蓝桥杯嵌入试题库及答案_第3页
2025年蓝桥杯嵌入试题库及答案_第4页
2025年蓝桥杯嵌入试题库及答案_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2025年蓝桥杯嵌入试题库及答案一、基础操作题1.GPIO操作题目:在STM32G431开发板上,将PA5引脚配置为推挽输出模式,每隔500ms改变一次引脚的电平状态,实现LED闪烁效果。答案:```cinclude"stm32g4xx.h"voiddelay_ms(uint32_tms){for(uint32_ti=0;i<ms1000;i++){__asm("nop");}}intmain(void){//使能GPIOA时钟RCC->AHB2ENR|=RCC_AHB2ENR_GPIOAEN;//配置PA5为推挽输出模式GPIOA->MODER&=~GPIO_MODER_MODE5_Msk;GPIOA->MODER|=GPIO_MODER_MODE5_0;while(1){//翻转PA5引脚电平GPIOA->ODR^=GPIO_ODR_OD5;delay_ms(500);}}```2.定时器基本定时功能题目:使用TIM3定时器,配置为1ms定时中断,在中断服务函数中对一个全局变量进行自增操作。答案:```cinclude"stm32g4xx.h"volatileuint32_ttimer_count=0;voidTIM3_IRQHandler(void){if(TIM3->SR&TIM_SR_UIF){TIM3->SR&=~TIM_SR_UIF;timer_count++;}}intmain(void){//使能TIM3时钟RCC->APB1ENR1|=RCC_APB1ENR1_TIM3EN;//配置TIM3预分频器和自动重载值TIM3->PSC=16-1;TIM3->ARR=1000-1;//使能TIM3中断TIM3->DIER|=TIM_DIER_UIE;NVIC_EnableIRQ(TIM3_IRQn);//使能TIM3TIM3->CR1|=TIM_CR1_CEN;while(1){//主循环可以执行其他任务}}```二、通信接口题1.UART通信题目:配置UART1通信,波特率为9600,8位数据位,无校验位,1位停止位。通过UART1发送字符串“Hello,BlueBridgeCup!”。答案:```cinclude"stm32g4xx.h"voidUART1_Init(void){//使能GPIOA和USART1时钟RCC->AHB2ENR|=RCC_AHB2ENR_GPIOAEN;RCC->APB2ENR|=RCC_APB2ENR_USART1EN;//配置PA9和PA10为复用功能GPIOA->MODER&=~(GPIO_MODER_MODE9_Msk|GPIO_MODER_MODE10_Msk);GPIOA->MODER|=(GPIO_MODER_MODE9_1|GPIO_MODER_MODE10_1);//选择复用功能AF7用于USART1GPIOA->AFR[1]|=(7<<((9-8)4))|(7<<((10-8)4));//配置USART1USART1->BRR=104;USART1->CR1|=USART_CR1_TE|USART_CR1_RE|USART_CR1_UE;}voidUART1_SendChar(charch){while(!(USART1->ISR&USART_ISR_TXE));USART1->TDR=ch;}voidUART1_SendString(constcharstr){while(str){UART1_SendChar(str++);}}intmain(void){UART1_Init();UART1_SendString("Hello,BlueBridgeCup!");while(1){//主循环可以执行其他任务}}```2.I2C通信题目:使用I2C1接口读取一个I2C设备(地址为0x50)的0x00寄存器的值,并将其通过UART1发送出去。答案:```cinclude"stm32g4xx.h"voidI2C1_Init(void){//使能GPIOB和I2C1时钟RCC->AHB2ENR|=RCC_AHB2ENR_GPIOBEN;RCC->APB1ENR1|=RCC_APB1ENR1_I2C1EN;//配置PB6和PB7为复用功能GPIOB->MODER&=~(GPIO_MODER_MODE6_Msk|GPIO_MODER_MODE7_Msk);GPIOB->MODER|=(GPIO_MODER_MODE6_1|GPIO_MODER_MODE7_1);//选择复用功能AF4用于I2C1GPIOB->AFR[0]|=(4<<(64))|(4<<(74));//配置I2C1I2C1->TIMINGR=0x00201D2B;I2C1->CR1|=I2C_CR1_PE;}uint8_tI2C1_ReadByte(uint8_tdev_addr,uint8_treg_addr){uint8_tdata;//发送起始信号I2C1->CR2=(dev_addr<<1)|I2C_CR2_START|I2C_CR2_NBYTES(1);while(!(I2C1->ISR&I2C_ISR_TXIS));I2C1->TXDR=reg_addr;while(!(I2C1->ISR&I2C_ISR_TC));//重新发送起始信号进行读操作I2C1->CR2=(dev_addr<<1)|I2C_CR2_START|I2C_CR2_RD_WRN|I2C_CR2_NBYTES(1);while(!(I2C1->ISR&I2C_ISR_RXNE));data=I2C1->RXDR;//发送停止信号I2C1->CR2|=I2C_CR2_STOP;returndata;}voidUART1_Init(void){//使能GPIOA和USART1时钟RCC->AHB2ENR|=RCC_AHB2ENR_GPIOAEN;RCC->APB2ENR|=RCC_APB2ENR_USART1EN;//配置PA9和PA10为复用功能GPIOA->MODER&=~(GPIO_MODER_MODE9_Msk|GPIO_MODER_MODE10_Msk);GPIOA->MODER|=(GPIO_MODER_MODE9_1|GPIO_MODER_MODE10_1);//选择复用功能AF7用于USART1GPIOA->AFR[1]|=(7<<((9-8)4))|(7<<((10-8)4));//配置USART1USART1->BRR=104;USART1->CR1|=USART_CR1_TE|USART_CR1_RE|USART_CR1_UE;}voidUART1_SendChar(charch){while(!(USART1->ISR&USART_ISR_TXE));USART1->TDR=ch;}intmain(void){I2C1_Init();UART1_Init();uint8_tdata=I2C1_ReadByte(0x50,0x00);UART1_SendChar(data);while(1){//主循环可以执行其他任务}}```三、综合应用题1.温度采集与显示题目:使用ADC1采集一个温度传感器(连接到PA0)的模拟信号,将采集到的温度值转换为实际温度(假设转换公式为:温度值=采集值3.3/4096100),并通过LCD显示出来。答案:```cinclude"stm32g4xx.h"include"lcd.h"voidADC1_Init(void){//使能GPIOA和ADC1时钟RCC->AHB2ENR|=RCC_AHB2ENR_GPIOAEN;RCC->APB2ENR|=RCC_APB2ENR_ADC1EN;//配置PA0为模拟输入模式GPIOA->MODER|=GPIO_MODER_MODE0_Msk;//配置ADC1ADC1->CR=0;ADC1->CFGR=0;ADC1->SQR1=0;ADC1->SMPR1=ADC_SMPR1_SMP0_2|ADC_SMPR1_SMP0_1|ADC_SMPR1_SMP0_0;//使能ADC1ADC1->CR|=ADC_CR_ADEN;while(!(ADC1->ISR&ADC_ISR_ADRDY));}uint16_tADC1_Read(void){//启动ADC转换ADC1->CR|=ADC_CR_ADSTART;while(!(ADC1->ISR&ADC_ISR_EOC));returnADC1->DR;}intmain(void){LCD_Init();ADC1_Init();charstr[20];uint16_tadc_value;floattemperature;while(1){adc_value=ADC1_Read();temperature=(float)adc_value3.3/4096100;sprintf(str,"Temp:%.2fC",temperature);LCD_DisplayStringLine(Line0,(uint8_t)str);//适当延时for(uint32_ti=0;i<1000000;i++){__asm("nop");}}}```2.按键控制与状态显示题目:在开发板上,有一个按键连接到PA1,一个LED连接到PB5。当按键按下时,LED点亮;按键释放时,LED熄灭。同时,通过LCD显示按键的状态(“KeyPressed”或“KeyReleased”)。答案:```cinclude"stm32g4xx.h"include"lcd.h"voidGPIO_Init(void){//使能GPIOA和GPIOB时钟RCC->AHB2ENR|=RCC_AHB2ENR_GPIOAEN|RCC_AHB2ENR_GPIOBEN;//配置PA1为输入模式GPIOA->MODER&=~GPIO_MODER_MODE1_Msk;//配置PB5为推挽输出模式GPIOB->MODER&=~GPIO_MODER_MODE5_Msk;GPIOB->MODER|=GPIO_MODER_MODE5_0;}intmain(void){LCD_Init();GPIO_Init();charstr[20];uint8_tkey_state;while(1){key_state=(GPIOA->IDR&GPIO_IDR_ID1)?0:1;if(key_state){GPIOB->ODR|=GPIO_ODR_OD5;sprintf(str,"KeyPressed");}else{GPIOB->ODR&=~GPIO_ODR_OD5;spri

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论