STM32 GPIO 寄存器配置

发布者:rnm888最新更新时间:2019-04-26 来源: eefocus关键字:STM32  GPIO  寄存器配置 手机看文章 扫描二维码
随时随地手机看文章

 一.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为推挽输出

关键字:STM32  GPIO  寄存器配置 引用地址:STM32 GPIO 寄存器配置

上一篇:stm32驱动段式lcd液晶显示--非使用1621驱动芯片驱动
下一篇:STM32只开启SWD模式调试程序

推荐阅读最新更新时间:2024-11-17 15:53

STM8 GPIO输入输出模式
悬浮输入 悬浮输入,也叫浮空输入,顾名思义,即引脚悬空。这种方式的输入阻抗很高。当悬浮输入的引脚上加上信号时,单片机所得到的信号并不确定是高电平或是低电平,是一个不确定的信号。悬浮输入的典型应用就是模数转换,外部的任何一个小信号都要经过A/D采样转换为数字信号。 上拉输入 上拉就是把电位拉高,比如拉到Vcc。上拉就是将不确定的信号通过一个电阻嵌位在高电平!电阻同时起限流作用!强弱只是上拉电阻的阻值不同。 上拉输入最典型的应用就是外部按键,当按键未按下时,我们要保证它是高电平,当按键按下时才被拉低。 推挽输出 推挽输出(Push-pull output),也称为互补输出,推拉式输出。推挽输出模式导通损耗小,效率高。在此
[单片机]
STM8 <font color='red'>GPIO</font>输入输出模式
stm32 CAN通信 TJA1040
CAN协议特点 1.多主控制 所有单元都可以发送消息,根据标识符(Identifier简称ID)决定优先级。仲裁获胜(被判定为优先级最高)的单元可继续发送消息,仲裁失利的单元则立刻停止发送而进行接收工作 2.系统的柔软性 与总线相连的单元没有类似于“地址”的信息。因此在总线上增加单元时,连接在总线上的其它单元的软硬件及应用层都不需要改变 3.通信速度较快,通信距离远 最高 1Mbps(距离小于40M),最远可达10KM(速率低于5Kbps) 4.具有错误检测、错误通知和错误恢复功能 所有单元都可以检测错误(错误检测功能),检测出错误的单元会立即同时通知其他所有单元(错误通知功能),正在发送消息的单元一旦检测出错误,会强制结束当
[单片机]
8.TouchGFX界面应用之自定义容器
TouchGFX的支持自定义组件,类似于你自定义一个函数然后给其他调用,这里就是定义一个组件给其他调用。定一个小目标,我们这一节自定义做一个调色板。 在添加屏幕旁边自定义组件(自定义容器)里面。 调色板以下图作为参考,颜色模式是RGB888,需要3个滑动块,以及一些字样。 做3个滑块作为RGB三种颜色的输入量,滑块是可以设置滑过去和没滑过去的颜色的,但是必须是以图片的形式,所以你如果想做的美观一点的话需要提前做大量的图或者使用UI,图片的数量也决定的所使用内存的数量,如果可以图片尽可能的小来节省内存。取好对应的名字,设置最小值为0,最大值为255,开始值设置为0; 放置几个字体,右边三个字是需要根据滑块的位置
[单片机]
8.TouchGFX界面应用之自定义容器
使用PlatformIO对Arduino UNO和STM32板进行编程
  使用简单的用户界面,在 Arduino 和 Arduino IDE 中进行开发总是简单而有趣。Arduino IDE 是开源的,可免费使用开发环境,具有编写、编译和上传代码到 Arduino Boards 等所有功能。它基于 Java,可在 Windows、OS X 和 Linux 等主要操作系统上运行。但是,由于它的简单性和庞大的社区,它没有一些经验丰富的开发人员需要的快速开发功能,可以缩短开发周期。有许多可用于 Arduino 的开发环境,但都有一些优点和缺点。今天,我们将从易于使用且与 Arduino 环境相比增加了功能的PlatformIO 开发环境开始。   什么是 PlatformIO?   PlatformI
[单片机]
使用PlatformIO对Arduino UNO和<font color='red'>STM32</font>板进行编程
stm32的八种GPIO配置模式
1. 模拟输入; 2. 浮空输入; 3. 上拉输入; 4. 下拉输入; 5. 开漏输出; 6. 推挽输出; 7. 复用开漏输出; 8. 复用推挽输出 具体的: 1.模拟输入 从上图我们可以看到,我觉得模拟输入最重要的一点就是,他不经过输入数据寄存器,所以我们无法通过读取输入数据寄存器来获取模拟输入的值,我觉得这一点也是很好理解的,因为输入数据寄存器中存放的不是0就是1,而模拟输入信号不符合这一要求,所以自然不能放进输入数据寄存器。该输入模式,使我们可以获得外部的模拟信号。 2.浮空输入 该输入状态,我的理解是,它的输入完全由外部决定,我觉得在数据通信中应该可以使用该模式。应为在数据通信中,我们直观的理解就是线路两端连接着发送端
[单片机]
<font color='red'>stm32</font>的八种<font color='red'>GPIO</font>配置模式
STM32 GPIO IIC学习
昨天在查看MPU6050芯片的时候,试着使用IIC去读写数据,查看了STM32关于IIC的资料,发现关于使用模拟IIC有不同的引脚配置,在中文参考手册中描述: 这个是使用STM32硬件IIC时GPIO引脚配置。 关于模拟IIC的引脚配置,IIC的两个引脚SDA要求既能作为输出又能作为输入。 我买的是正点原子的Mini板,查看了正点原子的教程,在教程中,他是这样配置的: 1.先设置SDA、SCL引脚为推挽输出。 2.使用SDA作为输出时, #define SDA_OUT() {GPIOC- CRH&=0XFFFF0FFF;GPIOC- CRH|=3 12;} #define IIC_SDA PCout(11) /
[单片机]
<font color='red'>STM32</font> <font color='red'>GPIO</font> IIC学习
STM32关于USART的问题集锦
STM32F207的串口问题 问: 答1:RCC_APB2PeriphClockCmd(RCC_APB2Periph_USARTx, ENABLE) for USART1 and USART6 * RCC_APB1PeriphClockCmd(RCC_APB1Periph_USARTx, ENABLE) for USART2, USART3, UART4 or UART5. * 3、stm32中的串口通信中的USART_WordLength,数据位的长度包不包括开始位哪些? 问:stm32中的串口通信中的USART_WordLength,数据位的长度包不包括开始位哪些? 答:不包括开始位,如果你有 校验(奇 偶)的
[单片机]
STM32学习手记-TIM3上溢出定时
TIM3是属于通用定时器,程序中采用APB1的时钟(PCLK1),72MHz。 程序中TIM3采取上溢出,即0—ARR时溢出。 上述程序的TIM3的频率为(PCLK1*2)/(36000-1+1)=2KHz,其中PCLK1为36MHz,故计数2000次为1s 使用定时器定时的步骤: 1、在RCC里打开相应的定时器时钟 2、在NVIC里打开相应的中断 3、在TIMx_Configuration()进行相应的设置,大致步骤为 a)TIM_TimeBaseStructure.TIM_Period = 2000-1; // 自动重装载寄存器周期的值(定时时间) 累计 2000个频率后产生个更新或者中断(也是说定时时间到),也就是ARR
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved