news 2026/10/19 2:58:50

蓝桥杯嵌入式技巧(省赛)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
蓝桥杯嵌入式技巧(省赛)

零.商家资料包

1.armcc(编译器5安装)

①armcc里面只有四个文件

②在品文件里面添加armcc

2.dfp pack(Device Family Pack)芯片支持包

一 .整体思路

1.画逻辑思维导图

逻辑的主干可以由flag变量主导,其他硬件单独写函数,根据flag的变化而变化

实现功能有很多限定时,考虑所有变量

举例:

2.模板单拎一个文件,逻辑实现在上面修改

3.每次实现一个功能以后烧录验证

4.把if ,else if ,else 即所有变量写全面

思路细节-flag变量

1.谁可以作为flag变量: 作为触发条件的变量

2.如果触发条件之后只需要执行一次,则也可以运用flag变量

举个例子:

要实现: 行驶界面条件下,如果串口收到左转信号之后计时超过5s,没有按按键之后就串口返回一次warn

若screen_diriction是lcd上负责显示左右的flag变量,那控制“执行一次“的flag变量就可设为 screen_diriction_flag,初始值为0。当收到左或者右的串口指令时,flag为1。flag为1时串口发送warn,之后变回0(记得把它置回来)

3.常用的flag: screen ,screen_direction,button

二.模板整体构建

1.创建两个文件夹,其中一个用来用cubemx生成各种文件,一个文件夹作为考试上交的文件

2.cubemx3+3点注意:

debug设置为无,时钟源配置,时钟树配置

选择mdk,structure选base,选同时生成.c

3.main.c删除注释。加上全局变量,子函数声明区

(4.在src和inc里面建立bsp文件夹。在keil里面也新建bsp文件夹,并且在魔术棒里添加inc_bsp文件夹路径)

5.魔术棒里debug选择CMSIS dap debugger,setting里面选stop after reset。

6.中断优先级调整(uwtick改成最高,后面讲了)

7.include stdio和string

tip.每次在cubemx里面生成完之后,把初始化函数复制粘贴到考试文件相应位置,并且检查

代码细节:减速函数

减速参数通常在proc子函数里面,作用是ms级别延时,写法如下:

__IO uint32_t uwTick_Key_Set_Point = 0;

if((uwTick - uwTick_Key_Set_Point)<50) return;//减速函数

uwTick_Key_Set_Point = uwTick;

三.led灯与按键(都是低电平有效)

1.cubemx配置:

模式是output,input。电平是默认,高。

2.函数:

①led函数形参:uint8_t ucLED,

HAL_GPIO_WritePin(GPIOC, ucLED<<8, GPIO_PIN_RESET);

tip : 非阻塞led 间隔闪亮/按一段时间亮,按位操作

②按键

HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_0) == GPIO_PIN_RESET

③长短按键

四.lcd

uint8-t str【20】

sprintf((char*)str,“number:%4d“,counter)

五.UART

1.串口发送函数

sprintf(),

HAL_UART_Transmit(&huart1, (unsigned char *)str, strlen((const char *)str), 50);

2.串口接收函数(用到中断)

①中断开启HAL_UART_Receive_IT(&huart1, &rx_buffer, 1); 其中1表示接收一个字节

②it.c里面有void USART1_IRQHandler(void) 不用额外配置,它的作用是: 检查中断来源(接收/发送/错误)。 清除对应的中断标志位。

③中断回调函数:

HAL_UART_RxCpltCallback(&huart1)

最后不要忘了在里面再次HAL_UART_Receive_IT(&huart1, &rx_buffer, 1);

tip:要是想在中断里面用delay 需要把tick定时器优先级调高(hal_init里面,172行hal_inittick的tick_int_piority)

六.ADC

1.cubemx参数配置:

①ADC_Settings里面: 外部时钟为异步,即由锁相环决定,两个adc直接没有联系(而同步为系统时钟决定);内部时钟为锁相环决定,二分频;

所以选择asy divided by 2。

其他为默认

②ADC_Regular里面

rank里面sampling time选择最高

③.时钟树里面选adc时钟连pll

2.扫描函数

七.TIM时钟

1.cubemx配置

①tim6是基本定时器,只要设置psc是8000-1(80M/8000 =10 000hz)和arr。打开nvic

②输入捕获的配置。tim2是通用定时器(选择pa15 即对应ch1 ,它与r40相连)。它的ch1和信号发生器模块连接,用来测量pwm波参数。mode是reset mode 即从模式。trigger source是TI1FP1,即通道1边沿检测。时钟选择内部时钟。对应通道如ch1选择input capture direct mode,ch2选input capture indirect mode (前者捕获上升沿,后者下降沿)。psc是80-1,arr选65535(按16位算)。捕获第一个选rising,第二个选falling。

tim2的NVIC的配置。把globalinterrupt打开。代码手动开启中断HAL_TIM_Base_Start_IT(TIM_HandleTypeDef *htim);

(tip gpio_tim的配置都是复用模式)

③PWM的配置。tim3(PA6对应ch1)和tim17(PA7对应ch1)也是通用定时器。时钟选内部时钟。ch1选pwm generation。调节psc和arr。选pwm mode1 即向上计数时,<pulse是有效电平。pulse是ccr的值。关掉NVIC配置。


④方波的配置。tim15(PA4对应ch1)。时钟选内部时钟。ch1选output compare ch1。

2.

①基本定时器:

开启中断 HAL_TIM_BASE_START_IT(在driver_timer里面找.h Ctrl+Shift+F 。HAL_Tim_ PeriodElapsedCallback。判断是不是定时器六if(htim->Instance == TIM6)。(tip,在定时器中断里面自增 就是时间溢出一次自增一次)。


②输入捕获: 开启定时器二HAL_TIM_BASE_START(&htim2),开启它是为了让定时器计数,输出pwm则不用。 并且开启两个通道 HAL_TIM_IC_Start_IT(&htim2,TIM_CHANE_1)

HAL_TIM_IC_Start_IT(&htim2,TIM_CHANE-)

③输出pwm波(不要中断

直接在初始化启动Hal_Tim_pwm_start(&htim3,TIM_CHANl_1)

④输出方波: 开启定时器十五 HAL_TIM_OC_START_IT。回调函数HAL_TIM_OC_DelayElapseCallback。

八.RTC

1.cube配置 : Active两个。时钟树 来自外部hse 32分频 750k。异步是125 同步是6000,所以得到1hz。

2.

此处rtc是二进制(十进制是bcd

九.e2prom

0.init

1.发送 单个字节

2.接受 单个字节

3.升级: 发送 接受字符串

十.手册查找

1.数据手册: 引脚图 p51/200

时钟树 p16/200

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/19 2:58:34

TFLite移动端部署实战:从模型转换到Android推理优化

第一次把训练好的图像分类模型往安卓上集成的时候&#xff0c;我差点被整崩溃。后台GPU上推理跑得漂漂亮亮&#xff0c;模型指标也好看&#xff0c;可真机上一跑&#xff0c;不是APK体积暴涨&#xff0c;就是加载慢到让人怀疑人生&#xff0c;甚至还有直接崩掉的。那会儿我还没…

作者头像 李华
网站建设 2026/10/19 2:58:21

基于spaCy的中文命名实体识别实战:从数据准备到模型调优

最近在做一个信息抽取的小项目&#xff0c;数据是从一堆新闻稿和合同文本里扒出来的&#xff0c;目标很直接&#xff1a;把人名、地名、机构名标出来。一开始我习惯性地想用英文 NLP 那套流程直接套&#xff0c;结果发现中文命名实体识别&#xff08;NER&#xff09;在 spaCy 里…

作者头像 李华
网站建设 2026/10/19 2:58:08

MoE混合专家架构:大模型稀疏激活与高效推理实战解析

先说一个反直觉的事实&#xff1a;你正在用的不少大模型&#xff0c;宣传口径已经冲到了几千亿甚至上万亿参数&#xff0c;但每生成一个 token&#xff0c;真正参与计算的参数可能只有总量的十分之一到二十分之一。这不是营销号胡吹&#xff0c;而是 MoE&#xff08;Mixture of…

作者头像 李华
网站建设 2026/10/19 2:57:58

Pandas独热编码get_dummies列名规则与实战避坑指南

如果你用过Pandas做数据分析&#xff0c;pd.get_dummies()几乎不可能绕开。网上很多教程一句话带过&#xff1a;“把类别变量变成0/1”。但我见过太多人真的只用这一句理解它&#xff0c;结果跑完一看DataFrame&#xff0c;发现多出来几十列&#xff0c;而且列名完全对不上预期…

作者头像 李华
网站建设 2026/10/19 2:57:57

DFTtoolbox:用MATLAB让第一性原理计算前后处理全自动化

简介&#xff1a;DFTtoolbox是一个面向凝聚态物理与材料科学工作者的开源Python模块&#xff0c;旨在帮助使用Quantum ESPRESSO、Abinit、Elk等密度泛函理论&#xff08;DFT&#xff09;代码的研究者快速构建输入文件&#xff0c;并对能带、态密度等计算结果进行即时分析与可视…

作者头像 李华
网站建设 2026/10/19 2:57:28

优雅卡片滑块轮播图:原生JavaScript实现布局、拖拽与无限循环

最近被一个作品展示类的页面逼了一把&#xff1a;产品经理提了个硬需求——不要传统那种一张大图左右横切的轮播图&#xff0c;要有“卡片感”&#xff0c;中间主卡完整展示&#xff0c;旁边的卡片缩小、半透明、错位露出&#xff0c;手指划过的时候一层一层跟上去&#xff0c;…

作者头像 李华