002 - STM32固件库GPIO(一)操作LED灯

news2024/9/21 2:44:22

STM32固件库操作LED灯

1、创建板级支持包文件

在User目录下创建LED文件夹,包含bsp_led.c及头文件bsp_led.h,之后在Keil中将bsp_led.c加入

在这里插入图片描述

2、程序代码

bsp_led.c

#include ".\LED\bsp_led.h"		//相对路径访问,可以在工程配置内将此路径加入

void LED_Config(void)
{
    //  创建GPIO_InitTypeDef类型结构体
    GPIO_InitTypeDef LED_InitStructure;
    
    //使能LED所在的GPIO外设时钟
    RCC_AHB1PeriphClockCmd(LED_R_CLK|LED_G_CLK|LED_B_CLK,ENABLE);

    //设置LED为输出模式
    LED_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
    
    //设置LED输出类型为推挽输出
    LED_InitStructure.GPIO_OType = GPIO_OType_PP;
    
    //设置LED引脚为上拉
    LED_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
    
    //设置LED输出速率围殴25MHz
    LED_InitStructure.GPIO_Speed = GPIO_Speed_25MHz;
    
    /*--------以上配置RGB均相同,配置一次即可--------*/
    
    //选择红灯引脚
    LED_InitStructure.GPIO_Pin = LED_R_PIN;
    //初始化红灯引脚
    GPIO_Init(LED_R_PORT,&LED_InitStructure);
    
    //选择绿灯引脚
    LED_InitStructure.GPIO_Pin = LED_G_PIN;
    //初始化绿灯引脚
    GPIO_Init(LED_G_PORT,&LED_InitStructure);
    
    //选择蓝灯引脚
    LED_InitStructure.GPIO_Pin = LED_G_PIN;
    //初始化蓝灯引脚
    GPIO_Init(LED_G_PORT,&LED_InitStructure);
    
    //配置完成后将所有灯关闭
    LED_OFF;
}

bsp_led.h

#ifndef __BSP_LED_H__
#define __BSP_LED_H__

#include "stm32f4xx.h"
#include "stm32f4xx_rcc.h"


// 红灯
#define LED_R_PIN   GPIO_Pin_10
#define LED_R_PORT  GPIOH
#define LED_R_CLK   RCC_AHB1Periph_GPIOH

// 绿灯
#define LED_G_PIN   GPIO_Pin_11
#define LED_G_PORT  GPIOH
#define LED_G_CLK   RCC_AHB1Periph_GPIOH

// 蓝灯
#define LED_B_PIN   GPIO_Pin_12
#define LED_B_PORT  GPIOH
#define LED_B_CLK   RCC_AHB1Periph_GPIOH


//操作寄存器方法控制LED输出
#define OutH(Port,Pin)      {Port->BSRRL = Pin;}        //输出高电平
#define OutL(Port,Pin)      {Port->BSRRH = Pin;}        //输出低电平
#define Toggle(Port,Pin)      {Port->ODR ^= Pin;}        //反转

//定义LED宏
#define LED_R_ON    OutL(LED_R_PORT,LED_R_PIN)
#define LED_R_OFF    OutH(LED_R_PORT,LED_R_PIN)
#define LED_R_TOGGLE    Toggle(LED_R_PORT,LED_R_PIN)

#define LED_G_ON    OutL(LED_G_PORT,LED_G_PIN)
#define LED_G_OFF    OutH(LED_G_PORT,LED_G_PIN)
#define LED_G_TOGGLE    Toggle(LED_G_PORT,LED_G_PIN)

#define LED_B_ON    OutL(LED_B_PORT,LED_B_PIN)
#define LED_B_OFF    OutH(LED_B_PORT,LED_B_PIN)
#define LED_B_TOGGLE    Toggle(LED_B_PORT,LED_B_PIN)


//基本色
#define LED_RED      LED_R_ON;LED_G_OFF;LED_B_OFF	//红灯亮

#define LED_GREEN    LED_R_OFF;LED_G_ON;LED_B_OFF	//绿灯亮

#define LED_BLUE     LED_R_OFF;LED_G_OFF;LED_B_ON	//蓝灯亮

#define LED_OFF      LED_R_OFF;LED_G_OFF;LED_B_OFF	//所有灯灭

void LED_Config(void);

#endif  /* __BSP_LED_H__ */


main.c

#include "stm32f4xx.h"
#include ".\LED\bsp_led.h"

//延时函数
void Delay(__IO uint32_t nCount)
{
    for(;nCount != 0;nCount--);
}

int main(void)
{
    while(1)
    {
        LED_R_ON;
        Delay(0xFFFFFF);
        
        LED_G_ON;
        Delay(0xFFFFFF);
        
        LED_B_ON;
        Delay(0xFFFFFF);
    }
}

下载验证

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

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

相关文章

LeetCode 199. 二叉树的右视图

199. 二叉树的右视图 描述 给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。 示例 示例1 输入:[1,2,3,null,5,null,4] 输出:[1,3,4] 示例2 输入&#xf…

【笔试强训选择题】Day14.习题(错题)解析

作者简介:大家好,我是未央; 博客首页:未央.303 系列专栏:笔试强训选择题 每日一句:人的一生,可以有所作为的时机只有一次,那就是现在!!! 文章目录…

Linux环境搭建与历史

目录 前言 1.操作系统是什么 2. 为什么我们要选择Linux 3.Linux操作系统发展历史 4.企业应用现状 Linux在服务器领域的发展 Linux在桌面领域的发展 Linux在移动嵌入式领域的发展 Linux在云计算/大数据领域的发展 5.发行版本 6. Linux环境配置 6.1 Linux搭建的方式 …

程序员挣够了钱,到中年你还害怕失业吗?

最近一刷知乎全部都是大龄程序员失业危机 真的有这么可怕吗? 程序员35岁就真的到了瓶颈期? 我不这么认为 挣够了钱,当然不可怕,问题是没挣够啊~!!! 按题主的算法是,大城市薪资1…

C++基础STL-map容器

map容器介绍: 作为关联式容器的一种,map 容器存储的都是 pair 对象,也就是用 pair 类模板创建的键值对。其中,各个键值对的键和值可以是任意数据类型,包括 C基本数据类型(int、double 等&#xff0…

快速入门matlab——变量练习

学习目标:1.掌握matlab编程中最常用的几种变量类型 2.对变量类型的属性有所熟悉,不要求记忆,知道了解即可 3.要求熟练运用这几种变量类型创建自己的变量 clear all; % 清除Workspace中的所有…

服务网格:优化微服务通信与保障系统安全性的架构利器

文章目录 服务网格:优化微服务通信与保障系统安全性的架构利器1. 什么是服务网格?微服务架构概述:服务网格的定义和作用: 2. 服务网格的特点:透明性:无需修改应用代码服务发现与负载均衡:动态发…

GPT3.5 VS GPT-4写领导讲话稿,谁是最强笔杆子?

正文共 1240 字,阅读大约需要 5 分钟 文秘/公务员必备技巧,您将在5分钟后获得以下超能力: 快速生成领导讲话稿 Beezy评级 :B级 *经过简单的寻找, 大部分人能立刻掌握。主要节省时间。 推荐人 | Kim 编辑者 | Linda ●…

redis持久化配置

回顾:rpcbind111 nfs2049 redis高可用高可用是指服务器可以正常访问的时间,衡量的标准是在多长时间内可以提供正常服务(99.9%,99.99%,99.999%等) 还要考虑提供主从分离,快速容灾技术&#…

在 React 中使用 highlight.js 和 Clipboard.js 实现代码块和复制功能

参考链接:https://blog.csdn.net/huangjuan0229/article/details/130319050 在前端开发中,代码块高亮和复制功能是十分常见的需求。而在 React 中,常用的代码高亮库是 highlight.js,常用的复制库是 Clipboard.js。本篇文章将介绍…

新版 钥证书模式加签模式支付宝官方支付对接·错误代码 missing-signature 错误原因: 缺少签名参数 解决方案

新版密钥证书加签模式支付宝官方支付对接错误代码 missing-signature 错误原因: 缺少签名参数 解决方案 大家好我是优雅草伊凡,最近处理的问题特别多每天忙得不可开交,但是我相信后续要写的内容和记录下的问题是越来越多了,其他同事忙着开发…

10-02 单元化架构核心问题与概念

单元化架构产生的原因 应对增长 传统架构无法处理日益增长的互联网用户需求扩容 需要新架构更近一部提升了系统的扩展能力系统稳定性 新架构需要高可用、相对独立和故障隔离使整体系统更稳定灰度发布 系统和组件都纳入版本管理,按需部署进行灰度发布 核心问题 应…

成都待慕电商:抖音百亿现金扶持商家

新京报贝壳财经讯5月16日,抖音电商在广州举办第三届生态大会。抖音电商总裁魏雯雯透露,过去一年,抖音电商GMV(商品交易总额)同比增长80%,其中,货架场景GMV占比达30%,平台售出超300亿…

公司新招了个字节拿36K的人,让我见识到了什么才是测试扛把子......

5年测试,应该是能达到资深测试的水准,即不仅能熟练地开发业务,而且还能熟悉项目开发,测试,调试和发布的流程,而且还应该能全面掌握数据库等方面的技能,如果技能再高些的话,甚至熟悉分…

【目标检测】基于yolov5的交通标志检测和识别(可识别58种类别,附代码和数据集)

写在前面: 首先感谢兄弟们的订阅,让我有创作的动力,在创作过程我会尽最大能力,保证作品的质量,如果有问题,可以私信我,让我们携手共进,共创辉煌。 文末附项目代码和数据集,请看检测效果: 1. 介绍 YOLOv5是一种用于目标检测的深度学习算法,它能够在高速和高精度的情…

Spring中的@Value注解详解

Spring中的Value注解详解 概述 本文配置文件为yml文件 在使用spring框架的项目中,Value是经常使用的注解之一。其功能是将与配置文件中的键对应的值分配给其带注解的属性。在日常使用中,我们常用的功能相对简单。本文使您系统地了解Value的用法。 Value…

人工智能的新时代:讯飞星火大模型Vs ChatGPT

近日,科大讯飞召开了星火认知大模型成果发布会,会上表示讯飞星火大模型将突破开放式问答,对标ChatGPT,在中文能力上超过ChatGPT,在英文能力上与ChatGPT相当。对此,你怎么看? 一、你有使用过这种…

在 Golang 中执行 Shell 命令

原文标题:Executing Shell Commands in Golang 作者:Soham Kamani 之前自己也写过 os/exec 包执行 Shell 命令的文章,但是没有这篇讲的详细,感兴趣可以看看,点此处。 在本教程中,我们将学习如何在 Golang …

融云 WICC 2023 定档!「出海嘉年华」穂城来袭!

集赞获纸质版《作战地图》 阔别一年,通信行业年度盛会 WICC 即将重磅回归。移步【融云全球互联网通信云】回复“地图”免费领 6 月 2 日(周五),融云与白鲸出海联合主办、以“聚势突围,布局全球”为主题的“WICC 社交…

进程线程常见面试题及基础知识

1 进程 我们编写的代码只是一个存储在硬盘的静态文件,通过编译后就会生成二进制可执行文件,当我们运行这个可执行文件后,它会被装载到内存中,接着 CPU 会执行程序中的每一条指令,那么这个运行中的程序,就被…