1、库文件
比赛时不能上网 只能使用官方提供的库文件包
在CubeMX的Project Manager里将 “Use Defult Firmwave Location” 取消勾选
并点击下方Browse 确定官方提供的库文件位置(比赛时将库文件解压然后放进自己的工程文件中)
2、基本配置
一、选择外部高速时钟
二、Debug设为串口
三、时钟配置
四、第一次打开 如果之前mdk没用过这个芯片需要安装芯片的pack包
五、headfile文件
3、LED(亮LED灯、亮LCD屏的代码)
LED:PC8-PC15 低电平点亮
U1:锁存器 PD2高电平1时 数据才会传输 PD2低电平0时 数据 不会传输
LED配置 默认为高电平
点灯的操作流程:先将PD2置高电平 再将相应灯的gpio拉低
4、按键
需要配置成上拉输入 按键没有按下时为高电平;按键按下后为低电平
按键扫描函数
按键扫描理解: 1、 初始时,若读取到按键按下,将读取到的‘0’值存到B1state 这时满足第一个判断语句:B1state=0 B1 last_state=1 表示按键按下 将定时器的计数器CNT清零 定时器开始计时,并将B1state的值给B1 last_state 即B1state=B1 last_state=0 ;
2、当第二次(或者更多次)进入到这个函数后,若按键还没松开,此时保持B1state=B1 last_state=0,表示按键一直按着 ;
3、只有等到按键松开后,B1state=1而B1 last_state=0,才会进入到第三个判断语句,表示按键松开。
定时器三作用的理解:首先在CubeMX中总线时钟是配置为80M,定时器3预分频器的值为8000-1;不难计算出定时器每隔1/10000s产生一次计数,当CNT的值记到10000时,表示定时器计时了1秒;
补充:这里的定时器三没有使用中断功能,但是也要在初始化后使能(区别于定时器2:有中断的使能)。
5、LCD显示
一、这里有三个关于LCD的几个文件 需要放到自己的工程里,比赛的时候不要忘了!!!
第一个是lcd.c文件 文件路径:嵌入式资源数据包_STM32G4_2023\嵌入式资源数据包_STM32G4_2023\竞赛平台\6-液晶驱动参考程序\MDK5_LCD_HAL\Src
另外两个是fonts.h和lcd.h文件 文件路径:嵌入式资源数据包_STM32G4_2023\嵌入式资源数据包_STM32G4_2023\竞赛平台\6-液晶驱动参考程序\MDK5_LCD_HAL\Inc
二、LCD初始化 及 LED和LCD引脚冲突问题
LCD初始化要放在GPIO初始化之后!!!
LCD初始化前将PD2置低电平,这是因为在GPIO初始化的时候先将PD2端置1 才配置LED都为高电平熄灭 但是没有将PD2置回低电平 这时锁存器是打开的 而LCD和LED有共用引脚 所以导致这后面LCD的函数会改变LED的状态。
否则会导致LCD显示的时候LED灯全都被点亮。
另外 led_show函数 和 lcd_show函数如果同时放在主函数里也会导致引脚冲突问题,因此还需在与LCD有关的函数中做如下操作:
三、LCD显示和高亮LCD
6、定时器
一、利用定时器2实现LED灯闪烁
配置TIM2为1s中断 (时钟源:内部时钟 PSC:8000-1 ARR:10000-1)
注意:PSC的值不要超过65535
定时器中断
( 在回调函数里写定时器中断函数 )
(不要忘记加上定时器中断使能函数)
二、定时器2实现PWM波输出
CunbeMX配置
赛题常见要求(举例):设置频率为1000HZ 占空比为50%
用到的频率计算公式:
占空比计算公式: CCR/ARR+1
三、定时器17实现输入捕获
(1)CunbeMX配置
(2)初始化配置
(开启定时器 使能输入捕获的中断)
(3)中断函数(回调函数)
(在输入捕获的回调函数中计算频率)
每次上升沿都会进入中断读取CNT(CCR)的值 再计算输入捕获频率
输入捕获频率计算公式:
这里Fsys=80000000 PSC配置为80-1 capture_value实际上就是CCR(CNT)的值
四、输入捕获测量555定时器的输出频率
(1)CunbeMX配置
TIM2:在Channel1选择输入捕获模式;PSC配置为80-1; 使能一下中断
TIM16同理;
(2)初始化设置
(3)中断函数
7、ADC(模数转换)
一、CubeMX配置
二、ADC读取函数(包含转换成电压值公式)
8、USART
一、CubeMX配置(注意GPIO为PA9和PA10)
二、串口向上位机发送字符串
三、串口接收一个数据然后发送(分三步走)
第一次先在while()前面接收一次数据,然后进入中断发送数据、接着进行下一次接收;后面就可以一直在中断中循环接收和发送。
四、利用定时器进行串口不定长数据接收
这个实验的功能只是一次接收多个字节数据,不能发送数据;定时器在里面起到的作用是在最后一次接收数据时,判断CNT的值是否大于15,大于15代表最后一次数据接收完成;
(1)CubeMX配置
(2)初始化配置
(3)串口接收中断
(4)串口接收数据处理函数
9、EEPROM读写
官方会提供i2c的.c和.h文件 需要拷贝到工程目录下
一、eeprom读写函数(基于AT24C02)
10、RTC时钟
一、CubeMX配置
二、读取时间值 并在闹钟时间到后亮灯