目录

  • 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相关推荐

  1. STM32八种IO口模式区别,以及上拉输入、下拉输入、浮空输入、模拟输入的区别

    最近在看数据手册的时候,发现在 Cortex-M3 里,对于 GPIO 的配置种类有 8 种之多: (1)GPIO_Mode_AIN 模拟输入 (2)GPIO_Mode_IN_FLOATING 浮空输 ...

  2. 单片机(STM32)的GPIO框图:─ 输入浮空 ─ 输入上拉 ─ 输入下拉 ─ 模拟输入 ─ 开漏输出 ─ 推挽式输出 ─ 推挽式复用功能 ─ 开漏复用功能

    ─ 输入浮空 ─ 输入上拉 ─ 输入下拉 ─ 模拟输入 ─ 开漏输出 ─ 推挽式输出 ─ 推挽式复用功能 ─ 开漏复用功能 GPIO框图 保护电路: 高压保护--上拉二极管 低压保护--下拉二极管 输 ...

  3. stm32 GPIOF设置 mode and cnf 第八位输入 01 第零位 输出 01

    stm32 GPIOF设置 mode and cnf 第八位输入 01 第零位 输出 01 目录 分组 添加main.c debug问题 设置 正式debug keil 5 STM32F103ZE 需 ...

  4. STM32之继电器驱动(上下拉电阻)

    事情的经过:今天买了一个5V继电器,商家说可以用STM32驱动,所以准备用STM32引脚直接驱动,后来,上午试了2小时,引脚一直有电平变化(配置为推挽输出),但是继电器就是没有反应,直接接上5V的电源 ...

  5. GPIO的工作方式/STM32八种IO口模式区别

    GPIO基本结构 GPIO工作方式 4种输入模式: 输入浮空 输入上拉 输入下拉 模拟输入 4种输出模式: 开漏输出 开漏复用功能 推挽式输出 推挽式复用功能 最近在看数据手册的时候,发现在 Cort ...

  6. STM32 时钟设置

    STM32中在使用任何一个外设都必须打开相应的时钟,所以我从STM32的时钟学起. RCC时钟 在STM32中有5个时钟源:  ①.HSI是高速内部时钟,RC震荡器,频率为 8MHz. ②.HSE是高 ...

  7. STM32+MAX6675利用io口模拟SPI获取实时温度数据程序及代码

    STM32+MAX6675利用io口模拟SPI获取实时温度数据程序及代码 本文采用的芯片为STM32F103RCT6 温度芯片为MAX6675 因为芯片的spi口只有3个,有部分需要外接W25Q128 ...

  8. STM32八种IO口模式

    1.模式介绍 STM32有八种IO口模式,分别是:模拟输入.浮空输入.上拉输入.下拉输入.开漏输出.推挽输出.复用开漏输出和复用推挽输出. 1.模拟输入 GPIO_Mode_AIN模拟输入,即关闭施密 ...

  9. 如何设置对输入字段的关注?

    本文翻译自:How to set focus on input field? What is the 'Angular way' to set focus on input field in Angu ...

最新文章

  1. GDLiveStreaming视频推送RTMP
  2. MVC视图之间调用方法总结
  3. LPTHW 笨方法学习python 16章
  4. 使用Google Guava创建收藏和实现不变性
  5. 前端学习(1832):前端面试题之跨域
  6. python数据结构 树_Python数据结构——AVL树的实现
  7. Lucence.Net学习+盘古分词
  8. 《面向对象的思考过程(原书第4版)》一 第2章 如何以面向对象的方式进行思考...
  9. 今夕何夕影迷小伙伴,喜欢的壁纸都在高图网
  10. 【CMAKE】指定编译器架构(x86 or x64)
  11. VB键码常数(速查)
  12. gps 捕获 matlab,基于FFT的GPS信号快速捕获方法
  13. 网易云音乐虚化图片html,网易云音乐怎么换背景 背景图片设置方法
  14. Java程序员必备的网盘资源 大集合
  15. 转:如何在艰难时期留住好员工
  16. 在html中书名号怎么写,html范本
  17. Python的raw string原始字串转化为string一般字符串,还有结尾插入‘\‘的方法,还有把string转化为raw string
  18. 微软辟谣裁员1.1万人/ 「美版视觉中国」起诉AI侵权/ 马斯克收购推特首期利息将到期…今日更多新鲜事在此...
  19. python超市进销存毕业设计-附源码211549
  20. 情商高手与小白的言辞差别究竟在哪里

热门文章

  1. php 转义md5 和java 转译的区别_CTF|PHP中的命令参数注入
  2. quartz可以指定方法名吗_2020象限仪流星雨肉眼可以看见吗?象限仪座流星雨观测方法...
  3. parallelstudio license 位置_UAV位置测量仪器Apogee-D Dual GPS INS
  4. c语言注释符的作用有哪两种,C语言编程的注释符号是?
  5. 使用Scrapy,帮你快速抓取网页数据(代码可下载)!
  6. pythonista安装tkinter_Python又把GUI界面攻下了,今天就告诉你怎么玩
  7. python生成100个随机数、写入文件后再读取显示内容_Python3 实现随机生成一组不重复数并按行写入文件...
  8. mongodb 分组聚合_MongoDB学习笔记整理,赶紧收藏起来吧
  9. Leetcode-233-数字1的个数
  10. 以下创建了几个对象_面试题系列第2篇:new String()创建几个对象?