浅析STM32之GPIO寄存器(CRL/CRH)配置

一、前言

GPIO的配置可以说是STM单片机的一大特色,通过GPIO的配置我们可以进行多种不同模式的输入和输出,并且进行配置的方式也有多种,一般我们在使用的过程中可能大多数都是通过库函数来进行配置的,这样确实也比较方便,但有时候我们也不难免会使用寄存器进行配置,代码可能会更加简洁,所以掌握寄存器的配置对我们来说也很重要。

特别是在进行IIC的数据引脚输入输出配置时寄存器的作用十分重要

二、寄存器配置分析
#define IIC_INPUT_MODE_SET()  {GPIOB->CRL&=0X0FFFFFFF;GPIOB->CRL|=8<<28;}//改变PB7对应位为1000(CNF[1:0]MODE[1:0]),设置成上拉或者下拉输入
#define IIC_OUTPUT_MODE_SET() {GPIOB->CRL&=0X0FFFFFFF;GPIOB->CRL|=3<<28;}//改变PB7对应位为0011,设置成通用推挽输出

上述代码是我在另一篇博文进行IIC的数据引脚进行输入输出配置的代码,下面我会进行相关寄存器的讲解,然后进行此代码的分析,相信大家会一目了然了。

在stm32单片机中我们可以发现,单片机的引脚分成了很多组GPIOA~GPIOE,并且每一组中又有0-15共16个引脚,每个IO口由4bit位来控制,那么一组IO就需要16*4 = 64bit,但我们使用的是32位的单片机,所以又将64Bit分成了两部分,高32bit又GPIOX_CRH寄存器来配置,低32bit由GPIOX_CRLj寄存器来进行配置.对应的引脚CRL为0到7CRH为8到15。

下面是官方数据手册的内容

GPIOX_CRL

GPIOX_CRH

从上面我们可以看出不管是GPIOX_CRL还是GPIOX_CRH每个IO都是由CNF[1:0]和MODE[1:0]两部分进行配置选择的,其中MODE[1:0]是进行配置输入还是输出一般00为输入 11为输出。CNF[1:0]则配合MODE[1:0]进行具体的模式配置。

譬如GPIOA中的GPIO_Pin_0配置上拉输入模式
CNF[1:0] 则为10  MODE[1:0] 则为00
GPIOA->CRL &= 0xfffffff0;GPIOA->CRL |= 8;
0xfffffff0先进行配置IO清零其余的保持不变,8为1000 相应的IO配置成上拉输入模式
三、代码解析

GPIOB->CRL&=0X0FFFFFFF;GPIOB->CRL|=8<<28;
首先我们从0x0FFFFFFF这句代码中可以看出我们是进行GPIO_Pin_7配置,先将7引脚Io的控制位清零其余的位保持不变,8 ----->1000 为CNF[1:0] 为10 上拉MODE[1:0] 为00输入则将引脚配置成上拉输入模式 8 << 28 可以看成 1111 1111 1111 1111 1111 1111 1111 1000 左移28位则变成了1000 1111 1111 1111 1111 1111 1111 1111,可以看出就是GPIO_Pin_7引脚进行配置了上拉输入模式。

同理

GPIOB->CRL&=0X0FFFFFFF;GPIOB->CRL|=3<<28;
首先从0X0FFFFFFF这句代码我们是进行GPIO_Pin_7配置,先将7引脚Io控制位清零其余位保持不变,3------>0011为CNF[1:0] 为00推挽,MODE[1:0]为11输出则将相应的引脚配置成推挽输出,3<<28可以看出1111 1111 1111 1111 1111 1111 1111 0011 左移28位后变成了0011 1111 1111 1111 1111 1111 1111 1111,正好是将GPIO_Pin_7设置成了推挽输出模式

上述内容为个人观点若有误,望大佬指正。

【浅析STM32之GPIO寄存器(CRL/CRH)配置 】相关推荐

  1. STM32学习--GPIO(寄存器)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一.GPIO是什么? 二.引脚 GPIO的输入 输入框图 输入模式 作用 GPIO的输入 输入框图 输入模式 作用 GPIO ...

  2. STM32单片机的GPIO寄存器CRL、CRH、IDR、ODR、BRSS、BRR

    STM32的寄存器多如牛毛,要一个一个的弄清楚谈何容易呀,所以我们在学习的时候要抓住重点,挑重要的进行学习和记忆,因为STM32一个一个去配置寄存器的话相当的麻烦,我们实际开发的话也不会一个一个去配置 ...

  3. STM32之GPIO的CRL、CRH、IDR、ODR、BSRR、BRR、LCKR寄存器

    STM32中控制GPIO状态的一共有7个寄存器,分别是CRL.CRH.IDR.ODR.BSRR.BRR.LCKR. 调用即可看到选项

  4. stm32 关于GPIO寄存器操作

    在使用I2C时偶尔看别人写的程序有如下操作 //PB9 #define SDA_IN() {GPIOB->CRH&=0XFFFFFF0F;GPIOB->CRH|=(u32)8< ...

  5. STM32寄存器操作端口模式CRL/CRH详解

    STM32寄存器操作端口模式CRL/CRH详解 首先,在开始讲解前,大家请先看如下一段代码: #define SDA_IN_24c02(){GPIOB->CRH&=0XFFF0FFFF; ...

  6. STM32——GPIO的CRL、CRH和CNF与MODE的关系

    GPIO的CRL.CRH和CNF与MODE的关系 STM32的CRL控制着每个IO端口的位占用CRL的4个位,高两位为CNF,低两位为MODE. CRH的作用和CRL完全一样,只是CRL控制的是低8位 ...

  7. STM32的GPIO的七个寄存器的配置说明

    STM32的GPIO的七个寄存器的配置说明 每组GPIO口都配置有七个寄存器, 端口配置低寄存器GPIOx_CRL 端口配置高寄存器(GPIOx_CRH) 端口输入数据寄存器(GPIOx_IDR) 端 ...

  8. STM32GPIO寄存器CRL、CRH、IDR、ODR、BSRR、BRR

    GPIO 寄存器描述 注意:本文以STM32F10XXX为参考,重在理解 CRL与CRH CRL与CRH分别为端口配置低与端口配置高寄存器,为32位寄存器,其中每四位控制一个I/O口 对CNFy与MO ...

  9. stm32驱动lcd段码io配置_I.MX6U处理器GPIO的命名复用与IO配置

    一.I.MX6U处理器GPIO的命名 STM32 中的 IO 都是 PA0~15.PB0~15 这样命名的,I.MX6U 的 IO 是怎么命名的呢?打开NXP官方提供的<I.MX6UL 参考手册 ...

最新文章

  1. python中range 10 0_如何在python中使用range方法
  2. C++ Primer 5th笔记(chap 14 重载运算和类型转换)标准库函数对象
  3. UIControl事件---iOS-Apple苹果官方文档翻译
  4. eWeek: 三巨头Web应用服务对比
  5. A Simple Problem with Integers
  6. Shiro框架:Shiro简介、登陆认证入门程序、认证执行流程、使用自定义Realm进行登陆认证、Shiro的MD5散列算法
  7. matlab::mex::ArgumentList outputs的创建
  8. 【windows环境——VSCode安装教程】
  9. 图解Visual Studio 2010中的UML建模功能
  10. 凯恩帝绝对坐标清零_凯恩帝 K90T i 数控车床系统使用手册分享
  11. cs学习使用4(代理)
  12. Excel如何统计单元格中姓名个数
  13. Ubuntu上安装QQ,无法显示图片和头像
  14. Xftp/Xshell 要继续使用此程序,您必须应用最新的更新或使用新版本
  15. 场效应管(MOS管)
  16. SATA协议OOB随笔
  17. 【论文解读】利用高光谱图像对场景反射率进行有效估计(Efficient Estimation of Reflectance Parameters from Imaging Spectropy)
  18. book review----Philosophical Issues in Tourism (Aspects of Tourism)
  19. python第5课:递归函数
  20. 利用LruCache为GridView异步加载大量网络图片完整示例

热门文章

  1. CHAPITRE II
  2. 括号匹配问题(数据结构)
  3. Numpy:关于flatten的理解
  4. Windows 2012 always on 读写分离集群搭建配置
  5. 最接地气的一套PHP面试题(总结不易,踩坑踩到挂了好多面试)
  6. 微医的第七年:依托互联网医院联合体,如何推动人工智能的战略升级?
  7. 几行代码实现用Python输出表情包
  8. iOS开源项目周报0323 1
  9. 网上流传的《名侦探柯南》大结局十二种!
  10. 【图形学】计算机图形处理系统的组成