您的位置 首页 应用

STM32 IO 口操作

STM32IO口操作STM32的0x2000_0000到0x200F_FFFF单元的SRAM被定义成BitBandRegion,共1MB字节,与之相对应的是0x2200_0000到0x23FF_FFF

STM32IO口操作STM32的0x2000_0000到0x200F_FFFF单元的SRAM被界说成BitBandRegion,共1MB字节,与之相对应的是0x2200_0000到0x23FF_FFFF单元32MB。

(一)敞开时钟

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

APB1ENR

APB2ENR

两个从字面上看都是AdvancedPeripheryBusEnable,不同之处一个是1,一个是2。差异在哪里?IO初始化的应该根据需要敞开哪个时钟总线

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

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

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

APB1外设时钟使能寄存器的可用位为20位,这些都是R/W,对应的“外设”时钟有:(1)DAC接口时钟使能,(2)电源接口时钟使能,(3)备份接口时钟使能,(4、5)Can2和Can1接口时钟使能,(6、7)IIC2和IIC1接口时钟使能,(8、9、10、11)USART5、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-xcontrolregisterhigh端口装备高寄存器

CRL-xcontrolregisterlow端口装备低寄存器

//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_BSRRgpiobitsetorresetregister端口位设置铲除寄存器

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

GPIOx_BRRgpiobitresetregister端口位铲除寄存器

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

GPIOx_LCKRgpiolockregister端口位装备确定寄存器

这个暂时估量不必,就不说了。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/yingyong/272864.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部