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)

大家都在看

  • 泛微 OA 前台 GetShell 复现

    自行搭建环境: 漏洞路径: /weaver/weaver.common.Ctrl/.css?arg0=com.cloudstore.api.service.Service_Chec…

    Linux 2023年5月28日
    0100
  • 就业班第一周作业

    是由 Patrick Volkerding 开发的 [GNU/Linux]发行版,于 1993 年创建,最初基于 Softlanding Linux System。典型代表系统是S…

    Linux 2023年6月13日
    081
  • 文件的压缩与打包

    文件的压缩与打包 常用文件拓展名 *.tar.gz tar程序打包的文件,并且经过gzip的压缩 *.tar.bz2 tar程序打包的文件,并且经过bzip2的压缩 tar 命令,…

    Linux 2023年6月11日
    087
  • Harbor部署

    harbor 无论是使用Docker-distribution去自建仓库,还是通过官方镜像跑容器的方式去自建仓库,通过前面的演示我们可以发现其是非常的简陋的,还不如直接使用官方的D…

    Linux 2023年6月7日
    0107
  • vim编辑器

    vim 编辑器 2018 年12 月12 日 22:15 常用操作 命令模式(初始模式) 输入模式(i 进入) 底行命令模式(:进入) / 往下搜索 ? 往上搜索 n 搜索下一个 …

    Linux 2023年6月13日
    0118
  • CentOS7下安装mysql8.0.25

    一、mysql的rpm包准备 官网下载完整rpm包 解压后有多个rpm包, 挑选如下图的5个rpm包上传至linux 二、使用rpm -ivh安装rpm包 按如下安装顺序依次安装 …

    Linux 2023年6月6日
    0133
  • VSCODE 配置远程调试环境

    以下内容为本人的著作,如需要转载,请声明原文链接微信公众号「englyf」 https://mp.weixin.qq.com/s/f1KZOlL92ojes-r2l9rlCw 我的…

    Linux 2023年6月6日
    0142
  • redis的事务不是原子性

    Reference: https://blog.csdn.net/u011692780/article/details/81213010 一、事务的四大特性 关系型数据库的事务具有…

    Linux 2023年5月28日
    087
  • Ceph 块存储 创建的image 映射成块设备

    将创建的volume1映射成块设备 [root@mysql-server ceph]# rbd map rbd_pool/volume1 rbd: sysfs write fail…

    Linux 2023年6月13日
    099
  • Linux同时输出到管道和标准输出

    想使用Shell脚本对某文本文件中无序的一列数字排序并输出求和结果,文本如下所示: 421350 开头的命令只能输出求和结果,不能同时输出排序结果: [En] The comman…

    Linux 2023年5月27日
    086
  • 记一次 android 线上 oom 问题

    背景 公司的主打产品是一款跨平台的 App,我的部门负责为它提供底层的 sdk 用于数据传输,我负责的是 Adnroid 端的 sdk 开发。 sdk 并不直接加载在 App 主进…

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

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

    Linux 2023年6月8日
    0103
  • 系统架构的11条原则

    基本原则 原则一:价值为王 解析: 价值为王的另一种说法叫做YAGNI。YAGNI 是 You aren’t gonna need it 的缩写。该原则的基本含义就是,…

    Linux 2023年6月14日
    0121
  • Ansible Playbook概览

    Ansible playbook 执行需要三步路执行: 1.编写playbook 2.定义主机清单文件 3.设置运行环境,写入配置文件 1.编写playbook Playbook使…

    Linux 2023年6月6日
    081
  • 【Linux】socket通信编程

    socket通信 * – socket简介 – socket操作API函数 – 代码实现 socket简介 网络层的”ip地址&#8…

    Linux 2023年6月13日
    094
  • WEB自动化-07-Cypress Test Runner

    7 Test Runner 7.1 概述 Test Runner是Cypress非常重要一个组件,其主要作用为运行测试、更改配置、将运行的测试结果写入控制台等等。 打开Cypres…

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