蓝桥杯嵌入式模块使用指北
引言
[TOC]
零、项目新建和LCD底层移植
链接: 项目新建和LCD底层移植
一、Systick系统滴答定时器
24位向下递减计数器,0~16,777,216
CubeMAX会自动将Systick配置成1ms中断的定时器,并将变量uwTick每1ms增加1
精确延时:HAL_Delay()函数,但会阻塞程序,在while中应控制在10s以内
1 | /*程序每1ms进入1次该函数*/ |
二、KEY模块
1.KEY模块CubeMX设置
2.KEY模块代码
1.main.c文件
1 |
2.key.c文件
宏定义的括号不可省略,想想#define KB1 HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0)和
KB1 = HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0);有什么区别!!!
1 |
|
3.key.h文件
1 |
|
三、LED模块
1.LED模块CubeMX设置
LED和LCD引脚冲突,PD2为LED的锁存器
2.LED模块代码
1.main.c文件
1 |
|
2.led.c文件(led驱动文件)
1 |
|
3.led.h文件
1 |
|
四、LCD模块
1.LCD模块CubeMX设置
配置见第零章
2.LCD模块代码
1 | //屏幕大小为20*10 |
==以上部分为嵌入式必考模块,务必熟练!!!==
==以下部分为嵌入式选考模块!!!==
五、ADC模块
1.ADC模块CubeMX设置
- 设置引脚
- 设置ADC1
- 设置ADC2
2.ADC多路采集模块代码
1 | float VR37,VR38,VMCP; //定义电压变量 |
3.ADC数字滤波代码(题目不要求,不用滤波)
1 | /*数字滤波*/ |
学自此可做第十届省赛真题:此届只涉及到了ADC外设。
链接:百度网盘:第十届省赛真题 提取码: 6666
六、DAC输出模块
1.DAC双路输出模块CubeMX设置
设置引脚
DAC1设置
2.DAC双路输出模块代码
1 | u16 dac_ch1_val,dac_ch2_val; |
七、PWM捕获模块
1.PWM双路捕获模块CubeMX设置
设置引脚
设置TIM2
设置TIM3
打开TIM中断
2.PWM双路捕获模块代码
1 | float VR37,VR38; //定义电压变量 |
1 | //以下代码在main()中 |
八、PWM输出模块
1.PWM输出模块CubeMX设置
设置引脚
TIM16设置
TIM17设置
2.PWM输出模块代码
1 | //ARR自动重装载值,CRR比较寄存器 |
九、I2C模块
直接将官方的i2c.c,i2c.h添加到项目中
1.I2C模块代码
1.i2c.c文件
在i2c.c后编写 各函数主体9-12-6-7行
1 | //写24C02 |
2.main.c文件
1 |
|
Rs * 127 = 100k ->Rs = 100k / 127 Rs是接入电路的每段电阻,共127个
R = 8 *(100 / 127) R是接入电路的电阻
V = 3.3 * R / (R + 10) 输出的理论电压
1 | EEPROM_Write(0x08); |
十、UART模块
1.UART模块CubeMX配置
2.UART发送模块代码
查找fputs()的方法
务必勾选MicroLIB库,否则fputs()重映射无法使用
1 | /*在"usart.h"中声明*/ |
3.UART接收模块代码
1 |
|
main.c
1 | HAL_UART_Receive_IT(&huart1,uart_buf,1); |
十一、RTC模块
1.RTC模块CubeMX配置
RTC配置
2.RTC模块代码
1 | RTC_TimeTypeDef RTC_time;//定义时间结构体变量 |