蓝桥杯-嵌入式 简单笔记和常见问题
文章目录
前言
如今大四,作为一个双非二本的学生,有一些曾经的笔记想要梳理一下,寄存在网上,以免遗失,亦或者作为一个微不足道的分享。
一、蓝桥杯-嵌入式部分
关于CT117E(即新版的蓝桥杯嵌入式开发平台)的新手须知:
- CT1117E-4有两个USB接口,右边的没有DAP调试器,无法正常下载程序。
- Serial wire串口设置。
- CT117E的晶振是24MHz。
低速low:5MHz
中速Medium:25MHz
高速High:50MHz
超高速VeryHigh:120MHz
- 常见的GPIO的API(API即预设好的函数或方法):
GPIO_PIN_all 所有引脚(all要小写,非大写)
void HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx,uint16_t GPIO_Pin,GPIO_PinState PInState); //设置引脚为高低电平
Void HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx,uint16_t GPIO_Pin);//电平进行一个翻转
- VDD = 3.3V电源
- 锁存器的作用是怕在运行LCD的同时扰乱LED
- CT117E的独立按键是有外部上拉电阻的
- Pullup是上拉;Pulldown是下拉
- 中断函数里面不要出现延时函数,容易卡死。而且中断本就是快进快出的功能。
- 弱定义(weak)的函数名一定要写正确。
- 常用的格式化输出表示
%d:用于输出十进制有符号整数。
%f:用于输出十进制浮点数字。
%x或%X:用于输出十六进制。
%c:用于输出单个字符。
%%格式控制符:用来输出百分号%,在输出时需要使用两个百分号连在一起。
- 在STM32中,EXTI指的是外部中断(External Interrupt)控制器。
- 中断频率 = 输入频率 / (psc+1) /( counte+1) 中断频率就等于PWM产生的频率
__HAL_TIM_SET_AUTORELOAD(__HANDLE__, __AUTORELOAD__)
在运行时设置TIM Autoreload Register值,而不需要再调用任何Init函数。
__HAL_TIM_SetCompare
HAL_TIM_Aliased_Macros为遗留目的维护的别名宏
- STM32G431的定时器是4进6出。
- 假设时钟脉冲是1MHz,就是时钟脉冲每1ms增加一次,以此可以知道时间。
- uint32_t HAL_TIM_ReadCapturedValue(const TIM_HandleTypeDef *htim, uint32_t Channel) //从Capture Compare单元读取捕获值,用于PWM的调制。
二、常见问题
1.编译器报错.o文件
原因:多余的外部引用。
解决方法:查找Error提示中的文件,检查其中的参数是否有多余的extern。
2.按键无法长按,无法重复按
解决方法:
1.在cubemax把四个按键对应的引脚都定义。
2.把未引用的引脚注释掉,避免电平混乱。
3.为什么ADC模块取值需要乘3再除4096?
答:ADC是模拟量转数字量,模拟电压这里最高是3.3V,所以乘3.3,然后数字量是12位,所以除4096(2^12)。可以这样理解,就是我把模拟电压转换成12位的数字量(它内部有个12位的寄存器),除以满量程4096,然后乘以3.3(最大量程是3.3V),乘除先后关系调一下。
4.the format string ends before this argument(格式在此参数前结束)
解决方法:检查参数中是否少了%。
5.三行消抖的具体解释
6.重定向的具体解释
总结
一般遇到问题:60%的配置和初始化问题,30%逻辑问题,10%的不理解。
所以,细心耐心的态度比精巧的算法更为重要。希望同学能够读有所获。