STM32 IO 口操作

发布者:CW13236066525最新更新时间:2016-08-22 来源: eefocus关键字:STM32  IO口操作 手机看文章 扫描二维码
随时随地手机看文章
STM32 IO 口操作STM32 的0x2000_0000 到 0x200F_FFFF 单元的SRAM 被定义成 Bit Band Region,共1MB字节,与之相对应的是 0x2200_0000 到 0x23FF_FFFF单元32MB。

 

(一) 开启时钟

在初始化IO的时候,首先要初始化IO的时钟。

APB1ENR 

APB2ENR

两个从字面上看都是 Advanced Periphery Bus Enable,不同之处一个是1 ,一个是2。区别在哪里?IO初始化的应该根据需要开启哪个时钟总线?

APB1外设时钟使能寄存器(RCC_APB1ENR) 低速APB使能,最大允许频率36MHz

APB2外设时钟使能寄存器(RCC_APB2ENR) 高速APB使能,最大允许频率72MHz

首先搞清楚这里的外设是相对Cortex M3的内核来讲的。这两个寄存器都是32的,占用四个字节。

APB1外设时钟使能寄存器 的可用位为20位,这些都是R/W,对应的“外设”时钟有:(1)DAC接口时钟使能 ,(2)电源接口时钟使能,(3)备份接口时钟使能,(4、5)Can 2和Can1 接口时钟使能,(6、7)IIC2和IIC1接口时钟使能,(8、9、10、11)USART 5、USART4、USART3、USART2接口时钟使能,(12、13)SPI3和SPI2接口时钟使能,(14) 窗口看门狗时钟使能,(15-20) 定时器2-7时钟使能,可以看得出,一个位对应一个“外设”,0关闭,1打开。

 

APB2外设时钟使能寄存器,在跑马灯程序的IO_Configration函数初始化的第一个寄存器就是它。说明一下,这两个寄存器都位于结构体RCC_TypeDef中,名字叫APB1ENR和APB2ENR。操作的时候就是 RCC->APB1ENR=xxxxxxxx,这里是举个例子。同样这个寄存器和上面的1不一样,它只有11个bit有效,其余的bit保留(保留位读为0),开放出来的bit都是R/W(可读可写的)。这些外设都是:(1)USART1接口时钟使能,

(2)SPI1接口时钟使能 (3)定时器1时钟使能,(4、5)ADC2 和ADC1接口时钟使能,(6-10)端口A-E时钟使能,(11)辅助功能IO时钟使能。可以看得出,也是一个位对应一个外设,1打开,0关掉。

 

 

来看这段代码 

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

RCC->APB2ENR|=1<<5; //使能PORTD时钟 

上面这两个操作就是打开端口A的端口D的时钟。更为简洁的写法:

RCC->APB2ENR|=0x00000014;//访问:字,半字和字节访问 

//这里采用字访问

 

或者

RCC->APB2ENR|=(U32)0x14;//访问:字,半字和字节访问 

//这里采用字访问

 

 

 

(二) 设置输入输出模式

CRH-x  control register high 端口配置高寄存器

CRL -x  control register low  端口配置低寄存器

//STM32 每个端口有16个口线,GPIOA,GPIOB,GPIOC,GPIOD,GPIOE, //GPIOF,GPIOG. 目前IO口的数目最多的A-G ,总共112个。

后面的X表示属于那一个端口,每个端口对应一个控制寄存器。GPIOA->CRH=0xxxxxxxx;

就可以实现对A端口CRH的操作。

CRL-x和CRH-x都是32位的寄存器,每一位都是RW。必须以字(32位)的方式操作这些外设寄存器。其中四位控制一个端口的输入输出模式,比如说速率是 50M,2M,还是20M,输出是OD,还是PP,输入是FLOATING还是IPU。这个设置在库函数中的体现就是GPIO_InitStructure.GPIO_Mode和GPIO_InitStructure.GPIO_Speed的参数配置。

(三) 读写端口数据

端口输出数据寄存器(GPIOx_ODR) (x=A..E),要写数据到端口就给这个寄存器赋值。32位寄存器,高16位保留。低16位对应IO。

端口输入数据寄存器(GPIOx_IDR) (x=A..E),要读取端口上的状态,就读取这个寄存器的值。32位寄存器,高16位保留,低16位对应IO。

(四) 还有三个寄存器

GPIOx_BSRR gpio bit set or reset register 端口位设置清除寄存器 

这是一个32位寄存器,位写1有效,写0无影响,高16位写清除对应的位,即对应位输出0;低16位写1置位对应位,对应位输出1。该寄存器只能写,不能读,并且只支持字操作。

 

GPIOx_BRR gpio bit reset register 端口位清除寄存器 

少了个S,对比上面的功能上了少了置位功能,其它相同。

GPIOx_LCKR gpio lock register 端口位配置锁定寄存器

这个暂时估计不用,就不说了。

关键字:STM32  IO口操作 引用地址:STM32 IO 口操作

上一篇:STM32外部中断操作
下一篇:基于ARM9TDMI的简易直流电子负载设计

推荐阅读最新更新时间:2024-03-16 15:06

C指针+ STM32 理解
环境:IAR + Cortex-M3的处理器 关注:指针在寄存器层次上的存储、调用等。。。 推荐:让你不再害怕指针 存储: 示例代码如下: int yyy=16; int *ptr1 = int **ptr2 = &ptr1; int (*ptr3) ; int *(*ptr4) ; int main() { ................ //使用这几个变量 ................. return 0; } IAR--View--Statics显示的全局区(静态区)情况: 以ptr2来说,定义:int **ptr2 = &ptr1; 从上图可知,指针变量ptr2的类型,
[单片机]
C指针+ <font color='red'>STM32</font> 理解
关于STM32的140个问题汇总
1、AHB系统总线分为APB1(36MHz)和APB2(72MHz),其中2 1,意思是APB2接高速设备 2、Stm32f10x.h相当于reg52.h(里面有基本的位操作定义),另一个为stm32f10x_conf.h专门控制外围器件的配置,也就是开关头文件的作用 3、HSE Osc(High Speed External Oscillator)高速外部晶振,一般为8MHz,HSI RC(High Speed InternalRC)高速内部RC,8MHz 4、LSE Osc(Low Speed External Oscillator)低速外部晶振,一般为32.768KHz,LSI RC(Low Speed InternalR
[单片机]
关于<font color='red'>STM32</font>的140个问题汇总
STM32----LTDC与DMA2D
一、硬件环境 第一代野火F29开发板,MCU为stm32f429IGT6。板载IS42S16400J SDRAM,16bit位宽 8M容量。 TFT为RG888接口,分辨率为800*480。 二、LTCD初始化 (1)初始化GPIO与SDRAM (2)初始化相关时钟 //2、LTDC相关时钟初始化 /* 配置 PLLSAI 分频器,它的输出作为像素同步时钟CLK*/ /* PLLSAI_VCO 输入时钟 = HSE_VALUE/PLL_M = 1 Mhz */ /* PLLSAI_VCO 输出时钟 = PLLSAI_VCO输入 * PLLSAI_N = 420 Mhz */ /* P
[单片机]
STM32----LTDC与DMA2D
stm32成长记之LED呼吸灯
拍的GIF太朦胧了,就不备份了。。。 呼吸灯的实现实则是通过PWM控制的LED的亮灭时间间隔,由于人眼视觉的暂缓效应,达到预期的效果。 那么呼吸灯的设计思路是怎么的呢? ①需要点灯--LED的配置和实现(GPIO_InitTypeDef结构体) ②时间的调用--定时器的配置(TIM_TimeBaseInitTypeDef结构体) ③时间间隔的控制--PWM的配置和实现(TIM_OCInitTypeDef结构体) 通俗的讲,就是理论上想让LED达到图a的亮灭的效果(LED灯由亮逐渐熄灭后在逐渐点亮),然而在MCU的识别到的高电平为2.2~2.9V以上,也就是说MCU电平变化只有两种情况,高电平(或1)低电平(
[单片机]
<font color='red'>stm32</font>成长记之LED呼吸灯
意法最新STM32为注重低能耗设计提供解决方案
丰富的开放生态系统帮助设计人员大幅降低功耗。 中国,2014年5月13日 ——意法半导体最新的STM32L0微控制器已经完全通过相关认证测试,并在公司及指定经销商处接受订货。新系列STM32微控制器让客户能够取得前所未有的低功耗,整合高能效的ARM® Cortex®-M0+内核、优化架构、电源管理模式、超低功耗外设、支持节能型USB功能、独有的超低功耗制造工艺。 STM32L0将运行模式功耗降至87µA/MHz,当保留RAM全部数据时,停止模式功耗为440nA,并集成低功耗定时器,快速唤醒时间达到3.5µs,让应用设计人员能够充分利用不同的低功耗模式。设计人员使用STM32L0系列产品可开发出电池续航能力一流且外观设计
[单片机]
STM32的 USB传输(双缓冲)
前天测试自己编写的USB驱动程序时候发现从主机到STM32的OUT传输(主机到设备)速率竟然只有最高33KB/S,实在是晕死了。经过研究后发现是驱动程序中设置的PIPE MaxTransferSize参数的关系,原先设置64只能33KB/S,后参考其他USB设备驱动程序的值,设置成了65535,再测试USB OUT的速度,达到了500KB/S,终于解决了驱动程序的瓶颈。不过算下USB 2.0全速的通讯速率是12Mb/S,排除掉CRC、令牌、SOF等等开销怎么也应该不止最大500KB/S啊。到网上看了看,基本上应该能达到600KB/S~700KB/S以上,我现在的速度应该还有很大的提升才是。 看看程序,发现 void EP3_OUT
[单片机]
STM32 F7如何满足嵌入式系统更高处理性能需求
  意法半导体(ST)日前宣布推出业界首款基于ARM最新Cortex-M7内核的STM32 F7系列微控制器,其性能远超ST之前的32位STM32F4微控制器,通过无缝升级路径可将处理性能和DSP性能提高一倍。   “作为STM32微控制器产品家族的高端产品,STM32 F7使内存和外存的性能达到一个新的水平,给开发人员带来新的创新机会,保证他们不需要再根据存储器性能调整代码。”ST微控制器市场总监Daniel Colonna表示,“而之所以能够在业内率先推出基于Cortex-M7的产品,首先得益于ST与ARM密切的合作关系。其次,ST也与第三方客户保持着广泛的合作,确保他们能够及时得到ARM最新的技术支持并推出新产品。强大的开发
[电源管理]
<font color='red'>STM32</font> F7如何满足嵌入式系统更高处理性能需求
STM32单片机FSMC的使用解析
在做项目的过程中遇到了这个问题,感觉文章写得不错,共享给对FSMC的使用怀有疑惑的同伴们! LCD有如下控制线: CS:Chip Select片选,低电平有效 RS:Register Select寄存器选择 WR:Write写信号,低电平有效 RD:Read读信号,低电平有效 RESET:重启信号,低电平有效 DB0-DB15:数据线 假如这些线,全部用普通IO口控制。根据LCD控制芯片手册(大部分控制芯片时序差不多): 如果情况如下: DB0-DB15的IO全部为1(表示数据0xff),也可以为其他任意值,这里以0xff为例。 CS为0(表示选上芯片,CS拉低时,芯片对传入的数据才会有效) RS为1(表示DB0-15上传
[单片机]
<font color='red'>STM32</font>单片机FSMC的使用解析
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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