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-02 15:50

STM32开发笔记76: 初始化RTC后死机的原因
单片机型号:STM32L053R8T6 项目开发中只要初始化RTC,则系统死机。其初始化步骤可参考日志:STM32开发笔记44:RTC驱动程序的移植。按照日志STM32开发笔记75: 使用STM32CubeMX点亮一个LED使用STM32CubeMX直接生成程序则运行正常。 分析原因在于,少移植了2个函数:HAL_RTC_MspInit和HAL_RTC_MspDeInit。这两个函数的实现非常简单,可以靠STM32CubeMX直接生成。 void HAL_RTC_MspInit(RTC_HandleTypeDef *hrtc) { __HAL_RCC_RTC_ENABLE(); HAL_NVIC_SetPrio
[单片机]
STM32对编码开关实现精确计数
机械触点式编码开关,依靠 A 相和 B 相信号的相位差来判断旋转方向,脉冲数计数,输出的理想波形如下图: 实际使用时,其输出的脉冲边沿可能会包含很多毛刺,如果简单的使用上升沿或者下降沿触发,在边沿处会可能产生很多误触发,使用延时等手段虽能缓解,但从方法到结果都有蒙混过关之嫌,不能令人满意。下图是我用示波器随意抓了一个编码开关的下降沿: 为了能够可靠计数,必须避开上升沿和下降沿附近的毛刺,在编码开关输出脉冲信号的脉冲中段取值,如下图所示: 1、A 相和 B 相信号分别送入具有上升/下降沿触发能力的IO,开启上升沿/下降沿触发中断; 2、在 A 相信号的上升沿/下降沿触发中断中判断 B 相的状态
[单片机]
用<font color='red'>STM32</font>对编码开关实现精确计数
STM32 系列MCU 不同型号的移植步骤解析
STM32 系列MCU 不同型号的移植! 第一步 更换启动文件: 第二步 修改宏定义: 图 1 或者修改stm32f10x.h 具体修改如下: 图2 第三步 修改系统主频率: 文件:system_stm32f10x.c 具体修改如下: 图 3 第四步 修改外部晶振源: 文件:stm32f10x.h 具体修改如下: 图 4 第五步 定时器需要根据以上修改的系统主频率进行对应的修改。 其他: 修改 Flash 地址 文件:misc.h 具体修改如下: 图 5 与以下配置一致: IAP 设置步骤 一、 IAP 工程设置 1、修改main 中的按键触发键 2、修改下载串口 二、 下载工程设置 1、修改程序入
[单片机]
<font color='red'>STM32</font> 系列MCU 不同型号的移植步骤解析
stm32驱动TB6600控制42/57步进电机的案例(TIM中断和PWM实验)
步进电机的简单使用 接线: TB6600驱动盒的详细说明: 程序设计: 工程文件: 做毕业设计要用到57步进电机,所以花了两天时间做了一下电机函数 从淘宝查的资料: 接线如图: 接线: DIR- && PUL- 接 单片机GND DIR+ 接 PA1 PUL+ 接 PA0 驱动盒TB6600 VCC 24V 驱动盒TB6600 GND 24V的GND 我测出来的 A组(绿+蓝- ) B组(黄+红-) 如何确定AB两组看这个: 关于42步进电机驱动——基于STM32 HAL库实现 接线方法 TB6600驱动盒的详细说明: 先冲英说明: Microstep Driver 微步驱动程序 Microstep 微步
[单片机]
<font color='red'>stm32</font>驱动TB6600控制42/57步进电机的案例(TIM中断和PWM实验)
STM32硬件乘法器——另与MSP430硬件乘法器区别
用过MSP430的人都知道,它是带有硬件乘法器的,可以设计进行简单的FFT计算,但是它是单独的模块,需要写入两个乘数,然后再到结果中取结果。而我们大多数时候根本就没必要去这么做,就当做51一样,软解乘法,很耗费时间。这2个MCU没有把乘法器内嵌到MCU内核MUL指令中。 而STM32包括各种使用Coretex M内核的处理器时真实的把硬件乘法器关联到MUL中了,所以你就和平时一样写乘法程序计算,实际上就是在调用乘法器。令人高兴的是,STM32能够进行单周期的乘除法,所以比软解乘除法要快几十倍呢。
[单片机]
stm32入门——跑马灯(基于stm32f103zet6)
最近开始学stm32,着实感觉到了stm32和51之间的区别,但也有联系,总我感觉32与51之间最大的区别就是在使用某个外设之前,要对该外设进行时钟的使能(以达到降低功耗的目的),和相关配置。 刚学完跑马灯,下面对跑马灯用到的对IO口的配置相关知识分别对应官方库函数和寄存器进行总结。 如有错误或不足,请在下方留言。 文章内容基于正点原子战舰。 IO口的状态 IO口有八大模式:─ 输入浮空( GPIO_Mode_IN_FLOATING = 0x04,) ─ 输入上拉( GPIO_Mode_IPU = 0x48,) ─ 输入下拉( GPIO_Mode_IPD
[单片机]
<font color='red'>stm32</font>入门——跑马灯(基于stm32f103zet6)
S3C2440 GPIO (使用miniARM 2440)
S3C2440 GPIO (使用miniARM 2440): #ifndef LDE_H #define LED_H #include 2440addr.h //GPB 有 PIN0 到 PIN10 共11个引脚 //rGPBCON 寄存器的每两个位控制一个IO的输入输出方向 //其中00表示输入 // 01表示输出 // 10为使用第二功能 // 11为出厂保留 //*************************************************** //功能:流水灯 //接口: GPB5 - LED1 低 灯亮
[单片机]
关于stm32的ad7792移植难题排解
转换原理及参数指标 1. 采样定理 2. 为了正确无误的用图5.2.2中所示的采样信号vs表示模拟信号vi,必须满足式中, fs =2fmax fs为采样频率;fmax为输入信号vi的最高频率分量的频率;上式就是所谓的采样定理。满足采样定理的条件下,可以用一个低通滤波器将信号vs还原为vi,这个低通滤波器的电压传输系数|A(f)|在低于fmax的范围内应保持不变,而在fs-fmax以前应迅速下降为零,采样定理规定了A/D转换的频率下限。 AD7792 遇到的问题/学到的知识点 学到的知识点: 1.在stm32中 U8 : unsigned char U16: unsigned short U32: unsigned int 2.
[单片机]
关于<font color='red'>stm32</font>的ad7792移植难题排解
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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