STM32基本IO的寄存器介绍

2023-11-14

说明

最近自己在学习STM32,跟着原子哥的STM32教学视频学习,参考的资料有来自原子哥的,以后的博客都是自己对这段时间学习到的内容的总结,麻烦以后要是有出错的请指出来。

简介

—— 51 32
IO 可直接配置操作 需要配置相关寄存器来操作

STM32 的每个 IO 端口都有 7 个寄存器来控制。他们分别是:配置模式的:

2 个 32 位的端口配置寄存器 CRL 和 CRH
2 个 32 位的数据寄存器 IDR 和 ODR
1 个 32 位的置位/复位寄存器BSRR
1个 16 位的复位寄存器 BRR
1 个 32 位的锁存寄存器 LCKR

端口配置低寄存器(32位)

在这里插入图片描述
在这里插入图片描述
1、这两个寄存器的功能相似,一个是配置低8位IO口的CRL,另一个是配置高8位IO口的CRH
2、MODEy:配置IO的输出速度
3、CNFy: 配置IO的输出模式

//在固件库开发中,操作寄存器 CRH 和 CRL 来配置 IO 口的模式和速度是通过 GPIO 初始化函数完成:
	void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);
//通过初始化结构体初始化 GPIO 的常用格式是:
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;				//LED0-->PB.5 端口配置
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;        //推挽输出
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		//速度 50MHz
	GPIO_Init(GPIOB, &GPIO_InitStructure);					//根据设定参数配置 GPIO	

数据寄存器(32位)

在这里插入图片描述

1、读取某个IO口的电平
2、低16位分别代表一组中的16个不同的IO口

//在固件库中操作 IDR 寄存器读取 IO 端口数据是通过 GPIO_ReadInputDataBit 函数实现的:
  uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
//比如我要读 GPIOA.5 的电平状态,那么方法是:
  GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_5);

在这里插入图片描述

1、该寄存器为可读写
2、低16位分别代表一组中的16个不同的IO口
3、一次性一个 GPIO 的多个端口设值

在固件库中设置 ODR 寄存器的值来控制 IO 口的输出状态是通过函数 GPIO_Write 来实现
的:
	void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);
该函数一般用来往一次性一个 GPIO 的多个端口设值。

置位/复位寄存器(32位)

在这里插入图片描述

//例如你要设置 GPIOA 的第 1 个端口值为 1,那么你只需要往寄存器 BSRR 的低 16 位对应位写 1 即可:
	GPIOA->BSRR=1<<1;
//如果你要设置 GPIOA 的第 1 个端口值为 0,你只需要往寄存器高 16 位对应为写 1 即可:
	GPIOA->BSRR=1<<(16+1)

还有一个寄存器BRR寄存器,是端口位清除寄存器。该寄存器的作用跟 BSRR 的高 16 位相似

//在 STM32 固件库中,通过 BSRR 和 BRR 寄存器设置 GPIO 端口输出是通过函数GPIO_SetBits()和函数 GPIO_ResetBits()来完成的。
	void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
	void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
//在多数情况下,我们都是采用这两个函数来设置 GPIO 端口的输入和输出状态。比如我们要设置 GPIOB.5 输出 1,那么方法为:
	GPIO_SetBits(GPIOB, GPIO_Pin_5);
//反之如果要设置 GPIOB.5 输出位 0,方法为:
	GPIO_ResetBits (GPIOB, GPIO_Pin_5);

复位寄存器(16位)

以后补充

锁存寄存器(32位)

以后补充
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32基本IO的寄存器介绍 的相关文章

随机推荐

  • 由于请求头 content-type为application/json导致请求出错

    preface 最近在写 react 项目 然后调用后台接口的时候总是报错 我本以为是后台接口的问题 后来后台说 请求体 不能为 null 然后就简单做了总结 请求头 content type 一般使用的两种格式 application j
  • 对象存储哪家价格便宜?最便宜的云存储推荐!

    我们知道 对象存储是一种云存储服务 不同的云存储 价格也是有所不同的 而对象存储的价格取决于选择的存储容量和服务商 不同的存储容量 价格也是不同的 容量越大 价格也是越贵 不同的服务商 对象存储的价格也是有差异的 那么 对象存储哪家价格便宜
  • C语言获取鼠标位置并设置鼠标位置

    示例程序 include
  • 表单请求改为ajax,使用jq将form表单提交改为ajax提交

    大家可能都会有这样的经历 辛辛苦苦的敲了半天的form表单 然后被通知要改成ajax表单提交 于是就开始了一行一行的获取input的值 复制 粘贴的过程 要是碰上表单行数特别多的时候更麻烦 下面介绍一种方法 用最少的代码量完成form表单提
  • 5G MEC边缘云组网方案与业务案例分析

    1 MEC概念 MEC边缘云 Multi Access Edge Cloud 是在靠近人 物或数据源头的网络边缘侧部署云资源池和云平台 它在5G时代将扮演重要的角色 MEC边缘云的优势在于 一方面它实现了在更靠近数据源所在的本地网内运算 尽
  • 27、HMAC

    HMAC产生背景 HMAC为什么会被提出来 是MAC的产生有什么缺陷么 HMAC规范的设计是由于存在对将密钥与hash函数相结合的更简单机制的攻击 换言之就是有些将密钥和hash函数结合使用产生MAC的算法容易被攻击 而这种生成消息认证码的
  • 2020最新蚂蚁金服三面+HR一面,面试经验总结及分享

    蚂蚁金服Java岗二面 从项目入手 说说自己参与的项目 技术难度在哪里 Collections sort底层排序方式 排序稳定性 具体场景的排序策略 Http请求过程 DNS解析过程 三次握手四次挥手 简述线程池和并发工具的使用 数据库索引
  • Unitils-使用实践

    简介 Unitils这个Java开源类包的目的是让单元测试变得更加容易和可维护 Unitils构建在DBUnit与EasyMock项目之上并与JUnit和TestNG相结合 支持数据库测试 支持利用mock对象进行测试并提供与Spring和
  • Django后端笔记(二)模型M

    Django后端笔记 模型M Django ORM Django 数据库配置 mysql命令回顾 Django配置使用mysql数据库 切换mysql数据库之后不能启动服务器 复习案例 字段属性和选项 模型属性命名限制 字段类型 选项 查询
  • 换脸方法之FSGAN

    论文 FSGAN Subject Agnostic Face Swapping and Reenactment 官网 https nirkin com fsgan Github https github com YuvalNirkin fs
  • Delphi没落了?!delphi为什么没人用了?!delphi还有人学吗?!告诉你一个事实:现在全世界有300万程序员每天在用Delphi开发各种软件APP应用!

    德克萨斯州奥斯汀 美国商业资讯 跨平台应用程序开发人员生产力工具提供商Embarcadero Technologies Idera Inc 的一个部门 今天发布了RAD Studio 10 3 这个最新版本使开发人员能够使用相同的本机代码库
  • 《MATLAB 神经网络43个案例分析》:第18章 基于SVM的图像分割-真彩色图像分割

    MATLAB 神经网络43个案例分析 第18章 基于SVM的图像分割 真彩色图像分割 1 前言 2 MATLAB 仿真示例 3 小结 1 前言 MATLAB 神经网络43个案例分析 是MATLAB技术论坛 www matlabsky com
  • redis工具类

    redis工具类 很多公司都将redisTemplate进行了封装 封装成业务所需要的RedisUtil工具类方便进行调用 本篇文章总结了redisTemplate常用的一些方法 Redis常用的数据类型 String Hash List
  • ubuntu php v8js,Ubuntu16安装配置LNMP(7.1)环境并安装v8js拓展

    在服务器上安装 Git sudo apt get install git 配置环境 一 安装 PHP 7 1 ppa 方式安装 php7 1 sudo apt get install software properties common 添
  • SpringSecurity------HttpSecurityConfiguration配置类

    SpringSecurity HttpSecurityConfiguration配置类 一 HttpSecurityConfiguration是怎样被加载的 二 HttpSecurityConfiguration主要做了什么 三 HttpS
  • av_register_all和avformat_alloc_context

    av register all 被声明为已否决其实就是av register all 这个方法在FFMPEG 4 0以后将不再推荐使用 而且是非必需的 因此直接注释掉即可 avformat alloc context 用来申请AVForma
  • 后台网页设计

    后台网页设计 陈子龙 2019 5 17 这是一张我自己设计的后台网站的首页图片 我的这张后台网站图中的文字亲密性有点高 板块之间的距离间距都是相差不多的 视觉上给人的感觉也不是很高 在这里插入图片描述 这个logo放的有点大 我的一个交互
  • 内储管理技术——连续分配方式

    早期的操作系统 只支持单进程 为了实现简单 在执行程序之前 操作系统必须将待执行的程序全部装入内存 这就是简单存储管理技术 现代操作系统 支持多进程并发执行 允许进程装入部分程序即可以开始执行 其余部分保留在磁盘上 当执行所需的部分不在内存
  • Android 横向滚动列表 (类似横向ListView)

    示例 布局代码 xml
  • STM32基本IO的寄存器介绍

    STM32基本IO的寄存器介绍 说明 简介 端口配置低寄存器 32位 数据寄存器 32位 置位 复位寄存器 32位 复位寄存器 16位 锁存寄存器 32位 说明 最近自己在学习STM32 跟着原子哥的STM32教学视频学习 参考的资料有来自