STM32单片机GPIO寄存器

发布者:风清扬yx最新更新时间:2015-08-10 来源: 21ic关键字:STM32  单片机  GPIO  寄存器 手机看文章 扫描二维码
随时随地手机看文章

每个GPIO端口有两个32位配置寄存器(GPIOx_CRL,GPIOx_CRH)分别控制每个端口的高八位和低八位,如果IO口是0-7号的话,则写CRL寄存器,如果IO口是8-15号的话,则写CRH寄存器,两个32位数据寄存器(GPIOx_IDR,GPIOx_ODR)一个是只读作输入数据寄存器,一个是只写作输出寄存器,一个32位置位/复位寄存器(GPIOx_BSRR),一个16位复位寄存器(GPIOx_BRR)和一个32位锁定寄存器(GPIOx_LCKR)。常用的IO端口寄存器只有四个:CRH,CRL,IDR,ODR。

 

数据手册中列出的每个I/O端口的特定硬件特征, GPIO端口的每个位可以由软件分别配置成多种模式。每个I/O端口位可以自由编程,然而I/0端口寄存器必须按32位字被访问(不允许半字或字节访问)。

另外,STM32的每个端口使用前都要将其时钟使能,STM32的GPIO的时钟统一挂接在APB2上,具体的使能寄存器为RCC_APB2ENR,该寄存器的第2位到第8位分别控制GPIOx(x=A,B,C,D,E,F,G)端口的时钟使能,当外设时钟没有启用时,程序不能读出外设寄存器的数值,如打开PORTA时钟:

RCC->APB2ENR|=1<<2; //使能PORTA时钟

使能外设时钟后,GPIOA的十六位就可以按照设定的状态工作了,之后就是具体设置哪一位了以第八位为例即高位的首位,在GPIOx_CRH寄存器中进行设置,GPIOA的每一位都有该寄存器的四位来设定相应的参数,这四位中的高两位(CNF0,CNF1)设置GPIO的输入输出模式,低两位(MODE0,MODE1)是设置GPIO的输出频率,具体可以参考STM32参考手册。

 

GPIOA->CRH&=0XFFFFFFF0; //清掉PA8原来的设置,同时屏蔽其它端口,不影响其它端口的设置

 

GPIOA->CRH|=0X00000003;//PA8 推挽输出
十六进制中的3 换成二进制 00 11 前两位00表示推挽输出,11代表输出频率50Mhz,若CRH|=0x4,表示模拟输入模式(ADC用),0x3表示推挽输出模式(作输出口用,50M速率),0x8表示上/下拉输入模式(做输入口用),0xB表示复用输出(使用IO口的第二功能,50M速率)。
这是对一位的操作,当然也可以多位操作,因为STM32对GPIO操作必须是32位全字操作,设置完成后GPIOA的第8位就可以使用了之后给GPIOA->ODR=0x xxxx xxxx送数据就行了

STM32单片机,有了端口才能和外界联系,学会了端口控制,才能更好地利用外设。建立和外界的联系,发挥自身的优点。
首先介绍一下基本的GPIO相关的寄存器:
1, GPIOX_CRL 低8位端口配置寄存器
这个寄存器主要是对配置管脚是输入还是输出:
其中1)MODEy[1:0]主要是配置是输入端口还是输出端口的。配置为输出得时候还可以配置输出的管脚速度等级。
2)CNFy[1:0] 主要是两种形式,在端口配置输入的时候,即MODEy[1:0]位00(输入),用来配置输入的模式,主要是模拟输入,浮空输入,上拉模式和下拉模式。
3)CNFy[1:0]在端口配置为输出的时候,用来控制输入的模式。具体看手册吧。
总得来说,就是MODEy[1:0] 先配置管脚是输入还是输出,是输入就继续配置CNFy[1:0]来配置输出管脚的连接模式。要是输出的话,就继续配置MODEy[1:0]的管脚速度速度等级,之后再配置管脚的连接模式。上拉,下拉,推免,开漏等等。具体运用的时候看看手册就明白了。
2, GPIOX_CRH 高8位端口配置寄存器
和GPIOX_CRH 完全一样,只是端口换成高8位了。不说了,看看就明白了!
3, GPIOX_ODR 端口输出数据寄存器
学过AVR的都知道,输出的时候有输出数据寄存器,STM32也一样。思想COPY过来,就自然知道了GPIOX_ODR是做什么的了。不过要注意的是,这个玩意不能一个位一个位的去操作,还是51的简单啊,不过原子大哥已经把那个端口映射可操作位段,不明白,还是看自己的吧。一个GPIOA端口就16位,自然的32位的GPIOX_ODR 就只有低16位有效了,想输出什么就给这个寄存器赋值就OK了。
或者用GPIOA->ODR |=(1<ODR &=(0<
完成了这一步,我们就可以软件延时,控制输出流水灯了。前提是开启设备时钟哦。
4, GPIOX_IDR 端口输入数据寄存器
这个寄存器用到的前提是端口配置为输入模式时候。什么时候想读取值,就什么时候读取吧。大家都明白。
5, GPIOX_BSRR 端口位设置/清除寄存器
这个寄存器我用了一些,别的也不会。就感觉超级好用。用起来很方便。比如你端口配置好了。想PA5输出“1”。就GPIOA->BSRR |=(1<<5);5是对应的哦。输出“0”,一样的
GPIO->BSRR |=(1<<(5+16));为什么加16,你明白的。
6, GPIOX_BRR 端口位清除寄存器
晚上百度了一下,有了GPIOX_BSRR 为什么还要有GPIOX_BRR ,没看明白。有了拿来就用就对了。一样的和GPIOx_BSRR一样的用法。专门清除的。GPIOA->BRR |= (1<
7, 端口配置锁定寄存器GPIOX_LCKR,锁定了当然就不能修改了。保护了。避免不小心造成的失误。以后用到了在琢磨吧。
关键字:STM32  单片机  GPIO  寄存器 引用地址:STM32单片机GPIO寄存器

上一篇:RSl0陀螺仪及其在角速率与转角测量中的应用
下一篇:STM32 中 BIT_BAND(位段/位带)和别名区使用入门

推荐阅读最新更新时间:2024-03-16 14:27

单片机按键检测函数
/******************************************************************* 函数功能:判断某一按键的状态; 返回值:0x00-未按键,0x01-短按键,0x02-长按键;(本程序不设连发功能) 注意:本长短按键是在同一按键上实现; 长按键是持续按下2秒后认为是长按键,此时可以执行按键功能程序,必须释放 按键后才可以再次执行按键判断; 短按键是按下时间在2秒以内并释放的为短按键,含20ms的防抖,按键执行是在 按键释放后执行的; 为了定时方便,本函数是每10ms执行一次的,如果执行周期有变,注意更改相 关变量。 (可以将此函数以结构体形式扩展为多个通道检
[单片机]
单片机外部中断的两种模式
51单片机的外部中断有两种模式:电平触发模式和跳变沿触发模式 第一,选择电平触发时,单片机在每个机器周期检查中断源口线,检测到低电平,即置位中断请求标志,向CPU请求中断。第二,选择边沿触发方式时,单片机在上一个机器周期检测到中断源口线为高电平,下一个机器周期检测到低电平,即置位中断标志,请求中断。 区别: 电平触发模式时,中断标志寄存器不锁存电平中断请求信号。单片机把每个周期的S5P2采样外部中断口的电平逻辑直接赋值到中断标志寄存器。标志寄存器对于请求信号来说是透明的。这样当中断请求被阻塞而没有得到及时响应时,将被丢失。 换言之,就是要使电平触发的中断被CPU响应并执行,必须保证外部中断源口线的低电平维持到中断被执
[单片机]
STM32的sd卡的IAP升级固件教程
一. 1.功能:通过sd卡升级stm32的固件 2.所需要的设备:STM32的最小系统、sd卡模块、sd卡、keil软件,boot升级程序,APP程序 二. 1.据程序中的接口连接好电气关系,具体的电路图根据附件1连接(根据个人,这个附件就不上传了) 2.首先打开附件2的stm32 boot升级程序 3.根据如图所示设置stm32 boot程序下的keil软件 3.如图上第三步的标示是留给64k的boot引导程序区,这一步是根据你的stm32的flash的大小设定的,一般留有64k空间足够用了 4.这个要注意 5.如上图设置好的后,下载到板子里面 三. 1.打开附件3的
[单片机]
<font color='red'>STM32</font>的sd卡的IAP升级固件教程
PIC16C924型单片机在酒精浓度检测仪中的应用
摘要:  本文介绍PIC16C924型单片机在酒精浓度检测仪中的应用,并给出实际的软件流程。 关健词: 单片机 酒精浓度检测 引言     Microchip Technology公司PIC16C924是一种低价格、高性能、CMOS、全静态、带有集成LCD驱动器模块和5通道8位高速A/D的8位微控制器。指令总线和数据总线分开的哈佛结构可容纳14位指令和8位数据。两级指令流水作业使所有程序跳转指令需2个时钟周期外,其余均为单周期指令。RISC指令集仅35条指令。PIC16C924还具有减少外部元件、降低成本、增加系统可靠性和降低功耗等特点。紫外线可擦除型用于代码开发,OTP型用于批量生产。非常适合
[测试测量]
用普中开发板做的51单片机的智能时钟具有闹钟功能
本贴针对学完单片机并且有读懂代码的非新手同学。本人目前放寒假,这个是本人在上个学期的单片机课上要求做的综合实验,现在重新修改了下增加了菜单目前测试毫无问题可以完美使用。有志向做闹钟的同学可以参考一下,原码上由本人写的大量注释可以方便看懂。 使用了LCD1602、DS1302、DS18B20用来测试温度、内部含闹钟系统但本人没有做EEPROM有需要的同学可以自行添加。 单片机源程序如下: #include reg52.h #include key.h #include LCD1602.h #include DS1302.h #include music.h #include DS18B20.H #define no
[单片机]
stm32红外遥控的外部中断实现
花了整整两天时间终于算是基本把红外解码搞明白了,其实并不是很难,用了两天时间,说来惭愧啊,原因就是细节上的问题,不过最终总算找出问题来了。使用外部中断来解码,就先对外部中断进行配置吧 void exti_init() { RCC- APB2ENR|=1 0;//使用外部中断要开AFIO复用时钟,因为要用到用到它的寄存器来选择出发IO口 AFIO- EXTICR |=1 4;//将出发外部中断的IO配置为PB.9 EXTI- IMR|=1 9;//中断线9的中断打开 EXTI- EMR|=1 9;//时间也打开 EXTI- RTSR|=1 9;//上升沿出发中断 } 开始,弄了还几次程
[单片机]
7小技巧:如何选择MCU和电源让您的嵌入式电路设计更高效
1、MCU的选择 选择 MCU 时要考虑 MCU 所能够完成的功能、MCU 的价格、功耗、供电电压、I/O 口电平、管脚数目以及 MCU 的封装等因素。MCU 的功耗可以从其电气性能参数中查到。供电电压有 5V、3.3V 以及 1.8V 超低电压供电模式。为了能合理分配 MCU 的I/O资源,在 MCU 选型时可绘制一张引脚分配表,供以后的设计使用。 2、电源 (1)考虑系统对电源的需求,例如系统需要几种电源,如24V、12V、5V或者3.3V等,估计各需要多少功率或最大电流(mA)。在计算电源总功率时要考虑一定的余量,可按公式“电源总功率=2& TI mes;器件总功率”来计算。 (2)考虑芯片与器件对电源波动性的需求。一
[单片机]
基于Atmega16L单片机的高精度频率调节器
1 引言 在现代化工业生产与高精度测试中,我们需要相当精确的频率来帮助判断设备性能指标。而且我们希望能够微调该频率。采用压控振荡器得到的频率不够精确,微调频率步骤烦琐,耗时漫长,因此有些测试项目限制了压控振荡器的使用。 Mega系列单片机是Atmel公司于2002年起陆续推出的。这款AVR增强型单片机具有速度快,抗干扰能力强,价格低廉等诸多优点。为了加快AVR单片机的软件编制,Atmel以及第三方提供的开发工具多种多样,程序开发方便有效。该单片机内部FLASH结构功能灵活,加锁后很难解密,可以最大限度地保护知识产权。AVR单片机可以广泛应用于通信、野外测试、汽车电子、医疗器械等领域,并且适用于各种低电压、低功耗的场合。 本
[单片机]
基于Atmega16L<font color='red'>单片机</font>的高精度频率调节器
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
热门活动
换一批
更多
设计资源 培训 开发板 精华推荐

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

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

更多精选电路图
换一换 更多 相关热搜器件
更多每日新闻
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved