利用ReadPin函数,实现按键的控制LED灯的亮灭。
函数解析
HAL_GPIO_ReadPin( GPIO_TypeDef* GPIOx , uint16_t GPIO_Pin );
该函数可以读取IO引脚的电平,第一个参数是指向端口的指针( GPIOA、GPIOB...), 第二个参数是需要读取的引脚 ( GPIO_PIN_0、GPIO_PIN_1...)
CubeMX工程准备
使用STM32CubeMX创建工程,选择STM32F103C8Tx并配置引脚。设置好RCC与SYS,HCLK为72MHz。
将 PA0 设置 GPIO_Output,PA2 设置为 GPIO_Input 。
CLion设置
由于在CLion中创建STM32程序不会生成.ioc文件,在MX中生成后再打开项目
设置下载配置文件
根据ST还是DAP选择相应cfg,需要自己存放到对应文件夹中方便每次项目创建选用
面板配置文件路径 盘符 :\安装路径\OpenOCD-20240916-0.12.0\share\openocd\scripts\board
创建用户文件编写代码
创建与Core文件夹平级文件夹User,创建 Key.c 与 Key.h 文件
在 CMakeLists.txt 中添加头文件路径,确保扫描到此文件夹
# 添加愿文件,在原有文本后面添加
add_executable(${PROJECT_NAME}.elf ${SOURCES} ${LINKER_SCRIPT} User/Key.c)
# 添加包含目录
include_directories(User)
编写程序代码
// Key.c文件内容
#include "Key.h"
// 定义键值读取宏,用于简化GPIO引脚的读取操作
#define KEY HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_2)
/**
* @brief 键盘初始化函数
*
* 该函数用于初始化键盘,并进行按键检测和去抖处理。如果检测到按键被按下,
* 则会点亮一个LED(连接在GPIOA的GPIO_PIN_0上),直到按键释放。这样可以避免按键抖动带来的影响。
*/
void key_init() {
// 检查按键是否被按下
if (KEY == GPIO_PIN_SET) {
// 点亮LED,指示按键已被按下
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_SET);
// 等待按键释放,去抖动处理
while (KEY == GPIO_PIN_SET);
// 熄灭LED,按键处理完成
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_RESET);
}
}
//Key.h 内容
#include "main.h"
void key_init();
主程序调用
//在25行添加文件引用
/* USER CODE BEGIN Includes */
#include "Key.h"
/* USER CODE END Includes */
//在main方法的while(1)循环中调用方法,在100行
key_init();
硬件接线
根据之前MX中配置模式,将LED负极接入 A0 ,正极接3.3V,按键开关接到 A2 与 GND.