STM32CubeIDE学习记录(按键点灯工程)
博主使用的开发板以及相关外设连接如下:



芯片型号为:STM32F103RCT6,
新建STM32CubeIDE项目


配置完成后会生成相应的文件并进入如下界面:
- 使用外部晶振时钟
配置相关GPIO口
(LED:PA8,PD2;KEY:PC5, PA15, PA0)
LED配置(GPIO_OutPut):

KEY配置(GPIO_Input):

并在User Label框中进行重命名,方便理解与编程。
时钟信号配置

构建项目
点击即可生成相应代码。
工作目录

编辑程序
分别添加文件:led.h, led.c, key.h, key.c
led.h
#include "stm32f1xx.h"
#include "main.h"
void LED0_INV();
void LED1_INV();
void LED_INIT();
led.c
#include "led.h"
void LED0_INV(){
HAL_GPIO_TogglePin(LED0_GPIO_Port, LED0_Pin);
}
void LED1_INV(){
HAL_GPIO_TogglePin(LED1_GPIO_Port, LED1_Pin);
}
void LED_INIT(){
HAL_GPIO_WritePin(LED0_GPIO_Port, LED0_Pin, GPIO_PIN_SET);
HAL_Delay(500);
HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, GPIO_PIN_SET);
HAL_Delay(500);
}
key.h
#include "stm32f1xx.h"
#include "main.h"
#define KEY0 HAL_GPIO_ReadPin(KEY0_GPIO_Port,KEY0_Pin)
#define KEY1 HAL_GPIO_ReadPin(KEY1_GPIO_Port,KEY1_Pin)
#define WK_UP HAL_GPIO_ReadPin(KEY_INIT_GPIO_Port,KEY_INIT_Pin)
#define KEY0_PRES 1
#define KEY1_PRES 2
#define WKUP_PRES 3
uint8_t KEY_Scan(uint8_t mode);
key.c
#include "key.h"
//Mode 0: Support continuous pressing, Mode 1: Do not support continuous pressing
//return 0: no pressing
uint8_t KEY_Scan(uint8_t mode)
{
static uint8_t key_up=1;
if(mode)key_up=1;
if(key_up&&(KEY0==0||KEY1==0||WK_UP==1))
{
HAL_Delay(10);
key_up=0;
if(KEY0==0) return KEY0_PRES;
else if(KEY1==0) return KEY1_PRES;
else if(WK_UP==1) return WKUP_PRES;
}else if(KEY0==1&&KEY1==1&&WK_UP==0)key_up=1;
return 0;
}
在main函数中添加如下代码:
/* USER CODE BEGIN 2 */
uint8_t key=0;
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
key=KEY_Scan(0);
switch(key)
{
case KEY0_PRES:
LED0_INV();
break;
case KEY1_PRES:
LED1_INV();
break;
case WKUP_PRES:
LED_INIT();
break;
default:
HAL_Delay(10);
}
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
生成hex文件

点击编译即可生成
本文来自博客园,作者:litecdows,作者在其他博客平台均使用此昵称!
转载请注明原文链接:https://www.cnblogs.com/litecdows/p/stm32cube_key.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库