8-蓝桥杯-STM32G431RB(补充)

客观题:

EIGHT:

初赛

答案:

D

线与功能:两个或多个输出信号连接在一起可以实现逻辑“与”的功能

OC门,即“集电极开路”,实际上只是一个NPN型三极管,并不输出某一特定电压值或电流,OC门根据三极管基极所接的集成电路来决定(三极管发射极接地),通过三极管集电极,使其开路而输出。通过OC门这一装置,能够让逻辑门输出端的直接并联使用。两个OC门的并联,可以实现逻辑与的关系,称为“线与”,但在输出端口应加一个上拉电阻与电源相连

B

双字:2个字组成一个双字,有32个位。这样一个双字可以表达2的32次方(429496729状态)

B

RS-232标准接口(又称EIA RS-232)是常用的串行通信接口标准之一

RS-232总线规定了25条线,包含了两个信号通道,即第一通道(称为主通道)和第二通道(称为副通道)。利用RS- 232总线可以实现全双工通信,通常使用的是主通道,而副通道使用较少。在一般应用中,使用3条~9条信号线就可以实现全双工通信,采用三条信号线(接收线、发送线和信号地)能实现简单的全双工通信过程

采用负逻辑传送,规定逻辑“1”的电平为-5V~-15 V,由于RS -232采用串行传送方式,并且将微机的TTL电平转换为RS-232C电平,其传送距离一般可达30 m

BD

在电子电气工程中菊花链代表一种配线方案,例如设备A和设备B用电缆相连,设备B再用电缆和设备C相连,设备C用电缆和设备D相连,在这种连接方法中不会形成网状的拓扑结构,只有相邻的设备之间才能直接通信,例如在上例中设备A是不能和设备C直接通信的,它们必须通过设备B来中转,这种方法同样不会形成环路。因为最后一个设备不会连向第一个设备。这种连线方法能够用来传输电力,数字信号和模拟信号

A

有说是48MHZ,然后APB2最高是72MHZ,所以高速外设。APB1 上面连接的是低速外设,包括电源接口、备份接口、CAN、USB、I2C1、I2C2、UART2、UART3 等等,APB2 上面连接的是高速外设包括 UART1、SPI1、Timer1、ADC1、ADC2、所有普通 IO 口(PA~PE)、第二功能 IO 口等。

B

这个是反向求和运算放大器,代入公式计算即可

TO Eight last(#蓝桥杯嵌入式组#历年客观题解析_蓝桥杯嵌入式客观题-CSDN博客^v71^control_1,201^v4^add_ask&utm_term=%E8%93%9D%E6%A1%A5%E6%9D%AF%E5%B5%8C%E5%85%A5%E5%BC%8F%E5%AE%A2%E8%A7%82%E9%A2%98&spm=1018.2226.3001.4187)

决赛

选A

选B

    常用的电压比较器有单限比较器、滞回比较器、窗口比较器、三态电压比较器等

    简单的电压比较器结构简单,灵敏度高,但是抗干扰能力差,因此我们就要对它进行改进。改进后的电压比较器有:滞回比较器和窗口比较器

选BCD

填18,16,2,24

选A

8

此为差动放大器,代入公式计算即可:

选A

Cortex-M3只使用Thumb-2指令集;区别:

Thumb-2 指令 Thumb-2 是 Thumb 指令集的一项主要增强功能,并且由 ARMv6T2 和 ARMv7M体系结构定义。 Thumb-2 提供了几乎与 ARM 指令集完全一样的功能。 它兼有16 位和 32 位指令,并可检索与 ARM 类似的性能,但其代码密度与 Thumb 代码类似。

选D

Cortex-M3是一个32位的核,采用哈佛结构,并选择了适合于微控制器应用的三级流水线,但增加了分支预测功能

ARMCortex™-M4处理器内核是在Cortex-M3内核基础上发展起来的,其性能比Cortex-M3提高了20%。新增加了浮点、DSP、并行计算等

选C

    共射电路有较大的电流和电压增益,一般用作放大电路的中间级

    共基电路输入阻抗很小,会使输入信号严重衰减,适用于高频电路

    共集电路适用于作功率放大和阻抗匹配电路,在多级放大器中常被用作缓冲级和输出级

选C

选ABD

第十四届模拟赛

解析:

GPIO的配置寄存器就是配置那些速度模式之类的

时间规划:

基本操作(按键+LED+LCD)30分钟,就是完成基本显示,固定操作

具体操作:按键+LED+LCD显示+占空比:60Min

例程精华总结

LED:

//permanent course void LED_Close(void)//初始化关灯 {//这个函数:端口,引脚,电平 HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15|GPIO_PIN_8 |GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_12, GPIO_PIN_SET);

//记得是SET HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_SET);//set set reset HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_RESET);//使能端开启一下子

//利用锁存器SN74HC573进行LED 灯数据锁存,需要点亮led灯时,先读取GPIOC->ODR寄存器的值,

//在向ODR寄存器写入相应的16进制的数据, //向锁存器的LE脚写入高电平打开寄存器,

//在输入低电平关闭锁存器,复位ODR寄存器的值。 }

void Ledx_on(uint8_t n) {//过程:写好了位置就放进去寄存器ODR中(IO口读取->ODR的LED信息)-再打开总开关锁存器PD2 LED&=(0xFEFF<<(n-1))|(0XFEFF>>(16-n+1));//这个要分清楚中间是一个竖!!!!!!!!!!! //并且这个括号是一个前面完整的和一个后面的完整的 //假设法:P1 = 0xFE表示除第一个亮都灭//1是灭 GPIOC->ODR=LED;LED的状态将在PD2的由高到低时刷新。 HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_SET);

HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_RESET); } //注意上下两个函数的区分,上一个函数是取与0,后面是取或1!!!!!!

//以上TIP第一次错

void Ledx_off(uint8_t n) { LED|=(0X0100<<(n-1))|(0X0100>>(16-n+1));//每个运算都一定要加小括号,保证是算对的 GPIOC->ODR=LED; HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_SET); HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_RESET); } //LED闪烁的函数这样写:

if(++led1count==1000){led1count=0;led1=!led1;} if(led1) Ledx_on(1); else Ledx_off(1);

KEY

#define B1 HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0) #define B2 HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_1) #define B3 HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_2) #define B4 HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0)

typedef enum

{ Key_check, Key_Press, Key_Release, }

Key_State; Key_State KeyState=Key_check;

void Key_Scan(); void Key_Scan(void) {

switch(KeyState) {

case(Key_check): {if(B1==GPIO_PIN_RESET|B2==GPIO_PIN_RESET|B3==GPIO_PIN_RESET|B4==GPIO_PIN_RESET) {KeyState=Key_Press;} }break;

case(Key_Press):{

if(B1==GPIO_PIN_RESET) {Key_Value=1; Lcd_code=!Lcd_code; Mark=1;}

else if(B2==GPIO_PIN_RESET)

{Key_Value=2; if(Lcd_code==1)

{Lcd_Choose++; if(Lcd_Choose>3) {Lcd_Choose=1;} } }

else if(B3==GPIO_PIN_RESET) {Key_Value=3; }

KeyState=Key_Release; }break; case(Key_Release): {if(B1==GPIO_PIN_RESET|B2==GPIO_PIN_RESET|B3==GPIO_PIN_RESET|B4==GPIO_PIN_RESET) {KeyState=Key_Release;} else {KeyState=Key_check;} }break; } }

RTC:

RTC_FORMAT_BIN 使用十进制 例如 18年你得到到是 18年

RTC_FORMAT_BCD 使用16进制 例如 18年你得到的是 0x18年

static void RTC_CalendarShow(uint8_t *showtime, uint8_t *showdate)

{ RTC_DateTypeDef sdatestructureget; //从HAL库中定义的结构来引用

RTC_TimeTypeDef stimestructureget; /* Get the RTC current Time *从地址中取出,要记得有取地址符/

HAL_RTC_GetTime(&hrtc, &stimestructureget, RTC_FORMAT_BIN); /* Get the RTC current Date */

HAL_RTC_GetDate(&hrtc, &sdatestructureget, RTC_FORMAT_BIN); /* Display time Format : hh:mm:ss */ //这些分别代表时分秒

sprintf((char *)showtime, " %2d:%2d:%2d ", stimestructureget.Hours, stimestructureget.Minutes, stimestructureget.Seconds);

LCD_DisplayStringLine(Line8, (uint8_t *)ShowTime); /* Display date Format : mm-dd-yy */ // sprintf((char *)showdate, " %2d-%2d-%2d ", 2000 + sdatestructureget.Year,sdatestructureget.Month, sdatestructureget.Date); //LCD_DisplayStringLine(Line9, (uint8_t *)ShowDate); }

TIP:

1.注意是获取日期:是e而不是a

2.年月日多少个参数:

HH:mm:ss 按照24小时制的格式进行字符串格式化

要先有:

u8 ShowTime[16]="hh:mm:ss";//给数组赋值 u8 ShowDate[16]="yyyy-dd-mm";

打印理解:

3、记得Cubemx里面要勾上正常的时间,这个要从秒开始填写,时才能填:

UART

如果后面才配置加了串口之后不去烧录的话,可能会出现即使程序写的是对的,但追溯不到它的原本的函数。

查漏补缺:

小题点(未做):

(1)Twelfth-Second:

(2)National title:

Seven:

看这题目还是要对应, 它说的是用输入捕获PA1引脚输出的频率来模拟湿度,

(1)多久更新一次采集数值,这里任务要求是1-5s的间隔里面选择:

采样周期:

也就是多久更新一次数值,这里任务要求是1-5s

看这儿:if(ulTick_ms%(S_time*1000) == 0)//取余等于0的话就代表到了那个数

只需要改变S_time的值为1-5之间就可以确定时间, so :

//放入滴答定时器中断里面

if(ulTick_ms%(S_time*1000) == 0) //采样时间{temperature = (80uiAdc_Val/4095)-20;//温度

humidity =(80000/TIM3_Cap()+10)/9; //湿度

}//这样只有到了指定的时间采集值才会变化

(From:第七届蓝桥杯嵌入式(国赛)程序题_蓝桥杯嵌入式程序-CSDN博客)

(2)

解析:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值