【浅析STM32之GPIO寄存器(CRL/CRH)配置 】
浅析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)配置 】相关推荐
- STM32学习--GPIO(寄存器)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一.GPIO是什么? 二.引脚 GPIO的输入 输入框图 输入模式 作用 GPIO的输入 输入框图 输入模式 作用 GPIO ...
- STM32单片机的GPIO寄存器CRL、CRH、IDR、ODR、BRSS、BRR
STM32的寄存器多如牛毛,要一个一个的弄清楚谈何容易呀,所以我们在学习的时候要抓住重点,挑重要的进行学习和记忆,因为STM32一个一个去配置寄存器的话相当的麻烦,我们实际开发的话也不会一个一个去配置 ...
- STM32之GPIO的CRL、CRH、IDR、ODR、BSRR、BRR、LCKR寄存器
STM32中控制GPIO状态的一共有7个寄存器,分别是CRL.CRH.IDR.ODR.BSRR.BRR.LCKR. 调用即可看到选项
- stm32 关于GPIO寄存器操作
在使用I2C时偶尔看别人写的程序有如下操作 //PB9 #define SDA_IN() {GPIOB->CRH&=0XFFFFFF0F;GPIOB->CRH|=(u32)8< ...
- STM32寄存器操作端口模式CRL/CRH详解
STM32寄存器操作端口模式CRL/CRH详解 首先,在开始讲解前,大家请先看如下一段代码: #define SDA_IN_24c02(){GPIOB->CRH&=0XFFF0FFFF; ...
- STM32——GPIO的CRL、CRH和CNF与MODE的关系
GPIO的CRL.CRH和CNF与MODE的关系 STM32的CRL控制着每个IO端口的位占用CRL的4个位,高两位为CNF,低两位为MODE. CRH的作用和CRL完全一样,只是CRL控制的是低8位 ...
- STM32的GPIO的七个寄存器的配置说明
STM32的GPIO的七个寄存器的配置说明 每组GPIO口都配置有七个寄存器, 端口配置低寄存器GPIOx_CRL 端口配置高寄存器(GPIOx_CRH) 端口输入数据寄存器(GPIOx_IDR) 端 ...
- STM32GPIO寄存器CRL、CRH、IDR、ODR、BSRR、BRR
GPIO 寄存器描述 注意:本文以STM32F10XXX为参考,重在理解 CRL与CRH CRL与CRH分别为端口配置低与端口配置高寄存器,为32位寄存器,其中每四位控制一个I/O口 对CNFy与MO ...
- stm32驱动lcd段码io配置_I.MX6U处理器GPIO的命名复用与IO配置
一.I.MX6U处理器GPIO的命名 STM32 中的 IO 都是 PA0~15.PB0~15 这样命名的,I.MX6U 的 IO 是怎么命名的呢?打开NXP官方提供的<I.MX6UL 参考手册 ...
最新文章
- python中range 10 0_如何在python中使用range方法
- C++ Primer 5th笔记(chap 14 重载运算和类型转换)标准库函数对象
- UIControl事件---iOS-Apple苹果官方文档翻译
- eWeek: 三巨头Web应用服务对比
- A Simple Problem with Integers
- Shiro框架:Shiro简介、登陆认证入门程序、认证执行流程、使用自定义Realm进行登陆认证、Shiro的MD5散列算法
- matlab::mex::ArgumentList outputs的创建
- 【windows环境——VSCode安装教程】
- 图解Visual Studio 2010中的UML建模功能
- 凯恩帝绝对坐标清零_凯恩帝 K90T i 数控车床系统使用手册分享
- cs学习使用4(代理)
- Excel如何统计单元格中姓名个数
- Ubuntu上安装QQ,无法显示图片和头像
- Xftp/Xshell 要继续使用此程序,您必须应用最新的更新或使用新版本
- 场效应管(MOS管)
- SATA协议OOB随笔
- 【论文解读】利用高光谱图像对场景反射率进行有效估计(Efficient Estimation of Reflectance Parameters from Imaging Spectropy)
- book review----Philosophical Issues in Tourism (Aspects of Tourism)
- python第5课:递归函数
- 利用LruCache为GridView异步加载大量网络图片完整示例