尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
STM32-寄存器点灯案例详解
本文以PA1引脚点亮LED灯为案例解析了STM32寄存器操作的配置过程以及从手册查询方法和寄存器配置步骤。一、概念1.十六进制和二进制之间相互转换关系首先需要了解十六进制和二进制之间的基本转换方法。十六进制是一种基数为16的数制用数字0到9和字母A到F或a至f)表示。二进制则是基数为2的数制仅使用数字0和1表示。每一个十六进制的数字可以转换成一个四位的二进制数。如十六进制的1转换为二进制是0001,十六进制的A (或a)转换为二进制是1010对于0xFFFFFFF0来说可以拆分并转换为对应的二进制F 1111编00000因此0xFFFFFFF0的完整二进制表示是1111 1111 1111 1111 1111 1111 1111 0000二、步骤1.定位APB总线寄存器位置第一步 开启外设时钟使能寄存器当外设时钟没有启用时软件不能读写外设寄存器数值。返回值始终为0x00首先找寄存器映射表STM32第6章提供了储存器映像由此观察RCC的起始和终止地址分别为RCC_Start: 0x4002 1000RCC_End: 0x4002 1400接着看具体RCC中有关IO PortA寄存器偏置位由图可知APB2外设时钟使能寄存器的偏移地址为0x18;即如果你想设置RCC_APB2ENR这个寄存器你就必须先定位RCC地址(0x4002 100)偏移(0x18)#define RCC_APB2ENR *((volatile unsigned int *) (0x40021000 0x18))2.定位IO口端口配置寄存器位置这里我们使用IO口的A2作为例子查询寄存器映射可得PortA起始地址为0x4001 0800 终止地址为 0x4001 0C00同理配置IO端口配置寄存器首先要找到GPIO的偏移地址查表可得该寄存器的地址为GPIO_PortA 偏移0x00#define GPIOA_CRL (*((volatile unsigned int *) (0x40010800 0x00)))3.定位IO口引脚使能寄存器位置GPIO_PortA 偏移0x10#define GPIOA_BSRR (*((volatile unsigned int *) (0x40010800 0x10)))4.APB总线使能RCC_APB2ENR | 12; //RCC PortA 时钟启用5.IO口端口配置GPIOA_CRL 0xFFFFFF0F;//端口配置CNF1和MODE1清零 GPIOA_CRL | 0x00000030;//端口配置CNF1设定推挽输出MODE1设定输出模式最大速度50MHz 00116.引脚使能GPIOA_BSRR 11;//端口位设置SET/RESET ,即BS1设定为SET三、案例#include stm32f10x.h // Device header //定义三个寄存器 #define RCC_APB2ENR (*((volatile unsigned int *) (0x40021000 0x18)))//控制RCC_APB2总线 #define GPIOA_CRL (*((volatile unsigned int *) (0x40010800 0x00)))//GPIO_CRLGPIO_A端口配置低配置寄存器 #define GPIOA_BSRR (*((volatile unsigned int *) (0x40010800 0x10)))//GPIOA_BSRR(GPIO端口位设置/清除寄存器) int main(){ //对寄存器进行相应设定 RCC_APB2ENR | 12; //RCC PortA 时钟启用 GPIOA_CRL 0xFFFFFF0F;//端口配置CNF1和MODE1清零 GPIOA_CRL | 0x00000030;//端口配置CNF1设定推挽输出MODE1设定输出模式最大速度50MHz 0011 GPIOA_BSRR 11;//端口位设置SET/RESET ,即BS1设定为SET while(1){ }; return 0; }
RELATED

相关推荐

在PHP中如何进行网络编程?

在PHP中如何进行网络编程?

网络编程是一个让计算机之间能够互相通信的方法。在PHP中,我们可以使用“套接字”(Sockets)来进行网络编程。套接字就像是我们用来打电话的电话线,它允许不同的计算机之间发送和接收信息。下面是一个简单的PHP代码示例&#xff0c…

📅 2026/10/8 10:32:45
从扩散模型到AI设计平台:构建可控生成式AI应用的技术实践

从扩散模型到AI设计平台:构建可控生成式AI应用的技术实践

最近在AI设计工具领域,一个由字节跳动旗下剪映(CapCut)前负责人领衔打造的新团队OJO,引发了业界不小的关注。对于从事产品设计、UI/UX、内容创作以及AI应用开发的我们来说,这不仅是一个行业新闻,更是一个值…

📅 2026/9/24 10:27:46
金属垫片介绍

金属垫片介绍

金属垫片 垫片的种类多种多样,垫片是以金属、半金属和非金属板状材质,经过割,冲压或裁剪等工艺制成,用于管道之间的密封连接,机器设备的机件与机件之间的密封连接。 按材质可分为非金属、半金属和金属垫片三大类。 垫片作用是什么,为什么最好分正反安装? 如果说垫片…

📅 2026/9/25 10:06:57
MORE NEWS

更多资讯

📰

VirtualBox VMM源码深度解析:世界切换与寄存器上下文管理

1. 项目概述:从“看不见的CPU”说起 你有没有试过在一台Windows电脑上,同时开着Linux终端、macOS图形界面和一个FreeBSD服务器?它们互不干扰,各自运行着自己的内核、驱动和进程,仿佛真的有三台物理机器插在同一张办公桌…

📰

MSCNN多尺度卷积网络实战:人群密度估计从原理到落地

1. 从一张拥挤的地铁站照片说起:为什么需要多尺度卷积网络第一次接触人群密度估计这个方向,是因为一个做安防监控的朋友吐槽:他们部署的传统检测模型,在广场、地铁站这种人挤人的场景里几乎废掉——人一多,互相遮挡&am…

📰

UML试题大集合:用例图与顺序图关系判断与画图避坑指南

简介:面向UML课程复习与考试准备的试题大集合,以用例图、顺序图、协作图等交互图为核心,同时覆盖高内聚度、对象可见性、领域模型、统一过程等高频考点,适合软件工程及相关专业学生、考研备考者和自学者对照查漏补缺。资源以doc格…

📰

RucBase C++数据库源码实战:B+树并发与缓冲池解析

简介:这份资源是面向计算机专业学生与数据库系统实现学习者的RucBase关系数据库管理系统C源码工程,参考CMU15445的BusTub与Stanford CS346的Redbase设计,适合作为《数据库系统实现》课程实验框架,帮助理解并动手实现数据库核心模块…

📰

std::format自定义格式化器:formatter特化与实战指南

说真的&#xff0c;我第一次在代码里用上 std::format 的时候&#xff0c;脑子里冒出来的想法不是“语法真漂亮”&#xff0c;而是“早该有了”。printf 的年代我还没怎么受折磨&#xff0c;倒是 operator<< 那套流式格式化陪了我好多年。直到我真正想给一个自定义的业务…

📰

COMSOL仿真波导BIC现象:原理与建模实践

1. 波导BIC现象初探&#xff1a;当电磁波遇见拓扑缺陷在电磁学领域&#xff0c;Bound states in the continuum&#xff08;连续谱中的束缚态&#xff0c;简称BIC&#xff09;堪称一种反直觉的物理现象。想象一下&#xff1a;一束光被完美地囚禁在波导结构中&#xff0c;即使周…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬