【梦回stm32】-寄存器篇-跑马灯代码研读-总结

news2024/11/16 20:50:46

前言:学就要学懂,别以为做出来就行,要弄懂通路,思路要清楚-谨记

 

1.先讲讲背景,此次需要研究的是stm32的跑马灯代码,下图是个本实验用的正点原子的代码目录

1)HARDWARE-》LED

2)SYSTEM-》delay/sys/usart

3)USER-》test.c

2.首先我们看下最简单的目录,LED模块,LED模块只有led.h和led.c文件

led.h

#ifndef __LED_H
#define __LED_H	 
#include "sys.h"

//LED端口定义
#define LED0 PAout(8)	// PA8
#define LED1 PDout(2)	// PD2	

void LED_Init(void);	//初始化		 				    
#endif

led.c

#include "sys.h"   
#include "led.h"

//初始化PA8和PD2为输出口.并使能这两个口的时钟		    
//LED IO初始化
void LED_Init(void)
{
	RCC->APB2ENR|=1<<2;    //使能PORTA时钟	   	 
	RCC->APB2ENR|=1<<5;    //使能PORTD时钟	   	 
	GPIOA->CRH&=0XFFFFFFF0; 
	GPIOA->CRH|=0X00000003;//PA8 推挽输出   	 
    GPIOA->ODR|=1<<8;      //PA8 输出高
											  
	GPIOD->CRL&=0XFFFFF0FF;
	GPIOD->CRL|=0X00000300;//PD.2推挽输出
	GPIOD->ODR|=1<<2;      //PD.2输出高 
}

 3.准备开始啦

我们先来看下led.h文件

#define LED0 PAout(8)

#define LED1 PDout(2)

这里定义了两个IO,一个是LED0和一个LED1,分别代表了PA8和PD2 GPIO端口,我们来看看它们是怎么定义的吧,我们跳转到sys.h文件中,可以看到

//IO口操作,只对单一的IO口!
//确保n的值小于16!
#define PAout(n)   BIT_ADDR(GPIOA_ODR_Addr,n)  //输出 
#define PAin(n)    BIT_ADDR(GPIOA_IDR_Addr,n)  //输入 

#define PDout(n)   BIT_ADDR(GPIOD_ODR_Addr,n)  //输出 
#define PDin(n)    BIT_ADDR(GPIOD_IDR_Addr,n)  //输入

那BIT_ADDR()又是怎么定义的?

#define BIT_ADDR(addr, bitnum)   MEM_ADDR(BITBAND(addr, bitnum)) 
| | |   // 那MEM_ADDR()和BITBAND()怎么定义的,往下看
V V V
#define MEM_ADDR(addr)  *((volatile unsigned long  *)(addr)) 
#define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x2000000+((addr &0xFFFFF)<<5)+(bitnum<<2))

可以看出它们都在sys.h中定义的

还有GPIOA_ODR_Addr和GPIOD_ODR_Addr是怎么定义的,当然,这个也是在sys.h中定义的

//IO口地址映射
#define GPIOA_ODR_Addr    (GPIOA_BASE+12) //0x4001080C
#define GPIOD_ODR_Addr    (GPIOD_BASE+12) //0x4001140C  

这样GPIO端口的地址就清晰了

我们来看看芯片数据手册里面的存储映像,看下stm32F103RCT6的

我们可以看到红框框里写的Port A ,其实就是GPIOA,左边是它的地址,可以看出这个地址和上面咱们看到的地址是接近的

#define GPIOA_ODR_Addr    (GPIOA_BASE+12) //0x4001080C

再接着看,那GPIOA_BASE是什么呢

#define GPIOA_BASE            (APB2PERIPH_BASE + 0x0800)

然后就是APB2PERIPH_BASE,这个就是APB2的基地址
/*!< Peripheral memory map */
#define APB1PERIPH_BASE       PERIPH_BASE
#define APB2PERIPH_BASE       (PERIPH_BASE + 0x10000)
#define AHBPERIPH_BASE        (PERIPH_BASE + 0x20000)
|  |  |  //PERIPH_BASE
V  V  V  
#define PERIPH_BASE           ((uint32_t)0x40000000) /*!< Peripheral base address in the alias region */


stm32f10x.h中定义

 所以GPIOA_BASE就是 0x40000000 + 0x10000 + 0x0800  ,也就是图中的地址

未完待续。。。

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

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

相关文章

【COMP282 LEC 1-2】

LEC 1 Introduction to c Header file : 1. 不用写 " .h " Function : 数据类型有string了&#xff0c;就像java&#xff0c;需要#include<string> Output system : Explain by example: std::cout << hello << " is of length "…

电脑IP地址查询,3个实用方法!

案例&#xff1a;电脑IP地址怎么查询 【请问有没有朋友知道电脑IP地址怎么查询呀&#xff1f;想看看我的IP地址却不知道该怎么查询&#xff0c;哪位友友可以帮帮我&#xff01;】 在互联网世界中&#xff0c;IP地址是一种用于标识设备&#xff08;如电脑、手机等&#xff09;…

在OLED上显示各种各样的数据(文字、字母、图片)

今天来说一说OLED&#xff0c;也同时记录一下成果。 在学习OLED之前需要知道IIC协议&#xff0c;不了解的可以看&#xff08;IIC协议相关_dxdlnu的博客-CSDN博客&#xff09; 什么是OLED? OLED_百度百科 (baidu.com) 一.OLED写入指令和数据 因为OLED是有写入指令/数据的操作…

camunda工作流引擎多租户架构

Camunda支持多租户的方式有两种&#xff1a;共享引擎和多引擎。 1、共享引擎 在共享引擎的模式下&#xff0c;多个租户共享同一个Camunda引擎。每个租户的数据被存储在引擎中的不同表中&#xff0c;而引擎的配置和部署是共享的。可以通过以下方式实现共享引擎&#xff1a; &…

OpenAI-ChatGPT最新官方接口《微调ChatGPT模型》全网最详细中英文实用指南和教程,助你零基础快速轻松掌握全新技术(四)(附源码)

微调ChatGPT模型 前言Introduction 导言What models can be fine-tuned? 哪些模型可以微调&#xff1f;Installation 安装Prepare training data 准备训练数据CLI data preparation tool CLI数据准备工具Create a fine-tuned model 创建微调模型Use a fine-tuned model 使用微…

​HTTP和TCP协议的队头阻塞​

队头阻塞&#xff08;Head-of-line blocking&#xff09;其实有两种&#xff0c;一种是 TCP 队头阻塞&#xff0c;另一种是 HTTP 队头阻塞&#xff0c;而这两者之前其实还存在一定的联系&#xff0c;毕竟 HTTP1/2 是建立在 TCP 协议之上的应用层协议&#xff0c;另外还有HTTP3对…

【LeetCode 图论 一】初探有向图Directed Graph

今天主要介绍DAG &#xff08;Directed acyclic graph&#xff09;&#xff0c;有向无环图。 无向图的问题相对有向图比较简单&#xff0c;比如岛屿问题&#xff0c;迷宫问题等。 在有向图中&#xff0c;我们通常只关注环是否存在&#xff0c;因为有向图中环的存在会让我们的…

HBuilderX的快捷键 和 常见配置

快捷键说明ctrl /添加注释&#xff08;js&#xff1a;// 注释、css&#xff1a;/* 注释 */、vue/nvue模板&#xff1a; <!-- 注释 -->&#xff09;Ctrl C 拷贝当前行或者所选代码块到剪切板Ctrl X剪切当前行或所选代码块到剪切板Ctrl V粘贴剪切板上的内容Ctrl D 删除…

浏览器实时查看日志系统-log.io

标题 前言操作步骤1. Install server via npm安装Nodejs2. Launch server3. Install file input via npm4. Configure file input前言 log.io 是一个实时日志监控工具,采用 node.js + socket.io 开发,使用浏览器访问,每秒可以处理超过5000条日志变动消息。有一点要指出来的…

叔可忍婶不可忍!马斯克3月呼吁暂停人工智能,4月却创立TruthGPT

2018年马斯克退出了OpenAI团队。 2022年11月&#xff0c;ChatGPT在北美大陆问世。 2023年3月21日&#xff0c;马斯克在未来生命&#xff0c;签署并呼吁&#xff0c;暂停高级人工智能的研发。 2023年4月18日马斯克创立了TruthGPT。 同时&#xff0c;亚马逊&#xff0c;也创立了B…

提桶跑路转行到软件测试,鬼知道我经历了什么?很庆幸转行成功...

说来惭愧&#xff0c;我的大学不是985也不是211&#xff0c;不过地质学科群一直排名国内前几&#xff0c;2017年也藉由地质学学科评上了“双一流”。咱们土木工程跟着沾沾光&#xff0c;也能和别人吹吹牛逼&#xff0c;所以毕业后的工作基本上在省内是不愁的。 但是我还是低估了…

“全自主、全流程、全覆盖”2023实景三维新技术研讨会广州站圆满举行!

4月12日&#xff0c;由中国测绘学会、中国地理信息产业协会指导&#xff0c;广州省测绘学会主办&#xff0c;武汉大势智慧科技有限公司承办的全自主、全流程、全覆盖”2023实景三维新技术研讨会广州站在广州珠江宾馆隆重举行。 本次会议广东省测绘学会、地图院、测绘院、市城市…

ChatGPT促进中国大语言模型发展,底层标注数据质量成关键,景联文科技提供专业数据采集标注服务

自开年以来&#xff0c;ChatGPT的热浪带来了一场全民的科技狂欢&#xff0c;同时打开了业内对NLP发展的想象空间&#xff0c;拉开了大语言模型产业和生成式AI产业飞速发展的序幕。 海外市场中OpenAI、微软、谷歌、Meta等巨头都在积极争抢布局ChatGPT&#xff0c;中国市场中百度…

NIFI大数据进阶_NIFI的模板和组的使用-介绍和实际操作_创建组_嵌套组_模板创建下载_导入---大数据之Nifi工作笔记0022

然后我们来看一下如何操作模板 首先我们准备好了一个模板,叫做CsvToJSON这样一个模板文件了 然后我们再来看左下角有个上传模板 可以选择这个模板上传上来,然后,就可以在右侧找到,菜单,找到template,点击,来查看模板了 然后添加组,就是顶部的那个两个圆圈的组件拖过来以后用来…

android compiled_local_resources\debug\out‘ is not a readable directory.

需要删除android目录下的.gradle文件。如下文件即可&#xff1a;

PyTorch实战1:实现mnist手写数字识别

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f366; 参考文章&#xff1a;365天深度学习训练营-第P1周&#xff1a;实现mnist手写数字识别&#x1f356; 原作者&#xff1a;K同学啊|接辅导、项目定制 目录 一、 前期准备1. 设置GPU2. 导入数…

EPICS Archiver Appliance在Debian11 容器下安装文档

PC安装虚拟化平台趟坑记录 上面proxmox在pc上安装好之后&#xff0c;相关的后台开始搭建&#xff0c;首先是AA数据存档服务。 EPICS Archiver Appliance在Debian11下安装文档 上面文档是晓康整理的&#xff0c;还一直没空完整的按流程做一遍&#xff0c;正好就着proxmox平台在…

【MySQL | 进阶篇】08、InnoDB 引擎架构、事务原理及 MVCC 讲解

目录 一、逻辑存储结构 二、架构 2.1 概述 2.2 内存结构 2.2.1 Buffer Pool 2.2.2 Change Buffer 2.2.3 Adaptive Hash Index 2.2.4 Log Buffer 2.3 磁盘结构 2.3.1 System Tablespace 2.3.2 File-Per-Table Tablespaces 2.3.3 General Tablespaces 2.3.4 Undo T…

Hbase1.3:Hbase基础架构、Hbase基础架构角色:Master、Region Server、Zookeeper、HDFS

Hbase1.3&#xff1a;Hbase基础架构、Hbase基础架构角色&#xff1a;Master、Region Server、Zookeeper、HDFS Hbase基础架构Hbase基础架构角色1&#xff09;Master2&#xff09;Region Server3&#xff09;Zookeeper4&#xff09;HDFS Hbase基础架构 Hbase架构里面&#xff0…

ubuntu18.04手动安装网卡驱动,重启系统后,驱动消失的解决方案

ubuntu18.04手动安装网卡驱动&#xff0c;重启系统后&#xff0c;驱动消失的解决方案 文章目录 ubuntu18.04手动安装网卡驱动&#xff0c;重启系统后&#xff0c;驱动消失的解决方案 1.问题描述2.问题分析3.解决方案&#xff08;使用 Netplan 配置网络&#xff09; 参考&#x…