STM32CubeIDE学习记录(按键点灯工程)

博主使用的开发板以及相关外设连接如下:

芯片型号为: STM32F103RCT6

新建STM32CubeIDE项目

STM32CubeIDE学习记录(按键点灯工程)

配置完成后会生成相应的文件并进入如下界面:

  • 使用外部晶振时钟
    STM32CubeIDE学习记录(按键点灯工程)

配置相关GPIO口

(LED:PA8,PD2;KEY:PC5, PA15, PA0)

LED配置(GPIO_OutPut):

STM32CubeIDE学习记录(按键点灯工程)

KEY配置(GPIO_Input):

STM32CubeIDE学习记录(按键点灯工程)

并在User Label框中进行重命名,方便理解与编程。

时钟信号配置

STM32CubeIDE学习记录(按键点灯工程)
STM32CubeIDE学习记录(按键点灯工程)

构建项目

STM32CubeIDE学习记录(按键点灯工程)
点击即可生成相应代码。

工作目录

编辑程序

分别添加文件: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文件

点击编译即可生成

STM32CubeIDE学习记录(按键点灯工程)

Original: https://www.cnblogs.com/litecdows/p/stm32cube_key.html
Author: litecdows
Title: STM32CubeIDE学习记录(按键点灯工程)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/610146/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • mysql字符串拼接

    Mysql数据库中的字符串 CONCAT()CONCAT_WS()GROUP_CONCAT() CONCAT() CONCAT(string1,string2)最常用的字符串拼接方…

    Linux 2023年6月6日
    077
  • JAVA设计模式-单例模式

    JAVA设计模式-单例模式 单例模式 类只能有一个实例,在内存中会创建并且只创建一次对象。所有其他类或者其他需要调用的地方都是用这一个对象,可以防止频繁创建对象,内存占用高。特点:…

    Linux 2023年6月6日
    0100
  • 快速删除指定文件夹下的.DS_Store文件

    清除当前文件夹中 .DS_store 文件: find "." -name .DS_Store find "." -name .DS_Sto…

    Linux 2023年6月14日
    076
  • redis持久化存储

    redis持久化存储 redis多被用于缓存和消息中间件,当被用作缓存时,数据的读写都是在内存中进行的,而内存一旦在主机断电或者主机重启时里面的数据将被清空,为保证数据不被丢失,r…

    Linux 2023年6月7日
    0108
  • 用shell抓取某考试试题

    一、背景 最近公司组织考信息安全,但考试机构没有整理出试题,只给了以下几个在线练习的链接,想着用博客整理下题库题型,奈何这个只能用拍照图片,然后用图片转文字的方式太慢,累死个人了,…

    Linux 2023年6月6日
    0105
  • 一键安装Cisco AnyConnect Secure Mobility Client

    Mac版本 背景:公司内部安装此VPN软件的时候,因默认是安装了所有模块,但我们只需要vpn模块,所产生的干扰。并且有人因不熟悉Mac pkg 软件的卸载方法导致非正常卸载,导致重…

    Linux 2023年6月8日
    0103
  • 利用Hugo与GitHub仓库搭建免费的个人博客

    软件下载 配置环境变量 检验环境变量 创建博客文件 创建站点文件夹 下载主题 新建博客 将个人博客部署到github存储仓库 保姆级 基于Win10环境下的Hugo免费博客搭建 软…

    Linux 2023年6月7日
    0119
  • etcd 与 redis使用场景

    etcd etcd主要讲究服务发现, 有监听机制, 并能保持数据的一直性, 高可用 etcd的红火来源于kurbernetes用etcd做服务发现 etcd是一种分布式存储,更强调…

    Linux 2023年5月28日
    0100
  • Weblogic页面应用查询oracle数据库后台报错或页面日期格式显示错误

    问题:在生产环境中有两台WEB服务器,分别为227和228,部署的应用代码都是每日同步的,两边完全一致,但是某些页面查询数据时,227无结果,并且后台报java数组越界的错误,而2…

    Linux 2023年6月14日
    093
  • 学习一下 SpringCloud (六)– 注册中心与配置中心 Nacos、网关 Gateway

    (1) 相关博文地址: 学习一下 SpringCloud (一)– 从单体架构到微服务架构、代码拆分(maven 聚合): https://www.cnblogs.com/l-y…

    Linux 2023年6月14日
    0122
  • win11下配置vue3版本

    安装node.js PS:全局需要使用管理员权限打开CMD** 下载nodejs的地址 选择左边就好 下载安装后,选择自己需要安装的盘符,即可,不再叙述。 打开CMD查看node是…

    Linux 2023年6月14日
    0104
  • linux常用的一些命令

    时隔一年半,楼主又回来了,以前就想看一下鸟叔的教程,现在如愿了!也没有认真的去啃一本书真是惭愧啊,其实在linux环境中命令的用法真的可以查看命令的help,现学现用也是不错的 以…

    Linux 2023年6月8日
    098
  • MySQL多实例安装部署

    MySQL多实例安装部署 1、MySQL多实例概念 多实例就是在一台服务器上同时开启多个不同的数据库服务端口(例如3306、3307),同时运行多个MYSQL服务进程,这些服务进程…

    Linux 2023年6月7日
    0118
  • 08_Linux基础-vim-tmux-字符编码

    08_Linux基础-vim-tmux-字符编码 一. vim 文本编辑器-vim(编辑文本) Windows:记事本、word、sublime、pycharm能编辑音乐、视频、图…

    Linux 2023年6月6日
    0107
  • 使用PowerShell收集多台服务器的性能计数器

    写在前面 当管理多台Windows Server服务器时(无论是DB、AD、WEB以及其他的应用服务器),当出现性能或其他问题后,参阅性能计数器都是一个非常好的维度从而推测出问题可…

    Linux 2023年5月28日
    089
  • 白话linux操作系统原理

    虽然计算机相关专业,操作系统和计算机组成原理是必修课。但是大学时和真正从事相关专业工作之后,对于知识的认知自然会发生变化。还很有可能,一辈子呆在学校的老师们只是照本宣科,自己的理解…

    Linux 2023年6月14日
    092
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球