type
status
date
slug
summary
tags
category
icon
password
一、新建工程
- ACCESS TO MCU SELECTOR

- 搜索并双击选择芯片stm32g431rbt6

- Pinout & Configuration
- System Core —— RCC —— HSE 选择Crystal/Ceramic Resonator
- System Core —— SYS —— Debug 选择Serial Wire


- Clock Configuration
- 外部晶振频率24MHz
- 选择HSE(外部晶振)
- 选择PLLCLK
- 修改HCLK(MHz)为80MHz

- Project Manager
- Project Name
- Location
- Toolchain/IDE:MDK-ARM
- 不使用默认Firmware Location,选择自己下载的库文件夹

- Code Generator

- GENERATE CODE
- Keil魔术棒设置:
- Debug: CMSIS-DAP Debugger
- Debug —— Settings —— Flash Download:勾选 Reset and Run


9. 将自己创建的文件夹User在魔术棒C/C++处加入
二、基础驱动
1. 点亮一个LED

步骤:
- PD2输出高电平:U1(锁存器)使能端LE(引脚PD2)给高电平时,右侧1-10(引脚PC8-PC15)输入可以通过U1输出、
- PC8-PC15输出低电平:LED左侧连VDD(高电平),因此右侧给低电平灯亮。
- PD2输出低电平:防止lcd引脚冲突
Pinout配置:
- PC8-PC15、PD2配置为输出模式(GPID_OUTPUT)


- GPIO中可以看见默认输出低电平(Low),将其修改为默认高电平

代码<按键控制led,点亮lcd>:

led.c
lcd_show.c
main.c
解决lcd和led引脚冲突:
在lcd.c用到的所有函数前,保存GPIOC→ODR到temp,函数体结束后将GPIOC→ODR还原
2.Tim定时器闪烁


步骤
- Timers-TIM2

- 设置为内部时钟

- 修改以下两项:

- PSC = 8000 - 1 ARR = 10000 - 1

- 中断使能

- GENERATE CODE
- 编译,找到tim.c下的回调函数stm32g4xx_hal_tim.h

- 2531行处找到回调函数callback

- headfiles.h包含tim.h
- 定时器中断使能(注意使能函数位置)

- 定时器中断函数
实现:count每秒+1

- 实现:count每秒+1,led1间隔1s亮起(闪烁)

3.实现长按键和短按键
- 配置TIM3(定时器中断这里就不打开了)
PSC设置为8000-1,这样CNT = 10000时就对应1s

- 使能TIM3
- 按下按键
b1_key_state == 0 && b1_key_last_state == 1
TIM3→CNT = 0;
计数开始- 松开按键
b1_key_state == 1 && b1_key_last_state == 0
判断计数情况:
- 如果要实现长按期间连续改变
判断长按:b1_key_state == 0 && b1_key_last_state == 0

4.lcd高亮显示
5.PWM波输出


6.输入捕获



- 作者:spark
- 链接:http://sparkleaf.cn/article/lanqiao
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章