您的位置 首页 电子

STM32F10x芯片GPIO/AFIO端口装备总结

1、介绍STM32F10x芯片的GPIO/AFIO配置主要包括以下几方面知识:在时钟控制模块中配置好相应总线时钟,并在总线上使能对应的GPIO口(AFIO口…

1、介绍

STM32F10x芯片GPIO/AFIO装备首要包含以下几方面常识:在时钟操控模块中装备好相应总线时钟,并在总线上使能对应的GPIO口(AFIO口,需要的话)时钟后:依据需求装备相应GPIO端口为对应的输入/输出形式,按需求更改/读取端口的数据;端口功用重映射;若用外部中止,则将中止线与对应引脚链接起来。

STM32F10x芯片的每个GPIO端口都有7个相关的寄存器:2个32位装备寄存器(GPIOx_CRL,GPIOx_CRH),两个32位数据寄存器(GPIOx_IDR,GPIOx_ODR),一个32方位位/复位寄存器(GPIOx_BSRR),一个16位复位寄存器(GPIOx_BRR)和一个32位确认寄存器(GPIOx_LCKR)。每个I/O端口都可以设置成如下形式:

?输入浮空:GPIO_Mode_IN_FLOATING

?输入上拉:GPIO_Mode_IPU

?输入下拉:GPIO_Mode_IPD

?模仿输入:GPIO_Mode_AIN

?开漏输出:GPIO_Mode_Out_OD

?推免式输出:GPIO_Mode_Out_PP

?推免式复用功用:GPIO_Mode_AF_PP

?开漏复用功用:GPIO_Mode_AF_OD

2、GPIO寄存器描绘

l端口装备低寄存器(GPIOx_CRL)(x=A…E)

l端口装备高寄存器(GPIOx_CRH)(x=A…E)

l端口输入数据寄存器(GPIOx_IDR)(x=A…E)

l端口输出数据寄存器(GPIOx_ODR)(x=A…E)

l端口位设置/铲除寄存器(GPIOx_BSRR)(x=A…E)

l端口位铲除寄存器(GPIOx_BRR)(x=A…E)

l端口装备确认寄存器(GPIOx_LCKR)(x=A…E)

2、AFIO寄存器描绘

l事情操控寄存器(AFIO_EVCR):操控内部时刻输出到相应引脚

l复用重映射和调试I/O装备寄存器(AFIO_MAPR)

l外部中止装备寄存器(AFIO_EXTICRx)(x=1…4):设置端口为中止线(将端口与中端线衔接)

留意:对寄存器AFIO_EVCR、AFIO_MAPR、AFIO_EXTICRX进行读写操作前,应当首要翻开AFIO的时钟。

3、GPIO操作流程

l首要界说GPIO_InitTypeDef类型变量;

l然后调用RCC_APB2PeriphClockCmd()函数使能相应的GPIOx端口(一切GPIO端口都挂载到APB2总线上的)时钟。留意使能GPIOx端口时钟的函数有必要在GPIO端口装备函数之前调用,不然GPIO端口会初始化不成功:;

l调用GPIO_DeInit()初始化要运用的GPIOx端口对应寄存器为默认值;

l调用GPIO_StructInit()函数初始化前面界说的GPIO_InitTypeDef类型变量到缺省值;

l按需求初始化GPIO_InitTypeDef类型变量,然后调用GPIO_Init()函数完成初始化;

l然后就可以对相应的端口进行操作了:读/写,或装备为复用功用(相应函数检查固件库)。

留意:

1、体系复位和刚复位后,复用功用未敞开,I/O端口被装备成浮空输入形式(CNFx[1:0]=01b,MODEx[1:0]=00b)。复位后,JTAG引脚被置于输入上拉或下拉形式:

PA15:JTDI置于上拉形式;

PA14:JTCK置于下拉形式;

PA13:JTMS置于上拉形式;

PB4:JNTRST置于上拉形式;

因而要运用JTAG调试接口作为通用GPIO口运用,则有必要屏蔽JTAG复用功用。详细完成为先调用RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE)使能AFIO时钟,然后调用GPIO_PinRemapConfig(GPIO_Remap_SWJ_XXXX,ENABLE)封闭JTAG的调试复用功用;

2、当把端口装备成复用输出功用时,则引脚和输出寄存器断开,并和片上外设的输出信号衔接;但假如没有激活对应外设,则其输出将不确认;

3、当运用外部中止或事情事,首要依照上面几步装备GPIO端口(输入),然后调用函数:GPIO_EXTILineConfig()将引脚与对应的中止线链接起来,然后在装备NVIC使能对应的中止通道,最终编写中止处理函数。

4、GPIO操作比如

比如1:

u16 Val = 1;

GPIO_InitTypeDef GPIO_InitStructure;

RCC_Configuration();

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO,ENABLE);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOB, &GPIO_InitStructure);

GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable,ENABLE);

GPIO_Write(GPIOB,0xffff);

while(1)

{

GPIO_Write(GPIOB, ~Val);

Delay(0x2FFFFF);

if(Val == 0x8000) Val = 1;

else Val<<=1;

}

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

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

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

微信扫一扫关注我们

返回顶部