STM32F103学习笔记 | 7.使用寄存器点亮LED灯

news2024/11/26 6:20:14

在这里插入图片描述

int main(void)

{

// 分析指南者硬件原理图得知要实现点亮灯泡需要将PB0设置为低电位,
// 查阅STM32F10x中文手册的端口配置低寄存器,得知一个PB有8个配置位,查阅手册找到了PB0的位置是3:2位置,
// 插入未知知识:将端口配置为通用推挽输出模式,但是手册上面显示要将端口配置为输出模式就需要设置MODE[1:0]>00,所以
// 就要设置MODE[1:0],插入未知知识:将MODE[1:0]设置成了01,
// 1. 配置PB0为通用推挽输出模式,首先找到PB的基地址,然后找到端口0的偏移量,最后为这个地址设置成通用推挽输出模式(00)
在存储器映像这里找到GPIO端口B的基地址是:0X4001 0C00

在这里插入图片描述
然后找到PB0端口的偏移地址是:0x00
在这里插入图片描述
所以PB0的地址是:0X4001 0C00 + 0x00 = 0X4001 0C00
注意:
(1) 在STM32F10x中文手册中为了更好的识别0X4001 0C00中有一个空格,但是在具体代码编写过程中就要删除这个空格,不然会报错
(2) 由于我们是要对地址赋值
在这里插入图片描述
错误示范:(编译器会将0X40010C00识别成有符号的十六进制数据)

// 01是MODE模式设置成了01
// 4*0中的4是因为PB一共有8个端口,一个端口包括:CNFy[1:0]和MODEy[1:0]。
// CNFy[1:0]和MODEy[1:0]都占两个二进制位,所以一共是4位。
// 而且每一个端口的CNFy[1:0]和MODEy[1:0]都是紧挨在一起的,所以移动时是移动4的倍数位。
0X40010C00 |= ((01) << (4*0)) 

正确示范:

// 01是MODE模式设置成了01
// 4*0中的4是因为PB一共有8个端口,一个端口包括:CNFy[1:0]和MODEy[1:0]。
// CNFy[1:0]和MODEy[1:0]都占两个二进制位,所以一共是4位。
// 而且每一个端口的CNFy[1:0]和MODEy[1:0]都是紧挨在一起的,所以移动时是移动4的倍数位。
*( unsigned int * )0X40010C00 |= ((01) << (4*0)) 

将PB0的CNFy[1:0]配置为通用推挽输出模式
查阅STM32F10x中文手册可知:
在这里插入图片描述

二、 配置PB0端口输出低电平

  1. 端口输出数据寄存器(GPIOx_ODR) (x=A…E) 控制着使用寄存器控制端口输出电平的高低。所以需要在STM32F10x中文手册去找到端口输出数据寄存器(GPIOx_ODR) (x=A…E) 。
    在这里插入图片描述

  2. 找到PB的基地址:0X4001 0C00
    在这里插入图片描述

  3. 找到端口输出数据寄存器(GPIOx_ODR) (x=A…E)的偏移地址:0Ch
    (注意:h表示十六进制)
    我们需要将PB0设置成低电平,为啥找的是端口输出数据寄存器(GPIOx_ODR) (x=A…E),而不是其他寄存器?
    在这里插入图片描述

  4. 找到ODR0所在的位置。ODR0在第一个位置,所以设置将ODR0为配置成电平就是:0x0
    (注意:为啥是ODR0,而不是ODR12、ODR10等其他位置呢?)
    在这里插入图片描述

  5. 将PB0配置成低电平的代码编写:

*(unsiged int *0x40010C00 |= ( (1) <<  (4*0) );

三、 开启PB端口时钟
6. 为了降低能耗,在复位的状态下(没有使用的状态下),外设的时钟处于关闭的状态,所以在使用时,需要开启所需要的外设时钟,PB的时钟是“复位和时钟控制(RCC)”控制着,所以我们需要去“复位和时钟控制(RCC)”中去开启PB的时钟。
在这里插入图片描述
2. 由于外设PB挂载在APB2总线上,所以需要找到“APB2 外设时钟使能寄存器(RCC_APB2ENR)”
(注意:日常用语中开启时钟,学术书本上称作使能时钟)
在这里插入图片描述
在这里插入图片描述
7. 找到PB处在“APB2 外设时钟使能寄存器(RCC_APB2ENR)”的使能位
在这里插入图片描述
8. 将PB端口时钟开启,即将位3配置为1。
在这里插入图片描

在这里插入图片描述

  1. 开启PB端口时钟代码编写

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

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

相关文章

电脑文件批量重命名不求人:快速操作,高效技巧让你轻松搞定

在数字化时代&#xff0c;电脑文件的管理与整理显得尤为重要。当面对大量需要重命名的文件时&#xff0c;一个个手动修改不仅耗时&#xff0c;还容易出错。那么&#xff0c;有没有一种方法可以快速、高效地完成这一任务呢&#xff1f;答案是肯定的&#xff0c;下面就来介绍几种…

delphi6直连redis服务(用lua脚本redis模块)

一、创建一个exe程序 创建一个exe程序,引用LuaRedis.pas单元(此单元自己封装的代码,目前主要封装了获取key和设置key/value功能),代码如下: unit Unit1;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls;type…

gitee分支代码推送失败>> error: failed to push some refs to ‘https://gitee.com/xxx/xxx.git‘

错误 将代码推送到gitee时候出现下面的报错&#xff0c;终端输出 remote: Powered by GITEE.COM [GNK-6.4] remote: error: GE007: Your push would publish a private email address. remote: You can make your email public or disable this protection by visiting: remo…

自动驾驶主流芯片及平台架构(三)低算力平台

前面有提到&#xff0c;自动驾驶等级每增加一级&#xff0c;所需要的芯片算力就会呈现十数倍的上升&#xff0c;L2级自动驾驶的算力需求仅要求2-2.5TOPS&#xff0c;但是L3级自动驾驶算力需求就需要20-30TOPS,到L4级需要200TOPS以上&#xff0c;L5级别算力需求则超过2000TOPS。…

Rabbit延迟队列实现---插件实现

自行百度如何安装rabbitmq 点击链接下载rabbitmq插件找到rabbitmq_delayed_message_exchange&#xff0c;点击Releases 找到自己mq版本对应下载 移动到rabbitmq目录下plugins 执行命令rabbitmq-plugins.bat enable rabbitmq_delayed_message_exchange安装插件 此时就会出现x-d…

【mysql】mysql单表查询、多表查询、分组查询、子查询等案例详细解析

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

红帽发布Red Hat Enterprise Linux AI(RHEL AI)

红帽 2024 峰会正在科罗拉多州丹佛市举行…鉴于当前的时代背景&#xff0c;人工智能&#xff08;AI&#xff09;在此次峰会上占据了重要位置&#xff0c;因此红帽公司&#xff08;Red Hat&#xff09;也不甘人后宣布推出 RHEL AI。 红帽公司今天发布了 Red Hat Enterprise Lin…

Pytorch入门—Tensors张量的学习

Tensors张量的学习 张量是一种特殊的数据结构&#xff0c;与数组和矩阵非常相似。在PyTorch中&#xff0c;我们使用张量来编码模型的输入和输出&#xff0c;以及模型的参数。 张量类似于NumPy的ndarrays&#xff0c;只是张量可以在GPU或其他硬件加速器上运行。事实上&#xf…

QT7_视频知识点笔记_2_对话框,布局,按钮,控件(查看帮助文档找功能函数)

第二天&#xff1a; 对话框&#xff0c;布局&#xff0c;按钮 QMainWindow&#xff1a;菜单下拉框添加之后可通过ui->actionXXX&#xff08;自定义的选项名&#xff09;访问&#xff0c;用信号triggered发出信号&#xff0c;槽函数可以使用lambda表达式进行 //菜单栏&am…

JavaEE概述 + Maven

文章目录 一、JavaEE 概述二、工具 --- Maven2.1 Maven功能 仓库 坐标2.2 Maven之项目构建2.3 Maven之依赖管理 三、插件 --- Maven Helper 一、JavaEE 概述 Java SE、JavaEE&#xff1a; Java SE&#xff1a;指Java标准版&#xff0c;适用于各行各业&#xff0c;主要是Java…

【Python】机器学习之Sklearn基础教程大纲

机器学习之Sklearn基础教程大纲 1. 引言 机器学习简介Scikit-learn&#xff08;Sklearn&#xff09;库介绍安装和配置Sklearn 2. 数据预处理 2.1 数据加载与查看 - 加载CSV、Excel等格式的数据- 查看数据的基本信息&#xff08;如形状、数据类型等&#xff09;2.2 数据清洗…

3套Matplotlib主题

分享3套Matplotlib主题&#xff0c;让图表更好看 seaborn默认主题 import seaborn as sns import pandas as pd import matplotlib as mpltips pd.read_csv(./sns_data/tips.csv)sns.relplot(datatips,x"消费金额 ($)",y"小费金额 ($)",hue"客人性…

风速变送器

风速变送器&#xff08;脉冲型&#xff09; 变送器转1圈&#xff0c;输出20个脉冲。 例如&#xff0c;当风速变送器1S转一圈时&#xff0c;此时变送器1S输出20个脉冲&#xff0c;代表风速为1.75m/S。

Mitmproxy 抓包工具安装使用

简介 Mitmproxy是一个使用python编写的中间人代理工具&#xff0c;跟Fiddle、Charles等等的抓包工具是差不多的&#xff0c;同样可以用于拦截、修改、保存http/https请求。比起Fiddle、Charles&#xff0c;mitmproxy有一个最大的特点是支持python自定义脚本。 安装 Win 官网…

Llama3-Tutorial之Llama3 Agent能力体验+微调(Lagent版)

Llama3-Tutorial之Llama3 Agent能力体验微调&#xff08;Lagent版&#xff09; 参考&#xff1a; https://github.com/SmartFlowAI/Llama3-Tutorial 1. 微调过程 使用XTuner在Agent-FLAN数据集上微调Llama3-8B-Instruct&#xff0c;以让 Llama3-8B-Instruct 模型获得智能体能力…

WinForm中防页面假死的loading提示

如果在WinForm中执行一个长时间操作时&#xff0c;窗体就会被锁死&#xff0c;直到操作完成&#xff0c;对于操作者的体验就是死锁状态&#xff0c;那在.NET&#xff08;.net 5以后&#xff09;中&#xff0c;怎么实现一个并发&#xff0c;等待&#xff0c;且同步操作信息窗口呢…

PLM系统推荐:产品全生命周期管理最佳解决方案

PLM系统推荐&#xff1a;产品全生命周期管理最佳解决方案 在当今日益竞争激烈的市场环境中&#xff0c;企业如何高效管理其产品设计、开发和生命周期变得尤为重要。产品生命周期管理&#xff08;PLM&#xff09;系统正是为解决这一难题而诞生的。本文将为您详细介绍几款值得推荐…

unreal engine5.3.2 Quixel bridge无法登陆

UE5系列文章目录 文章目录 UE5系列文章目录前言一、问题定位二、解决方法 前言 这几天unreal engine5.3.2 Quixel bridge无法登陆&#xff0c;输入epic 账号和密码&#xff0c;然后在输入epic发送的验证码&#xff0c;总是提示登录失败。就算是使用科学上网依然无法登录。而且…

【Linux进程间通信(五)】System V 信号量

&#xff08;一&#xff09;什么是信号量 互斥相关概念 1、并发&#xff1a; 2、互斥 3、临界资源&临界区 4、原子性 &#xff08;二&#xff09;信号量的理解 &#xff08;三&#xff09;信号量的两种基本操作 P / V &#xff08;四&#xff09;信号量的内核数据结…

列表、字典推导式介绍和用法|lambda的介绍和用法

列表、字典推导式介绍和用法|lambda的介绍和用法 列表推导式示例应用与传统写法代码行数直观比较 字典推导式示例应用 lambda示例应用 列表推导式、字典推导式、lambda使用简洁语法进行代码的编写 列表推导式 用于快速创建新的列表&#xff0c;通过对现有列表进行迭代和筛选。…