点灯案例练习(基于寄存器)

2024-08-20 15:44
文章标签 寄存器 点灯 练习 案例

本文主要是介绍点灯案例练习(基于寄存器),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

一、需求描述

二、工程创建

二、硬件电路设计

三、软件设计

1、main.c

1、开启时钟

 2、配置GPIOA的工作模式

3、设置PA1、PA8端口低电平

4、给死循环保持状态

2、最终代码如下

 四、实验现象

前面,我们耗费大量时间,终于点亮了STM32板子上的第一个LED-1的黄灯,实验现象如下

那么,根据前面的思路,我们按理说也可以点亮其他两个LED灯(这里有三个LED灯,分别叫LED-1 LED-2 LED-3,对应黄蓝绿),接下来我们就开始练习点亮另外两盏灯。

一、需求描述

基于寄存器开发,在第一个点灯案例基础上继续点亮LED-2、LED-3两个灯 

二、工程创建

基于前面的点灯案例进行扩展练习,故直接在原来的工程上进行修改,不需重新创建

二、硬件电路设计

 

由原理图可知:
LED-2连接PA1端口, LED-3连接PA8端口 

同样是给端口低电平即可点亮

三、软件设计

1、main.c

1、开启时钟

和前面同理,我们要先开启时钟,此处和前面使用的寄存器相同,都是RCC_APB2ENR,且使用的都是GPIOA的端口,所以开启时钟方式相同,即寄存器地址值为0x40021000+0x18,给的数据二进制第二位是1,其他都是0。

// 开启时钟
*(uint32_t *)(0x40021000+0x18) = 4;

 2、配置GPIOA的工作模式

GPIOA时钟开启后,就要设置GPIOA的工作模式。和前面一样,要使端口输出高低电平,就要让连接LED灯的端口PA1和PA8处于输出模式。

同样,找到GPIOA的寄存器的地址值 0x40010800+0x00。有下图手册可知,给寄存器的数据是二进制第6、7位给00,4、5位给11即可让链接LED-2灯的端口PA1处于最大速度的推挽输出模式。给的数据就是00110000,即0x30

// 设置GPIOA的工作模式
*(uint32_t *)(0x40010800+0x00) = 0x30;  // PA1

同时,我们还要设置连接LED-3的端口PA8的工作模式,但是我们发现,这个端口配置低寄存器只有PA0-PA7端口的配置。所以我们要找相应的端口配置高寄存器去进行同理操作。

由上图可知,配置PA8端口的寄存器是GPIOx_CRH,偏移地址值是0x04,所以对应的寄存器地址值为 0x40010800+0x04,要使PA8端口处于最大速度推挽输出模式,则要给的数据就是0011,也就是3(或16进制表示 0x03)

// 设置GPIOA的工作模式
*(uint32_t *)(0x40010800+0x04) = 0x03;  // PA8

3、设置PA1、PA8端口低电平

 工作模式变为输出模式后,接下来就是找到控制端口高低电平的端口输出寄存器,查阅技术手册

由图可知,输出寄存器和前面一样,地址值为 0x40010800 + 0x0C。只要给PA1和PA8端口低电平(0)即可点亮,所以给寄存器的数据二进制位的第1位和第8位都是0,其余为1即可,也就是1111111011111101,即0xfefd

// 设置PA1、PA8为低电平
*(uint32_t *)(0x40010800+0x0C) = 0xfefd;  

4、给死循环保持状态

 最后,只需加一个死循环,保持灯点亮的状态就好啦

while(1){}

2、最终代码如下

#include<stdint.h>
// 查手册 找基地址和偏移地址等
int main(void)
{
    // 1. RCC寄存器 GPIO A时钟配置  节能 告诉节拍节奏,模块较多,运行频率不同,所以单独配置
    *(uint32_t *)(0x40021000 + 0x18) = 4;
    
    // 2. GPIO工作模式的配置  输出模式 端口配置寄存器 00110000
    *(uint32_t *)(0x40010800 + 0x00) = 0x30;  //PA1
    *(uint32_t *)(0x40010800 + 0x04) = 0x03;  //PA8 0011
    
    // 3. 通用数据输出寄存器 PA1、PA8 输出低电平
    *(uint32_t *)(0x40010800 + 0x0c) = 0xfefd;   
    
    // 4. 死循环保持状态
    while(1){}
}
 

 四、实验现象

如果前面关于Keil和st_Link的相关配置都配置完毕的话,那么现在只需点击编译、运行、然后下载程序即可观察到LED-2、LED-3(蓝灯、绿灯)被点亮的现象啦

 现象如下,除了电源指示灯,蓝灯绿灯都亮啦

 

至此,关于点灯案例的小练习就完成啦,其实还可以试着将三个灯都点亮,或者点亮一个灯撒活动都可以试试哦,实际上原理都是差不多的,也就这些步骤,查查技术手册就OK啦

加油加油 

这篇关于点灯案例练习(基于寄存器)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1090487

相关文章

Hadoop企业开发案例调优场景

需求 (1)需求:从1G数据中,统计每个单词出现次数。服务器3台,每台配置4G内存,4核CPU,4线程。 (2)需求分析: 1G / 128m = 8个MapTask;1个ReduceTask;1个mrAppMaster 平均每个节点运行10个 / 3台 ≈ 3个任务(4    3    3) HDFS参数调优 (1)修改:hadoop-env.sh export HDFS_NAMENOD

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置

深入探索协同过滤:从原理到推荐模块案例

文章目录 前言一、协同过滤1. 基于用户的协同过滤(UserCF)2. 基于物品的协同过滤(ItemCF)3. 相似度计算方法 二、相似度计算方法1. 欧氏距离2. 皮尔逊相关系数3. 杰卡德相似系数4. 余弦相似度 三、推荐模块案例1.基于文章的协同过滤推荐功能2.基于用户的协同过滤推荐功能 前言     在信息过载的时代,推荐系统成为连接用户与内容的桥梁。本文聚焦于

【区块链 + 人才服务】可信教育区块链治理系统 | FISCO BCOS应用案例

伴随着区块链技术的不断完善,其在教育信息化中的应用也在持续发展。利用区块链数据共识、不可篡改的特性, 将与教育相关的数据要素在区块链上进行存证确权,在确保数据可信的前提下,促进教育的公平、透明、开放,为教育教学质量提升赋能,实现教育数据的安全共享、高等教育体系的智慧治理。 可信教育区块链治理系统的顶层治理架构由教育部、高校、企业、学生等多方角色共同参与建设、维护,支撑教育资源共享、教学质量评估、

客户案例:安全海外中继助力知名家电企业化解海外通邮困境

1、客户背景 广东格兰仕集团有限公司(以下简称“格兰仕”),成立于1978年,是中国家电行业的领军企业之一。作为全球最大的微波炉生产基地,格兰仕拥有多项国际领先的家电制造技术,连续多年位列中国家电出口前列。格兰仕不仅注重业务的全球拓展,更重视业务流程的高效与顺畅,以确保在国际舞台上的竞争力。 2、需求痛点 随着格兰仕全球化战略的深入实施,其海外业务快速增长,电子邮件成为了关键的沟通工具。

【区块链 + 人才服务】区块链集成开发平台 | FISCO BCOS应用案例

随着区块链技术的快速发展,越来越多的企业开始将其应用于实际业务中。然而,区块链技术的专业性使得其集成开发成为一项挑战。针对此,广东中创智慧科技有限公司基于国产开源联盟链 FISCO BCOS 推出了区块链集成开发平台。该平台基于区块链技术,提供一套全面的区块链开发工具和开发环境,支持开发者快速开发和部署区块链应用。此外,该平台还可以提供一套全面的区块链开发教程和文档,帮助开发者快速上手区块链开发。

RabbitMQ练习(AMQP 0-9-1 Overview)

1、What is AMQP 0-9-1 AMQP 0-9-1(高级消息队列协议)是一种网络协议,它允许遵从该协议的客户端(Publisher或者Consumer)应用程序与遵从该协议的消息中间件代理(Broker,如RabbitMQ)进行通信。 AMQP 0-9-1模型的核心概念包括消息发布者(producers/publisher)、消息(messages)、交换机(exchanges)、

【Rust练习】12.枚举

练习题来自:https://practice-zh.course.rs/compound-types/enum.html 1 // 修复错误enum Number {Zero,One,Two,}enum Number1 {Zero = 0,One,Two,}// C语言风格的枚举定义enum Number2 {Zero = 0.0,One = 1.0,Two = 2.0,}fn m

MySql 事务练习

事务(transaction) -- 事务 transaction-- 事务是一组操作的集合,是一个不可分割的工作单位,事务会将所有的操作作为一个整体一起向系统提交或撤销请求-- 事务的操作要么同时成功,要么同时失败-- MySql的事务默认是自动提交的,当执行一个DML语句,MySql会立即自动隐式提交事务-- 常见案例:银行转账-- 逻辑:A给B转账1000:1.查询

html css jquery选项卡 代码练习小项目

在学习 html 和 css jquery 结合使用的时候 做好是能尝试做一些简单的小功能,来提高自己的 逻辑能力,熟悉代码的编写语法 下面分享一段代码 使用html css jquery选项卡 代码练习 <div class="box"><dl class="tab"><dd class="active">手机</dd><dd>家电</dd><dd>服装</dd><dd>数码</dd><dd