STM32寄存器点亮跑马灯

news2024/9/20 14:53:06

硬件状况

DS0灯接线方式

链路:3.3V --- DS0 --- LED0 --- PB5 | --- CPU  
分析:
    PB5, 为高电平, 那么DS0灯 熄灭 
    PB5, 为低电平, 那么DS0灯 亮

PB5的配置

配置PB5引脚为输出模式, 输出高电平(灭), 输出低电平(亮),配置为推挽输出 
PB5 - GPIOB组控制器对应的第5个引脚,CPU核访问GPIOB控制器内部的寄存器

寻找GPIOB控制器内部的寄存器

寻找寄存器

GPIOx_CRL  
        GPIOA_CRL
        GPIOB_CRL
        GPIOC_CRL
        GPIOD_CRL
        ...
GPIO每一组的控制器都会有一个CRL寄存器

寄存器地址 = 控制器首地址 + 寄存器偏移量 
        控制器首地址 = GPIOB_BASE
        寄存器偏移量 = 寄存器说明

总线

st公司将控制器分成3堆,每堆称为一条总线,一共有三条总线

使用的PB5属于GPIO,在APB2这根总线中

//三根总线地址
#define PERIPH_BASE      ((unsigned int)0x40000000)//所有控制器的基地址
#define APB1PERIPH_BASE  PERIPH_BASE               //APB1总线外设的基地址
#define APB2PERIPH_BASE  (PERIPH_BASE + 0x10000)   //APB2总线外设的基地址
#define AHBPERIPH_BASE   (PERIPH_BASE + 0x20000)   //AHB总线外设的基地址


#define GPIOA_BASE (APB2PERIPH_BASE + 0x0800)      //GPIOA控制器基地址
#define GPIOB_BASE (APB2PERIPH_BASE + 0x0C00)      //GPIOB控制器基地址

PB的寄存器位置-GPIOB_CRL

#define GPIOB_CRL   (*(unsigned int *)(GPIOB_BASE +0x00))
#define GPIOB_CRH   (*(unsigned int *)(GPIOB_BASE +0x04))
#define GPIOB_ODR   (*(unsigned int *)(GPIOB_BASE +0x0C))

例如:
    GPIOB_CRL 
        GPIOB_BASE + CRL寄存器的偏移量 = GPIOB_BASE + 0X00 
            拿到了GPIOB_CRL的首地址  
    
    GPIOE_CRL 
        首地址 = GPIOE_BASE + 0X00 


    GPIOB_CRL
        首地址 = GPIOB_BASE + 0X00 
        MODE5[1:0] - 描述GPIOB5的模式 
            [21:20] = 11 配置PB5为输出模式, 最大速度50MHz
        CNF5[1:0] - 确定了输入/输出模式, 具体模式选择 
            [23:22] = 00 推挽输出 

        配置PB5为推挽输出, 50MHz 

输出高低电平-GPIOB_ODR

    GPIOB_ODR
        首地址 = GPIOB_BASE + 0X0C
        ODR5 - GPIOB的第5个引脚 
            [5] = 0, PB5输出低电平, 亮
                 = 1, PB5输出高电平, 灭

GPIOB控制器的时钟-RCC_APB2ENR

RCC控制器位于AHB总线

#define PERIPH_BASE     ((unsigned int)0x40000000)
#define AHBPERIPH_BASE   (PERIPH_BASE + 0x20000)

#define RCC_BASE    (AHBPERIPH_BASE + 0x1000)

 单灯闪亮代码实现

#include "stm32f10x.h"

void delay(unsigned int i){
	while(i--);
}

// @brief SystemInit函数, 防止报错 
void  SystemInit(void)
{
	// ....
}

// @brief main函数, 入口函数 
int main(void){
	// DS0灯 
	// 1.打开GPIOB控制器的时钟 [3] = 1
	RCC_APB2ENR |= (1 << 3);

	
	// 2.配置GPIOB5为推挽输出, 50MHz
	// GPIOB_CRL [23:20] = 0011
	GPIOB_CRL &= ~(0XF << 20); // [23:20] = 0000
	GPIOB_CRL |= (3 << 20); // [21:20]=11  [23:20] = 0011
	
	
	while(1){
		// 开灯
		GPIOB_ODR &= ~(1 << 5); 
		// 延时 
		delay(0xfffff);
		// 关灯
		GPIOB_ODR |= (1 << 5); 
		// 延时 
		delay(0xfffff);
	}

跑马灯实现

接线

 需要将J10接到PE管脚上

接线如图:

 代码实现

// main.c

#include "stm32f10x.h"

void delay(unsigned int i){
	while(i--);
}

// @brief SystemInit函数, 防止报错 
void  SystemInit(void)
{
	// ....
}

// @brief main函数, 入口函数 
int main(void){
	// 跑马灯
	// 1.打开GPIOE控制器的时钟 [6] = 1
	RCC_APB2ENR |= (1 << 6);

	
	// 2.配置GPIOE为推挽输出, 50MHz
	// GPIOE_CRL = 0x33333333
	GPIOE_CRL &= ~(0xffffffff << 0);
	GPIOE_CRL |= (0x33333333 << 0);
	

	while(1){
		//从0到7依次循环
		for(int i = 0;i<8;i++){
			//开灯
			GPIOE_ODR &=~(1<<i);
			delay(0xf0ff);
			//关灯
			GPIOE_ODR |=(1<<i);
			delay(0xf0ff);
	}
}




效果展示

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

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

相关文章

前端开发攻略---图片裁剪上传的原理

目录 ​编辑 1、预览本地图片 2、图片裁剪交互 3、上传裁剪区域 1、预览本地图片 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initia…

面试必备:高频算法与面试题全面解析

干货分享&#xff0c;感谢您的阅读&#xff01; &#xff08;暂存篇---后续会删除&#xff0c;完整版和持续更新见高频面试题基本总结回顾&#xff08;含笔试高频算法整理&#xff09;&#xff09; 备注&#xff1a;引用请标注出处&#xff0c;同时存在的问题请在相关博客留言…

c++割圆法求圆周率

前言 上期的Python(加了turtle 所以带图片)割圆法点赞数量感人 但洛谷那期已经让我飞了 于是我准备掉点头发 以五升六之躯硬刚初三 这期请教了大量的高年级同学 把这个要用到九年级知识点的割圆法搞出来了 不要怕难 像我这样的xxs也能看懂 先声明 割圆法不一定要用循环 …

Open3D PCA法中特征值和特征向量中的关系及应用(原理详细版)

目录 一、概述 1.1定义 1.2特征值与特征向量的关系 1.3特征值和特征向量大小的关系 1.4在PCA法中的应用及实现步骤 二、特征值大小排序的意义 2.1排序的原因 2.2特征值大小及意义 2.3在PCA中的应用 2.4代码示例 三、特征值计算法向量 3.1评判标准 3.2原理 3…

虚拟人实时主持创意互动方案:赋能峰会论坛会议等活动科技互动感

随着增强现实、虚拟现实等技术的不断发展&#xff0c;“虚拟人实时主持”创意互动模式逐渐代替传统单一真人主持模式&#xff0c;虚拟主持人可以随时随地出现在不同活动现场&#xff0c;也可以同一时间在不同分会场中担任主持工作&#xff0c;在峰会、论坛、会议、晚会、发布会…

与LLMs进行在IDE中直接、无需提示的交互是工具构建者探索的一个有希望的未来方向

这个观点在卡内基梅隆大学与谷歌研究人员合作文章 《Using an LLM to Help With Code Understanding》 中提出。 论文地址&#xff1a;https://dl.acm.org/doi/abs/10.1145/3597503.3639187 摘要 理解代码非常具有挑战性&#xff0c;尤其是在新且复杂的开发环境中。代码注…

教程中对DTC(Data Transfer Object)的叙述有可改进之处

图 不 好&#xff0c;看 不 懂&#xff1b; 找 原 文&#xff0c;弄 清 楚。 翻 译 错&#xff0c;图 也 错&#xff1b; 改 几 字&#xff0c;加 一 图。 新 教 程&#xff0c;新 学 习&#xff1b; 新 体 验&#xff0c;从 未 有。

苹果(ios)私钥证书和profile文件申请教程

苹果&#xff08;ios&#xff09;私钥证书&#xff0c;可以理解为p12后缀的苹果证书&#xff0c;我们在苹果开发者中心可以生成cer格式的证书&#xff0c;然后使用mac电脑或者第三方转换成p12后缀格式的私钥证书。 证书profile文件&#xff0c;又叫描述文件&#xff0c;这个文…

无人机的电压和放电速率,你知道吗?

一、无人机电压 无人机电瓶多采用锂电池&#xff0c;其电压范围在3.7伏至44.4伏之间&#xff0c;具体取决于电池的单体电压和串联的电池节数。 单体电压&#xff1a;锂电池的单体电压通常为3.7V&#xff0c;但在满电状态下可能达到4.2V。 串联电池节数&#xff1a;无人机电瓶…

xxl-job定时任务同步点赞数据 + 内网穿透

1.xxl-job基本介绍 1.官方文档 https://www.xuxueli.com/xxl-job/ 2.gitee https://gitee.com/xuxueli0323/xxl-job 2.本地集成xxl-job 1.下载源码包 https://gitee.com/xuxueli0323/xxl-job/tree/6effc8b98f0fd5b5af3a7b6a8995bdcf30de69fc/ 2.导入到项目中 1.作为模…

【待修改】使用GraphRAG+LangChain+Ollama(LLaMa 3.1)知识图谱与向量数据库集成(Neo4j)

如何使用 LLama 3.1(一个本地运行的模型)来执行GraphRAG操作,总共就50号代码。 首先,什么是GraphRAG?GraphRAG是一种通过考虑实体和文档之间的关系来执行检索增强生成的方式,关键概念是节点和关系。 ▲ 知识图谱与向量数据库集成 知识图谱与向量数据库集成是GraphRAG 架…

121 买卖股票的最佳时机

解题思路&#xff1a; \qquad 这个题如果把每一种买卖的可能都算出来的解法时间复杂度在 O ( n 2 ) O(n^2) O(n2)&#xff0c;提交后会超时&#xff0c;所以需要在此基础上进行优化&#xff0c;能否通过一次遍历找出最大利润。 \qquad 对于当前点i&#xff0c;卖出股票所能得…

子域名下部署Java项目到docker中

场景&#xff1a;子域名需要部署Java项目&#xff0c;用于分公司的项目&#xff0c;可支持自定义功能。 拷贝总公司的后台代码 新增数据库并且修改配置环境的数据库连接 启动项目没问题后进行打包 目前我的是打成 jar包 服务器上创建文件&#xff0c;并且创建 dockerfile 文…

springboot整合activity7(一)

一、Spring Boot 集成 Activiti7&#xff08;工作流&#xff09; 此章节首先完成后端的activiti整合&#xff0c;生成工作流所需数据库表&#xff0c;数据库采用mysql。 二、依赖 <dependencies><!-- 引入Activiti7 --><dependency><groupId>org.ac…

080:vue+mapbox中interpolate 的详细解释

在Mapbox GL JS中,你可以使用样式表达式来实现数据驱动的样式,其中interpolate表达式是用于创建平滑过渡的一种方式。当你需要根据某个属性的值来动态地设置样式时,比如颜色、宽度或其他样式属性,interpolate表达式就非常有用。 文章目录 示例效果配置方式示例源代码(共14…

Manim的一个用于数学动画的 Python 库中渲染代码的功能。

Code 函数是 Manim&#xff08;一个强大的数学动画库&#xff09;中的一个重要工具&#xff0c;旨在将代码片段以视觉化的方式呈现。在教育和演示场合中&#xff0c;向观众展示算法或代码逻辑时&#xff0c;清晰的视觉效果是必不可少的。通过 Code 函数&#xff0c;用户可以轻松…

KOLA: CAREFULLY BENCHMARKING WORLD KNOWLEDGE OF LARGE LANGUAGE MODELS

文章目录 题目摘要简介KOLA 基准实验评估结论和未来工作道德声明 题目 KOLA&#xff1a;仔细对大型语言模型的世界知识进行基准测试 论文地址:https://arxiv.org/abs/2306.09296 项目地址:https://github.com/ranahaani/GNews 摘要 大型语言模型 (LLM) 的卓越性能要求评估方法…

【种草官招募令】

&#x1f31f; 你是时尚达人吗&#xff1f; 对潮流服饰有着独到的见解&#xff1f; 想通过分享赢得关注&#xff0c;还能赚取丰厚报酬&#xff1f; 来加入我们的电商种草官行列吧&#xff01; &#x1f457; 我们致力于发现和培养更多热爱时尚、善于种草的你&#xff0c;将…

Imagination CPU系列研讨会|RISC-V平台的性能分析和调试

为了让开发者及工程师深入了解 Imagination 的 CPU 产品及相关解决方案&#xff0c;Imagination 将陆续推出 5 期线上研讨会&#xff0c;包含 RISC-V 平台的性能分析和调试&#xff1b;RISC-V 安全和全球平台可信执行环境&#xff08;TEE&#xff09;&#xff1b;RISC-V 软件生…

人工智能缺陷检测方案METIS(梅迪斯):汽车零部件检测

#汽车零部件#机器视觉检测&#xff0c;作为当今科技领域的热门话题&#xff0c;正日益受到世人的瞩目。随着机器视觉系统的不断开发与优化&#xff0c;那些繁重而复杂的人工检测工作&#xff0c;已经逐渐被机器视觉检测所替代。今天&#xff0c;我们就来深入探讨一下&#xff0…