STM32寄存器点亮LED灯

news2024/9/9 1:39:53

一: 如何寄存器点灯

1:看单片机的原理图 找到LED灯

 这个灯是 PB5引脚

看原理图可以看出 让GPIOB5输出低电平 就能点亮
那么我们得让
打开控制GPIOB5的时钟
让GPIOB5 输出模式
让GPIOB5低电平

二:看中文参考手册配置寄存器

2.1:打开管 GPIOB5的时钟

时钟就相当于一个阀门开关,或者理解成水龙头,你打开了 才有水出来,也就是你打开才能工作。

看中文参考手册 系统架构 找到你的GPIOB 看看是谁管的。

 找到时钟的起始地址 也称为 基地址

 由于是APB2管 我们也要找到 APB2外设时钟使能寄存器的偏移地址

 要打开GPIOB5的时钟

时钟起始地址 + APB2外设时钟使能寄存器的偏移地址 = 控制GPIOB5的时钟的寄存器地址
0x4002 1000 + 0x18 = 0x4002 1018

如何打开呢 再中文参考手册继续参考

 

在位3 中 1 为打开端口C时钟
那么我们就是 不改变其他位的情况下 用或 运算即可。

//打开时钟
*(unsigned int *)0x40021018 |= 0x01 << 3;    //(左移四位)

2.2:配置GPIOB5 为输出模式

1.找到GPIOB 的起始地址 (基地址)

 GPIOB 的起始地址:0X4001 0C00

2.找到端口配置高寄存器偏移地址:

偏移地址:0x04

 0X4001 0C00 + 0x00 = 0x4001 0C00

设置成推挽输出 以及 输出模式 设置最大为10MHz:

//设置端口为输出模式,速率为10MHz,推挽输出模式    PB5
*(unsigned int*)0x40010C00 |= 0x01<<20;   //左移20位

2.3:让GPIOB5引脚输出低电平

1.找到端口输出数据寄存器

偏移值:0x0c
在不影响其他位数据时,我们想让第5位输出低电平

//设置GPIOB5低电平 
*(unsigned int*)0x40010C0C  &= ~(1<<5);    //左移5位,输出0,led灯亮

 

完整代码:

#include "stm32f10x.h"                  // Device header


int main()
{
     //使能GPIOB时钟
    *(unsigned int*)0x40021018 |= (1<<3);  //左移3位   
     //使能GPIOE时钟
    *(unsigned int*)0x40021018 |= (1<<6);    //左移6位
    
    
    //设置端口为输出模式,速率为10MHz,推挽输出模式    PB5
    *(unsigned int*)0x40010C00 |= 0x01<<20;   //左移20位
    
     //设置GPIOB5低电平 
    *(unsigned int*)0x40010C0C  &= ~(1<<5);    //左移5位,输出0,led灯亮
    
    //设置GPIOB5高电平
   // *(unsigned int*)0x40010C0C  |= (1<<5);    //左移5位,输出0,led灯灭
    
     //设置端口为输出模式,速率为2MHz,推挽输出模式    PE5
    *(unsigned int*)0x40011800  |= (0x02<<20);
    
     //设置GPIOE5低电平 
     *(unsigned int*)0x4001180C  &= ~(1<<5);    左移5位,输出0,led灯亮
    
    
}


//为了编译不报错
void SystemInit()
{


}

 

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

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

相关文章

python与深度学习——基础环境搭建

一、安装jupyter notebook Jupyter Notebook是一个开源的交互式笔记本环境&#xff0c;可以用于编写和执行代码、创建可视化效果、展示数据分析结果等。我们在这里用它实现代码运行和观察运行结果。安装jupyter notebook实质上是安装Anaconda,后续还要在Anaconda Prompt中使用c…

AI视频智慧安监平台EasyCVR每次重启服务短时间播放后又无法播放,是什么原因?

EasyCVR视频融合平台基于云边端智能协同架构&#xff0c;具有强大的设备接入、视频汇聚管理、全网分发、按需调阅、鉴权播放、智能分析等视频能力与服务。平台开放度高、兼容性强、可支持灵活拓展与第三方集成。 有用户反馈&#xff0c;EasyCVR每次重启服务后&#xff0c;可以短…

操作系统11:虚拟存储器

目录 1、虚拟存储器概述 &#xff08;1&#xff09;常规存储管理方式的特征和局部性原理 1.1 - 常规存储器管理方式的特征 1.2 - 局部性原理 1.3 - 虚拟存储器的基本工作情况 &#xff08;2&#xff09;虚拟存储器的定义和特征 2.1 - 虚拟存储器的定义 2.2 - 虚拟存储器…

【缓存中间件】Redis哈希槽的概念

数据分布理论 分布式数据库首先要解决把整个数据集按照分区规则映射到多个节点的问题&#xff0c;即把数据集划分到多个节点上&#xff0c;每个节点负责整体数据的一个子集。。 需要重点关注的是数据分区规则。常见的分区规则有哈希分区和顺序分区两种&#xff0c;哈希分区离散…

项目集成支付宝报错:调试错误,请回到请求来源地,重新发起请求。 错误代码invalid-app-id错误原因:无效的ApplD参数

问题 项目集成支付宝报错&#xff1a;调试错误&#xff0c;请回到请求来源地&#xff0c;重新发起请求。 错误代码invalid-app-id错误原因:无效的ApplD参数 详细问题 笔者按照支付宝沙箱支付快速集成版进行操作&#xff0c;操作完成访问所集成的支付宝&#xff0c;页面如下 …

微信小程序做登录密码显示隐藏效果

wxml 注意&#xff1a;在html中的input是通过切换type的属性值来实现隐藏显示的 在微信小程序的input里面type没有password属性 是通过password属性的true或者false来设置是否为密码框 <view class"input-item"><text class"tit">密码</…

怎么学习PHP表单处理与验证? - 易智编译EaseEditing

要学习PHP表单处理与验证&#xff0c;可以按照以下步骤进行&#xff1a; 掌握PHP基础知识&#xff1a; 在学习PHP表单处理与验证之前&#xff0c;首先需要对PHP编程语言有基本的了解。学习PHP的语法、变量、数据类型、数组、函数等基础知识是必要的。 学习HTML表单&#xff1…

如何确定活动隔断整体色调

确定活动的整体色调可以通过以下几个步骤&#xff1a; 1. 确定主题或目标&#xff1a;首先要明确活动的主题或目标&#xff0c;这将有助于确定活动需要传达的情感或氛围。 2. 考虑活动类型&#xff1a;根据活动的类型&#xff0c;例如婚礼、生日派对、企业活动等&#xff0c;可…

【代码随想录day4】两两交换链表中的节点

题目 给定一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后的链表。 你不能只是单纯的改变节点内部的值&#xff0c;而是需要实际的进行节点交换。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4] 输出&#xff1a;[2,1,4,3] 示例 2&#xff1a; …

高级搜索算法学习笔记

0.前言 如有错误&#xff0c;欢迎各位大佬指出。 前置芝士&#xff1a; 深度优先搜索 广度优先搜索 1.何为高级搜索&#xff1f; 在通常情况下&#xff0c;普通的深搜往往会超时&#xff0c;即使剪枝也无动于衷。对于广搜&#xff0c;我们一旦超时也很难进行优化。 而这…

jenkins+jmeter参数化并发数和循环次数

最近在整合项目的常规性能测试方案&#xff0c;从Metersphere切换回jenkinsjmeter&#xff0c;命令行执行jmeter命令时考虑参数化循环数和并发数&#xff0c;于是总结了一下两种方法&#xff1a; 1、配置文件传参 把并发数和循环次数作为两个参数&#xff0c;通过使用配置元件…

spring-注解开发bean

注解开发bean 使用Component定义bean 在配置文件中通过组建扫描加载bean 3.也可以通过不要配置文件&#xff0c;定义类&#xff0c;使用Configuration&#xff0c;来代替配置文件 基于注解定义bean 1.component,大部分的bean都可以通过这个来定义 1.1Controller&#xf…

JavaScript 将对象数组按字母顺序排序

原文链接&#xff1a;JavaScript 将对象数组按字母顺序排序 这里给出三种解决方案&#xff1a; 1.if条件语句 sort() 2.localeCompare() sort() 3.Collator() sort() sort 用法 语法 array.sort(compareFunction)参数值 参数描述compareFunction可选。定义替代排序顺序…

01-vue的核心和传统开发的区别

前端行业历史发展 &#x1f355;&#x1f355;&#x1f355;最早的网页是没有数据库的&#xff0c;可以理解为在网络上一张 报纸&#xff0c;直到CGI技术的出现&#xff0c;运行一小段代码与数据库或文件 系统进行交互&#xff0c;如98年的 Google Asp,JSP的出现&#xff0…

vscode编写stm32代码

vscode编辑keil项目&#xff0c;无需复杂步骤 keil开发是挺难用的&#xff0c;vscode又是编辑神器&#xff0c;keil调试vscode编辑代码可以大幅度提高效率&#xff0c;因此可以借用vscode来编辑代码。 1安装c插件 安装c与extension pack插件 2配置c_cpp_properties.json文…

OSI参考模型通信处理例子【图解TCP/IP(笔记四)】

文章目录 OSI参考模型通信处理举例7层通信■ 应用层■ 表示层■ 会话层■ 传输层■ 网络层■ 数据链路层、物理层 OSI参考模型通信处理举例 下面举例说明7层网络模型的功能。假设使用主机&#xff08;这里所指的主机是指连接到网络上的计算机。按照OSI的惯例&#xff0c;进行通…

C++——this指针

1.什么是this指针&#xff1f; this指针是C中的一个特殊指针&#xff0c;它指向当前对象的地址。在类的成员函数中&#xff0c;this指针可以用来访问当前对象的成员变量和成员函数。this指针的作用是区分同名的成员变量和局部变量&#xff0c;以及在成员函数中访问其他成员函数…

C# PaddleOCR ch_PP-OCRv3 ch_PP-OCRv4测试

效果 未开启Onnx,V3 未开启Onnx,V4 开启Onnx,V3 开启Onnx,V4 项目 VS2022.net 4.8OpenCvSharp4 Sdcb.PaddleInference/2.5.0-preview.1 Sdcb.PaddleOCR/2.6.0.6-preview.1 代码 using OpenCvSharp; using Sdcb.PaddleInference; using Sdcb.PaddleOCR; using Sdcb.Paddle…

Spark—通过Java、Scala API实现WordCount案例的基本操作

实验原理 Spark的核心就是RDD&#xff0c;所有在RDD上的操作会被运行在Cluster上&#xff0c;Driver程序启动很多Workers&#xff0c;Workers在&#xff08;分布式&#xff09;文件系统中读取数据后转化为RDD&#xff08;弹性分布式数据集&#xff09;&#xff0c;然后对RDD在…

Centos7编译安装ffmpeg

1、准备工作&#xff0c;安装必要的环境 yum install autoconf automake bzip2 cmake freetype-devel gcc gcc-c git libtool make mercurial pkgconfig zlib-devel 2、创建目录 ffmpeg_sources 目录是下载软件包的目录 ffmpeg 目录是安装目录 mkdir /usr/local/ffmpeg_sour…