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)
解析:
作者:Ladylolo-lsm