Hal GPIO控制--LED/Delay实现

news2025/1/11 21:59:08

环境配置

在CubeMx Pinout view 中点击可以设置管脚模式 ,右击 可以配置管脚名称

这里以点PB8灯为例,可以设置灯输出电平 ,模式为输出,不进行上下拉, 速度 模式设置以及用户自定义名称。。

时钟树配置,使用HSI 时钟并进行pll,倍频到最大频率 64MHz

输出配置不进行分开,所有初始化都在main函数实现,方便后续工程配置变化,不用在keil 中进行文件添,然后点击右上角的生成,生成代码。

代码解析

所有自定义名称配置均在main.h

生成的 gpio配置在 main.c 中,此部分在main 函数中已经调用,不用在bsp中进行重新调用设置

LED Bsp 代码 实现

#ifndef APPLICATIONS_LED_H_
#define APPLICATIONS_LED_H_
#include "main.h"

//#define LED_Pin GPIO_PIN_8
//#define LED_GPIO_Port GPIOB


#define LED(x)   do{ x ? \
                      HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_SET) : \
                      HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET); \
                  }while(0)
#define LED_TOGGLE()    do{ HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin); }while(0)

#endif /* APPLICATIONS_LED_H_ */

直接引用main.h 然后进行定义开关即可,比较方便。

Delay 实现

#include "delay.h"
#include "main.h"
static uint16_t  g_fac_us = 0;  

/**
 * @brief       systick init 
 * @param       sysclk   uint = MHz
 * @retval     void
 */
void delay_init(uint16_t sysclk)
{
    SysTick->CTRL = 0; //disable systick states                       
    HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK_DIV8);//use sysclk/8   
    g_fac_us = sysclk / 8;  //1us count number
}

void delay_us(uint32_t nus)
{
    uint32_t temp;
    SysTick->LOAD = nus * g_fac_us; //time add
    SysTick->VAL = 0x00;            //clear count
    SysTick->CTRL |= 1 << 0 ;       //start count

    do
    {
        temp = SysTick->CTRL;
    } while ((temp & 0x01) && !(temp & (1 << 16))); /* CTRL.ENABLEλ±ØÐëΪ1, ²¢µÈ´ýʱ¼äµ½´ï */

    SysTick->CTRL &= ~(1 << 0) ;   //disable systick 
    SysTick->VAL = 0X00;            //clear count
}

/**
 * @brief      delay nms
 * @param       nms: (0< nms <= 65535)
 */
void delay_ms(uint16_t nms)
{
    uint32_t repeat = nms / 1000;   
    uint32_t remain = nms % 1000;

    while (repeat)
    {
        delay_us(1000 * 1000);  //1s delay
        repeat--;
    }

    if (remain)
    {
        delay_us(remain * 1000);    // delay  less 1s remain ms
    }
}


使用时在main 函数 初始化加上

delay_init(64);  

如上图cubeMX 设置,系统时钟最大为64MHz,按us算,64 count 为1us,输入64即可。

然后就可以愉快的点灯了

  delay_init(64);
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */
    /* USER CODE BEGIN 3 */
        LED_TOGGLE();
        delay_ms(1000);
  }
  /* USER CODE END 3 */

注意加代码必须在注释的范围内添加,不然重新生成代码时,会将写的代码删除(包括头文件include 定义 代码编写等等

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/180620.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

FreeRTOS源码获取-->FreeRTOS移植-->FreeRTOS源码文件了解 | FreeRTOS二

目录 说明&#xff1a; 一、获取源码 1.1、FreeRTOS官网获取 1.2、正点原子开发板A盘资料\6&#xff0c;软件资料\13&#xff0c;版本-->V10.4.6 二、移植源码 2.1、移植步骤 2.1.1、添加源码、头文件路径 2.1.2、添加FreeRTOSConfig.h文件路径 2.1.3、添加或修改相…

VisualSVN Server Enterprise 5.1.1 Crack

VisualSVN Server 提供以下主要功能。 Active Directory 单点登录 允许用户使用他们当前的 Active Directory 域凭据访问 VisualSVN Server。使用安全 Kerberos V5 或 NTLM 身份验证协议。支持双因素身份验证和智能卡。 多站点存储库复制 使用 VisualSVN 分布式文件系统 (VDF…

MySQL基础(1)—— 卸载与安装

文章目录MySQL卸载【windows】1、停止MySQL服务2、软件的卸载2.1 通过控制面板卸载软件2.2 通过360软件管家等第三方软件进行删除2.3 通过MySQL安装包提供的卸载功能卸载3、残余文件的清理4、清理注册表5、删除环境变量配置MySQL安装【windows】1、下载安装包2、安装3、配置环境…

Sharding-JDBC(六)5.1.0版本,实现按月分表、自动建表、自动刷新节点

目录1.Maven 依赖2.创建表结构3.yml 配置4.TimeShardingAlgorithm.java 分片算法类5.ShardingAlgorithmTool.java 分片工具类6.ShardingTablesLoadRunner.java 初始化缓存类7.SpringUtil.java Spring工具类8.源码测试9.测试结果10.代码地址背景&#xff1a; 项目用户数据库表量…

vscode运行C/C++程序

一、vsocde对C/C的支持 Visual Studio Code对C/C语言的支持由Microsoft C/C扩展程序提供。它使得C/C在Windows、Linux和macOS等跨平台开发成为可能。 二、安装扩展程序 打开VS Code软件选择任务栏上的扩展视图图标&#xff08;下图红色方框&#xff09;或使用快捷键(CtrlShif…

【自然语言处理】情感分析(四):基于 Tokenizer 和 Word2Vec 的 CNN 实现

情感分析&#xff08;四&#xff09;&#xff1a;基于 Tokenizer 和 Word2Vec 的 CNN 实现本文是 情感分析 系列的第 444 篇&#xff0c;前三篇分别是&#xff1a; 【自然语言处理】情感分析&#xff08;一&#xff09;&#xff1a;基于 NLTK 的 Naive Bayes 实现【自然语言处…

服务发现Discovery和Eureka自我保护机制

目录 一、服务发现Discovery ​二、Eureka自我保护 &#xff08;一&#xff09;故障现象 &#xff08;二&#xff09;导致原因 &#xff08;三&#xff09;怎么禁止自我保护 三、Eureka2.0的停更 一、服务发现Discovery 对于注册进eureka里面的微服务&#xff0c;可以通…

外挂、破解软件理论与实战

外挂、破解软件理论与实战 1 理论 1.1 不同操作系统下的可执行文件 Windows【PE】 PE 格式&#xff0c;可移植可执行格式&#xff08;Portable Executable&#xff09;&#xff0c; 是 Windows 下的主要可执行文件格式。别被名字迷惑了&#xff0c;PE 文件必须是 Windows 下…

第四十六章 动态规划——状态机模型

第四十六章 动态规划——状态机模型一、通俗理解状态机DP1、什么是状态机2、什么是状态机DP二、例题1、AcWing 1049. 大盗阿福&#xff08;1&#xff09;问题&#xff08;2&#xff09;分析a.状态定义b.状态转移c.循环设计d.初末状态&#xff08;3&#xff09;代码2、AcWing 10…

C++学习/温习:新型源码学编程(三)

写在前面(祝各位新春大吉&#xff01;兔年如意&#xff01;) 【本文持续更新中】面向初学者撰写专栏&#xff0c;个人原创的学习C/C笔记&#xff08;干货&#xff09;所作源代码输出内容为中文&#xff0c;便于理解如有错误之处请各位读者指正请读者评论回复、参与投票&#xf…

01 课程简介、HTML标签【尚硅谷JavaWeb教程】

1. 课程体系设计 2. HTML标签 服务器—浏览器&#xff08;字符串"" &#xff09; demo01.html 1&#xff09;html语言是解释型语言&#xff0c;不是编译型 浏览器是容错的 2&#xff09;html页面中由一对标签组成&#xff1a; < html>称为 开始标签 < /htm…

Java基础语法——数组概念、数组内存图解(一个数组、二个数组)及二元数组的应用

目录 数组概述 数组定义格式 数组概念 数组的定义格式 数组的初始化 数组初始化概述 数组的初始化方式 Java中的内存分配 Java中一个数组的内存图解 Java中二个数组的内存图解 两个数组指向同一个地址的内存图解 数组操作中两个常见的小问题 二维数组 二维数组概述…

c++11 标准模板(STL)(std::forward_list)(十一)

定义于头文件 <forward_list> template< class T, class Allocator std::allocator<T> > class forward_list;(1)(C11 起)namespace pmr { template <class T> using forward_list std::forward_list<T, std::pmr::polymorphic_…

前端架构处理Cookie、Session、Token

1. Cookie Cookie 总是保存在客户端中。按在客户端中的存储位置&#xff0c;可分为内存 Cookie 和硬盘 Cookie。 内存 Cookie 由浏览器维护&#xff0c;保存在内存中&#xff0c;浏览器关闭后就消失了&#xff0c;其存在时间是短暂的。硬盘 Cookie 保存在硬盘里&#xff0c;…

Spring Boot、Spring MVC热部署

一、相关概述 JVM能够识别的是字节码.class文件每次重新运行都是一个重新编译的过程&#xff0c;也就是说会生成新的target字节码文件&#xff1b;但是每次修改了代码之后也必须要重新运行&#xff0c;这样比较麻烦。热部署就能较好地解决该问题&#xff0c;直接刷新页面就可以…

(22)go-micro微服务kibana使用

文章目录一 kibana介绍二 Kibana主要功能三 Kibana侧边栏四 Kibana安装1.拉取镜像2.运行命令3.查看是否运行五 Kibana使用六 Kibana图形化界面七 最后一 kibana介绍 Kibana &#xff1a;是一个开源的分析和可视化平台&#xff0c;旨在与 Elasticsearch 合作。Kibana 提供搜索、…

初识Nonebot2

文章目录什么是nonebot2&#xff1f;机器人工作流程WebSocket协议OneBot标准Nonebot2框架工作路径什么是nonebot2&#xff1f; 关于NoneBot2&#xff0c;我们先来引用一下官方文档的描述 NoneBot2是一个可扩展的 Python 异步机器人框架&#xff0c;它会对机器人收到的事件进行…

创建进度条 tqdm模块

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 创建进度条 tqdm模块 选择题 以下python代码最后输出错误的一项是? from tqdm import tqdm import time text{loss:0.2,learn:0.8} print(【开始执行】) for i in tqdm(range(50)…

python图像处理(图像缩放)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 图像缩放也是isp处理的一个基本功能。现在的camera像素越来越大,但是显示设备的分辨率是一定的,如果想把图像显示在显示器或者lcd上面,那就要符合对应显示设备的分辨率。一般来说…

【数据结构与算法理论知识点】5、图与贪心算法

5、图与贪心算法 逻辑结构 5.1、图的定义和术语 图&#xff1a;Graph(V,E) V:顶点&#xff08;数据元素&#xff09;的有穷非空集合&#xff1b; E:边的有穷集合。 **无向图:**每条边都是无方向的 有向图:每条边都是有方向的 完全图:任意两个点都有一条边相连 稀疏图:有很…