历史上的今天
今天是:2025年04月26日(星期六)
2019年04月26日 | STM32 GPIO 寄存器配置
2019-04-26 来源:eefocus
一.CRH和CRL的使用:fficeffice" />
CRH和CRL的使用基本相同,CRH用于控制GPIOX(X表示A---G)的高8位(Pin15---Pin8),而CRL用于控制GPIOX(X表示A---G)的低8位(Pin7----Pin0)。
二.ODR的使用:
1.
RCC->APB2ENR|=1<<2; //使能PORTA时钟
GPIOA->CRH&=0XFFFFFFF0;//清除该位原来的设置
GPIOA->CRH|=0X00000003;//PA8 推挽输出
GPIOA->ODR|=1<<8; //PA8 输出高
由以上代码看出,PA8设置成了推挽输出。大家都知道一个端口可以输出高电平,也可以输出低电平,而GPIOA->ODR|=1<<8;这个表达式就把PA8设置成了在空闲的时候输出高电平;GPIOA->ODR|=0<<8;这个表达式,把PA8设置成了在空闲的时候输出低电平。
如果想设置PA8为推挽输出,并且希望输出为低电平,可以不要这个表达式GPIOA->ODR|=0<<8; ,因为系统会默认端口输出为低电平 。
2.
RCC->APB2ENR|=1<<2; //使能PORTA时钟
GPIOA->CRH&=0XFF0FFFFF;
GPIOA->CRH|=0X00800000; //PA13设置成上拉/下拉输入
GPIOA->ODR|=1<<13; //PA13上拉
由以上代码看出,PA13设置成了上拉输入,即输入高电平。大家都知道,一个端口设置成了输入模式,那么它可以输入高电平,也可以输入低电平。GPIOA->ODR|=1<<13; 这个表达式把PA13设置成了上拉模式,即表示在端口空闲的时候输入高电平;GPIOA->ODR|=0<<13;这个表达式把PA13设置成了下拉模式,即端口在空闲的时候输入低电平。
如果想设置PA13为输入模式,并且希望输入低电平,可以不要这个表达式GPIOA->ODR|=0<<13; ,因为系统会默认端口输入为低电平。
三.IDR的使用:
IDR是一个端口输入数据寄存器,只用了低16位。该寄存器为只读寄存器,并且只能以16位的形式读出。读出的值为对应IO口的状态。
===========================================================华丽分割线==============================================================
端口低配置寄存器寄存器的复位值为0X4444 4444,,复位值其实就是配置端口为浮空输
入模式。STM32的CRL控制着每个IO端口(A~G)的低8位的模式。每
个IO端口的位占用CRL的4个位,高两位为CNF,低两位为MODE。这里我们可以记住几个
常用的配置,比如0X4表示模拟输入模式(ADC用)、0X3表示推挽输出模式(做输出口用,
50M速率)、0X8表示上/下拉输入模式(做输入口用)、0XB表示复用输出(使用IO口的第二
功能,50M速率)。
CRH的作用和CRL完全一样,只是CRL控制的是低8位输出口,而CRH控制的是高8
位输出口。这里我们对CRH就不做详细介绍了。
给个实例,比如我们要设置PORTC的11位为上拉输入,12位为推挽输出。代码如下:
GPIOA->CRH&=0XFFFFFFF0;
GPIOA->CRH|=0X00000003;//PA8 推挽输出
GPIOA->ODR|=1<<8;
//PA8 输出高
再如:
GPIOC->CRH&=0XFFF00FFF;//清掉这2个位原来的设置,同时也不影响其他位的设置
GPIOC->CRH|=0X00038000; //PC11输入,PC12输出
GPIOC->ODR=1<<11;//PC11上拉
通过这3句话的配置,我们就设置了PC11为上拉输入,PC12为推挽输出
史海拾趣
|
本帖最后由 paulhyde 于 2014-9-15 09:37 编辑 /***************************************************** 本程序的目标是这样的: 1:不使用INTn中断功能,按键接在普通IO上 2:由定时器T/C2每隔一段时间检测按键一次, 并具有防抖动功能 3:每点击按 ...… 查看全部问答> |
|
电工测量与电测仪表--很基础很实用的好书 序言 前言 第一章 电测技术基础 第一节 测量的定义和分类 第二节 测量误差 第三节 电测仪表的分类 第三节 电测仪表的主要技术指标 第二章 电气测量指示仪表 第一节 电气测量指示仪表的概念和分 ...… 查看全部问答> |
|
1.Found clock-sensitive change during activeclockedge at time <time> on register \"<name>\"原因:vector sourcefile中时钟敏感信号(如:数据,允许端,清零,同步加载等)在时钟的边缘同时变化。而时钟敏感信号是不能在时钟边沿变化 ...… 查看全部问答> |
|
为什么在MULTISIM10中,单独做个电压比较器可以出来结果,加的信号源是系统的函数发生器(输入10V,1KHz,正弦波)~~~~~但为什么连到我们自己做的信号源(示波器显示也是10V,1KHz,正弦波)上就出来结果不对呢?… 查看全部问答> |
|
对于DVR有哪些方案啊?了解的朋友提提哈。具体用是哪个芯片 现在我所知道的 主要是 TI的 DM6446 海思的351x系列 还有台湾的智原818x系列。 从事过DVR开发的朋友,还有其他的方案吗?谢谢啊~~~~… 查看全部问答> |
|
我的平台是PXA270+Wince5.0 现在LCD的显示比较奇怪,刚进入系统的时候,主画面的显示还算正常,但是一切换画面,屏幕就会局部或者部分发白。 比方说,打开IE,屏幕就会整个发白,字体看不太清楚。 打开控制面板,屏幕会变成一条一条的,什么字都 ...… 查看全部问答> |
|
我用AT89S52与1602LCD相连,P1口与LCD的D0-D7相连,编写了一个程序,但LCD上显示的如果是数字,那只能显示偶数,如果是字母,那只能是b,d,f...我应该是D0脚有问题,每次这里测电平都是低电平,这跟前面的电路没有关系把?因为我是直接把P1.0和D1相 ...… 查看全部问答> |
|
各位FPGA论坛的大虾: 为了方便大虾和后来者使用,学习和共享. 我呼吁大家把已经经过验证的FPGA 模块 整理成册, 分享到论坛给使用! &n ...… 查看全部问答> |




