现在的位置: 首页 > 综合 > 正文

STM32F10x芯片GPIO/AFIO端口配置总结

2018年03月16日 ⁄ 综合 ⁄ 共 2668字 ⁄ 字号 评论关闭

STM32F10x芯片GPIO/AFIO端口配置总结  


      以下是STM32F10x芯片GPIO/AFIO端口配置详细介绍,欢迎大家查阅,如有问题,可联系我:

1、介绍

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

STM32F10x芯片的每个GPIO端口都有7个相关的寄存器:232位配置寄存器(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

 

2GPIO寄存器描述

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)

2AFIO寄存器描述

l         事件控制寄存器(AFIO_EVCR):控制内部时间输出到相应引脚

l         复用重映射和调试I/O配置寄存器(AFIO_MAPR

l         外部中断配置寄存器(AFIO_EXTICRx(x=1…4):设置端口为中断线(将端口与中端线连接)

       注意:对寄存器AFIO_EVCRAFIO_MAPRAFIO_EXTICRX进行读写操作前,应当首先打开AFIO的时钟。

3GPIO操作流程

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使能对应的中断通道,最后编写中断处理函数。

4GPIO操作例子

例子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;

}

摘自:http://zh5202.blog.163.com/blog/static/1780251952012619105232308/ 

抱歉!评论已关闭.