LED 的 GPIO 配置流程 | 学习笔记

简介: 快速学习 LED 的 GPIO 配置流程

开发者学堂课程【嵌入式之 RFID 开发与应用2020版:LED 的 GPIO 配置流程】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/665/detail/11150


LED 的 GPIO 配置流程

对于 STM32,它有很多的 IO 口,对 IO 口的管理是把所有的 IO 口都进行了分组,每一组用字母来表示,比如 GPIOA 组、B 组 C 组依次往后…最终芯片到底是哪个组,它取决于芯片的型号,本身拥有多少个 IO 口。

然后每一组里面包含 16 个广角,比如 GPIOA, 就有 GPIOA0 到 GPIOA15 一共有 16 个引脚,每一个组里面有 16 个引脚,每一个引脚都可以进行独立的配置,配置的寄存器有模式选择的输入输出,还有在不影响其他位直接进行位操作的这种计算器,以及带锁定的 IO 操作的计算器,最终都是通过计算器来通过的函数接口来进行操作。

不管是通过什么方式去操作,每一个计算器都有自己的内存空间对应的地址,操作这些计算器本质上就是操作内存。而且每一个硬件还有各自的总线时钟,总线时钟不一样,它的频率也不一样。

理论上 STM32 分为两种时钟,一个是高速时钟,一个是外围低速时钟。高速时钟跟主 CPU 的运行频率通常是一样的,比如 AHB 就是 72 兆,AHB 它又被调节出两个总线,分别是 APB1 和 APB2。

APB1 和 APB2 默认的情况下,APB1 是 36 兆, APB2 是 72 兆。但是也可以对它进行修改,把它修改成 72 兆,甚至是把 APB2 修改成 36 兆,这个都可以设置的,并不是绝对的,只是建议这样去做一个高速时钟,一个低速时钟。而且知道了这两个总线它所对应的时钟之后,以及这两个总线在使用过程当中要去使用它,挂在总线上面的模块才能正常工作。

所以一般情况得知道总线时钟是多少,而且 APB2 它怎么样才能使能这个时钟,包括后面的定时器挂在哪个总线上。所以知道属于哪条总线之后,才能够去使能总线的时钟才能让它工作。

所有的这些寄存器,所有的计算器都有一个唯一的内存地址和它对应,

image.png

也就是操作计算器的本质其实就是操作这些内存地址。所以如果要去使用 IO 口,首先第一步使能时钟, CPU、 MCU 是一个纯数字器件,也存在大量的模拟电路,这些模拟电路归根结底也是为这个数字系统服务的,这个数字系统就是 0 和 1 的概念。

0 和 1 的产生:脉冲的高电平代表 1,低电平代表 0。0 和 1 是一个脉冲,这个脉冲就是时钟,所以要想处理逻辑事件,数字事件始终是面临的第一个问题,它必须率先被启动起来,才能够去配置那些计算器。因为涉及到一个节能功耗的问题,不把这些所有的时钟都统一使能。

所以每一个模块,每个模块都有各自的时钟,不使用的模块就把它时钟关掉,这个时候就不会产生频率,就不会去消耗更多的能源,更好的去节省了系统功耗。

建一个工程,乱码问题修改成 UTF-8,打开书写好的程序,从 main 函数开始去写程序,main 函数进来,操作 LED 通过 gpl 要用这个 LED-init:

Void led-int(void)

{

GPIO-InitTypeDef   GPIO-InitStructure;

RCC-APB2PeriphclockCmd(RCC-XXX-LED, ENABLE);

GPIO-InitStructure,GPIO-Pin=GPIO-XXX-LED;

GPIO-InitStructure,GPIO-Mode=GPIO-Mode-Out-PP;

GPIO-InitStructure,GPIO-Speed=GPIO-Speed-10MHZ;

GPIO-Init(GPIO-XXX-LED-PORT,& GPIO-InitStructure);

GPIO-XXX-LED-OFF():

}

在初始化  gpl 的第一步,rcc-APB2 是它的外围时钟的命令,在这个工程里面,无论使用哪个模块不要包含 rcc,因为它里面的接口就是定义在 rcc 里面。打开这个时钟,它用的是 APB2 而不是 APB1,因为总线、IO 口都是在 APB2 里面,当然如果打一个窗口,很有可能就到 APB1 里面去了。

它需要的参数是 rcc-APB2 外围的一个具体的模块,这个模块叫 gpicc,使能 C 口,C 这一组 IO 口的时钟就这样被使能了。

第二步是配置它的 IO,先定一个 GPIO-Inittypedef 结构体,这个结构体包含了 IO口的速度和模式,主要是把配置过程给简化了。IO 口是 C 口的第十三个引脚,如原理图所示:

image.png

引脚确定后确定模式,各种模式:模拟输入、悬空输出,输入推广输出,这里选择推挽输出。记住模式到底是输入还是输出就行了。这里选择什么输出。频率为 10兆,就是 IO 口的高低电平的变化,最多有 10 兆。

接下来要把这堆结构体通过 GPIO-init 填充到 c 口相关寄存器。写进去之后,接下来还把这个灯给熄灭,开关一个灯,LED-XXX-OFF。有一个接口叫做 GPIO-setbits,就是给指定的 IO 设计成指定的值,指定 IO 是 C 口,有 13 个引脚。setbits 就是至 1,resetbits 就是至 0。1 就表示灯熄灭,亮灯则是在 while 循环里。

While(1){

LED_XXX_ON();

delay_ms(300);

LED_XXX_OFF();

delay_ms(300);

}

ON,OFF 每隔 300 毫秒,

时间也是用了一个软件在如下代码位置不断的去延时

Volatile unsigned int i = 6*1000*len;

While(i--);

是不准确的,学习完定时器后就可以做出准确的延时函数,以上为整个代码的结构,就是 LED 的 GPIO 的程序。

相关文章
|
数据可视化 Java 数据库
28个案例问题分析---20---内存长期占用导致系统慢--jvm调优
28个案例问题分析---20---内存长期占用导致系统慢--jvm调优
696 0
|
存储 Linux 应用服务中间件
基于CentOS 7.6的Docker新手教学
采用本地虚拟机+阿里云镜像加速器
1580 5
基于CentOS 7.6的Docker新手教学
|
应用服务中间件 网络安全 nginx
Nginx配置WebSocket 【支持wss与ws连接】
Nginx配置WebSocket 【支持wss与ws连接】
10809 1
|
运维 监控 算法
时间序列异常检测:MSET-SPRT组合方法的原理和Python代码实现
MSET-SPRT是一种结合多元状态估计技术(MSET)与序贯概率比检验(SPRT)的混合框架,专为高维度、强关联数据流的异常检测设计。MSET通过历史数据建模估计系统预期状态,SPRT基于统计推断判定偏差显著性,二者协同实现精准高效的异常识别。本文以Python为例,展示其在模拟数据中的应用,证明其在工业监控、设备健康管理及网络安全等领域的可靠性与有效性。
1255 13
时间序列异常检测:MSET-SPRT组合方法的原理和Python代码实现
|
11天前
|
人工智能 Cloud Native 安全
AWS Bedrock托管Claude 4.6的工程实践与合规思考
近期AWS Bedrock集成Claude 4.6引发热议。该架构以VPC内数据隔离、云原生无缝集成及Firecracker微虚拟机硬隔离为核心,兼顾合规(SOC2/GDPR)、安全与工程效率。国内企业出海需关注主体资质、模型白名单申请及跨境网络优化。
|
机器学习/深度学习 数据格式
R1-Omni开源!多模态模型+RLVR,让各模态作用清晰可见
随着 DeepSeek R1 的推出,强化学习在大模型领域的潜力被进一步挖掘。Reinforcement Learning with Verifiable Reward (RLVR) 方法的出现,为多模态任务提供了全新的优化思路,无论是几何推理、视觉计数,还是经典图像分类和物体检测任务,RLVR 都展现出了显著优于传统监督微调(SFT)的效果。
941 12
|
存储 Serverless 数据库
科普文:云计算服务类型IaaS, PaaS, SaaS, BaaS, Faas说明
本文介绍了云计算服务的几种主要类型,包括IaaS(基础设施即服务)、PaaS(平台即服务)、SaaS(软件即服务)、BaaS(后端即服务)和FaaS(函数即服务)。每种服务模式提供了不同的服务层次和功能,从基础设施的提供到应用的开发和运行,再到软件的交付使用,满足了企业和个人用户在不同场景下的需求。文章详细阐述了每种服务模式的特点、优势和缺点,并列举了相应的示例。云计算服务的发展始于21世纪初,随着互联网技术的普及,这些服务模式不断演进,为企业和个人带来了高效、灵活的解决方案。然而,使用这些服务时也需要注意服务的稳定性、数据安全性和成本等问题。
13340 5
|
存储 分布式计算 安全
【云计算与大数据计算】大数据物理、集成、安全架构及阿里云飞天系统架构讲解(超详细)
【云计算与大数据计算】大数据物理、集成、安全架构及阿里云飞天系统架构讲解(超详细)
2111 0
|
网络协议 安全 网络性能优化
[ 数据通信面试篇 ] 数通面试题大集合(详解),看完直怼面试官(一)(上)
面试网络方向的岗位,数通知识尤为重要。 这里我总结了200来个面试题,本文讲解前30个面试题。 这些问题搞懂了,什么技术支持工程师呀,远程技术支持工程师,网络工程师呀基本上没什么问题了。 当然了,也不只这些岗位会问道这些题,这里只罗列出来了契合的岗位。
3292 1
[ 数据通信面试篇 ] 数通面试题大集合(详解),看完直怼面试官(一)(上)