使用主板 是STMG431RBT6
STMG431RBT6资源
资源配置表
跳线说明表
引脚状况
PC8~PC15分别对应着LD1~LD8
SN74HC573ADWR 是一种锁存器
- 当 LE(锁存使能)为高电平,输出 Q 实时跟随输入 D 的变化。
- 当 LE 为低电平,输出锁定为最后一次输入状态,实现数据保持
STM32CubeMX
选好收藏芯片
SWD调试选择
外部晶振选择
端口配置
有警告标志不用管,因为我们使用了PC14和PC15两个端口,SYS警告是因为我们使用了PC13。
时钟树配置
使用外部晶振
项目生成
项目路径不要有中文,IDE选择MDK-ARM,
代码生成没有硬性要求,不过我的选择比较大众化;
代码编写
先编译测试一下
新建项目记得勾选
这个bsp是我创建的,准备之后的模块代码放入这个文件夹
新建文件夹加入keil中
新建两个空白项目保存到bsp文件夹即可,一个做.h文件,一个做.c文件
头文件部分
#ifndef _LED_H_
#define _LED_H_
#include "stdint.h"
void led_on(uint8_t num);
void led_off(uint8_t num);
void led_toggle(uint8_t num);
#endif
C文件部分
#include "led.h"
#include "gpio.h"
//打开灯
void led_on(uint8_t num)
{
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_8<<(num-1),GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);
}
//关闭灯
void led_off(uint8_t num)
{
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_8<<(num-1),GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);
}
//反转灯
void led_toggle(uint8_t num)
{
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);
HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_8<<(num-1));
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);
}
解释一下,为什么在开灯前后需要开闭PD2,因为PD2是锁存器开关,PC8-PC15和LCD的按键冲突了,现在打开是为了后面使用到LCD时候不会冲突,锁存器打开即输入信号,关闭即保持信号
main部分
#include "led.h"
while (1)
{
/* USER CODE END WHILE */
led_on(1);
HAL_Delay(1000);
led_off(1);
HAL_Delay(1000);
/* USER CODE BEGIN 3 */
}