STM32从设置IO输入上下拉到寄存器GPIOx_BSRR、GPIOx_BRR
目录
- 1. 问题概述
- 2. 标准库中查找
- 3. GPIOx_BSRR和GPIOx_BRR
- 端口位配置表
1. 问题概述
因为一些原因使用寄存器方式进行开发,设置IO状态时发现:
表格中10表示上拉/下拉输入模式,到底是上拉还是下拉呢?以往使用库方式开发没有关系过这个问题,现在使用寄存器方式开发,到底该如何设置上下拉?
表格中提到请参考表17端口位配置表
,不过也可以先去标准库看一看,对照查看加深理解。
2. 标准库中查找
首先想到去标准库中对照看下是如何配置的。标准库中通过枚举定义出支持的IO模式:
/** * @brief Configuration Mode enumeration */typedef enum
{ GPIO_Mode_AIN = 0x0,GPIO_Mode_IN_FLOATING = 0x04,GPIO_Mode_IPD = 0x28,GPIO_Mode_IPU = 0x48,GPIO_Mode_Out_OD = 0x14,GPIO_Mode_Out_PP = 0x10,GPIO_Mode_AF_OD = 0x1C,GPIO_Mode_AF_PP = 0x18
}GPIOMode_TypeDef;
可以看出上下拉是要区分配置的,然后查找函数
void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)
的定义,其中IO模式部分如下:
/* Reset the corresponding ODR bit */if (GPIO_InitStruct->GPIO_Mode == GPIO_Mode_IPD){GPIOx->BRR = (((uint32_t)0x01) << pinpos);}else{/* Set the corresponding ODR bit */if (GPIO_InitStruct->GPIO_Mode == GPIO_Mode_IPU){GPIOx->BSRR = (((uint32_t)0x01) << pinpos);}}
可以看出需要GPIOx_BSRR和GPIOx_BRR两个寄存器来具体配置上下拉。
3. GPIOx_BSRR和GPIOx_BRR
在手册中查看两个寄存器的定义:
GPIOx_BSRR的高16位已经实现了GPIOx_BRR寄存器的功能,那为什么还要有一个GPIOx_BRR呢?一种说法是:
这个设计跟IC设计者和用户习惯都有关系,有些用户就习惯set 和 reset 分开操作两个不同的寄存器,IC设计者需要照顾他们的习惯。
GPIOx_BSRR和GPIOx_BRR这两个寄存器是用来修改GPIOx_ODR寄存器的,其定义如下:
想把IO配置成输入上拉/下拉,怎么还需要配置端口输出数据寄存器呢?
端口位配置表
前面先到标准库中绕了一圈,现在回到手册中查找表17
:
这里直接给出了上拉和下拉的区别配置。表格中CNF1、CNF0、MODE1、MODE0即对应本文开头GPIOx_CRL的4 bit,而PxODR也就是上面的端口输出数据寄存器(GPIOx_ODR)。
查看IO端口输入配置:
哪位大佬看到可以指点下,端口输出数据寄存器是如何影响输入上下拉的?
STM32从设置IO输入上下拉到寄存器GPIOx_BSRR、GPIOx_BRR相关推荐
- STM32八种IO口模式区别,以及上拉输入、下拉输入、浮空输入、模拟输入的区别
最近在看数据手册的时候,发现在 Cortex-M3 里,对于 GPIO 的配置种类有 8 种之多: (1)GPIO_Mode_AIN 模拟输入 (2)GPIO_Mode_IN_FLOATING 浮空输 ...
- 单片机(STM32)的GPIO框图:─ 输入浮空 ─ 输入上拉 ─ 输入下拉 ─ 模拟输入 ─ 开漏输出 ─ 推挽式输出 ─ 推挽式复用功能 ─ 开漏复用功能
─ 输入浮空 ─ 输入上拉 ─ 输入下拉 ─ 模拟输入 ─ 开漏输出 ─ 推挽式输出 ─ 推挽式复用功能 ─ 开漏复用功能 GPIO框图 保护电路: 高压保护--上拉二极管 低压保护--下拉二极管 输 ...
- stm32 GPIOF设置 mode and cnf 第八位输入 01 第零位 输出 01
stm32 GPIOF设置 mode and cnf 第八位输入 01 第零位 输出 01 目录 分组 添加main.c debug问题 设置 正式debug keil 5 STM32F103ZE 需 ...
- STM32之继电器驱动(上下拉电阻)
事情的经过:今天买了一个5V继电器,商家说可以用STM32驱动,所以准备用STM32引脚直接驱动,后来,上午试了2小时,引脚一直有电平变化(配置为推挽输出),但是继电器就是没有反应,直接接上5V的电源 ...
- GPIO的工作方式/STM32八种IO口模式区别
GPIO基本结构 GPIO工作方式 4种输入模式: 输入浮空 输入上拉 输入下拉 模拟输入 4种输出模式: 开漏输出 开漏复用功能 推挽式输出 推挽式复用功能 最近在看数据手册的时候,发现在 Cort ...
- STM32 时钟设置
STM32中在使用任何一个外设都必须打开相应的时钟,所以我从STM32的时钟学起. RCC时钟 在STM32中有5个时钟源: ①.HSI是高速内部时钟,RC震荡器,频率为 8MHz. ②.HSE是高 ...
- STM32+MAX6675利用io口模拟SPI获取实时温度数据程序及代码
STM32+MAX6675利用io口模拟SPI获取实时温度数据程序及代码 本文采用的芯片为STM32F103RCT6 温度芯片为MAX6675 因为芯片的spi口只有3个,有部分需要外接W25Q128 ...
- STM32八种IO口模式
1.模式介绍 STM32有八种IO口模式,分别是:模拟输入.浮空输入.上拉输入.下拉输入.开漏输出.推挽输出.复用开漏输出和复用推挽输出. 1.模拟输入 GPIO_Mode_AIN模拟输入,即关闭施密 ...
- 如何设置对输入字段的关注?
本文翻译自:How to set focus on input field? What is the 'Angular way' to set focus on input field in Angu ...
最新文章
- GDLiveStreaming视频推送RTMP
- MVC视图之间调用方法总结
- LPTHW 笨方法学习python 16章
- 使用Google Guava创建收藏和实现不变性
- 前端学习(1832):前端面试题之跨域
- python数据结构 树_Python数据结构——AVL树的实现
- Lucence.Net学习+盘古分词
- 《面向对象的思考过程(原书第4版)》一 第2章 如何以面向对象的方式进行思考...
- 今夕何夕影迷小伙伴,喜欢的壁纸都在高图网
- 【CMAKE】指定编译器架构(x86 or x64)
- VB键码常数(速查)
- gps 捕获 matlab,基于FFT的GPS信号快速捕获方法
- 网易云音乐虚化图片html,网易云音乐怎么换背景 背景图片设置方法
- Java程序员必备的网盘资源 大集合
- 转:如何在艰难时期留住好员工
- 在html中书名号怎么写,html范本
- Python的raw string原始字串转化为string一般字符串,还有结尾插入‘\‘的方法,还有把string转化为raw string
- 微软辟谣裁员1.1万人/ 「美版视觉中国」起诉AI侵权/ 马斯克收购推特首期利息将到期…今日更多新鲜事在此...
- python超市进销存毕业设计-附源码211549
- 情商高手与小白的言辞差别究竟在哪里
热门文章
- php 转义md5 和java 转译的区别_CTF|PHP中的命令参数注入
- quartz可以指定方法名吗_2020象限仪流星雨肉眼可以看见吗?象限仪座流星雨观测方法...
- parallelstudio license 位置_UAV位置测量仪器Apogee-D Dual GPS INS
- c语言注释符的作用有哪两种,C语言编程的注释符号是?
- 使用Scrapy,帮你快速抓取网页数据(代码可下载)!
- pythonista安装tkinter_Python又把GUI界面攻下了,今天就告诉你怎么玩
- python生成100个随机数、写入文件后再读取显示内容_Python3 实现随机生成一组不重复数并按行写入文件...
- mongodb 分组聚合_MongoDB学习笔记整理,赶紧收藏起来吧
- Leetcode-233-数字1的个数
- 以下创建了几个对象_面试题系列第2篇:new String()创建几个对象?