GPIO功能描述_第1页
GPIO功能描述_第2页
GPIO功能描述_第3页
GPIO功能描述_第4页
GPIO功能描述_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、GPIO功能描述每个GPI/O端口有两个32位配置寄存器(GPIOx_CRL,GPIOx_CRH),两个32位数据寄存器(GPIOx_IDR,GPIOx_ODR),一个32位置位/复位寄存器(GPIOx_BSRR),一个16位复位寄存器(GPIOx_BRR)和一个32位锁定寄存器(GPIOx_LCKR)。 GPIO端口的每个位可以由软件分别配置成多种模式。输入浮空输入上拉输入下拉模拟输入开漏输出推挽式输出推挽式复用功能开漏复用功能 每个I/O端口位可以自由编程,然而I/0端口寄存器必须按32位字被访问(不允许半字或字节访问)。GPIOx_BSRR和GPIOx_BRR寄存器允

2、许对任何GPIO寄存器的读/更改的独立访问;这样,在读和更改访问之间产生IRQ时不会发生危险。 下图给出了一个I/O端口位的基本结构。   复位期间和刚复位后,复用功能未开启,I/O端口被配置成浮空输入模式(CNFx1:0=01b,MODEx1:0=00b)。复位后,JTAG引脚被置于输入上拉或下拉模式:PA15:JTDI置于上拉模式PA14:JTCK置于下拉模式PA13:JTMS置于上拉模式PB4: JNTRST置于上拉模式 当作为输出配置时,写到输出数据寄存器上的值(GPIOx_ODR)输出到相应的I/O引脚。可以以推挽模式或开漏模式(当输

3、出0时,只有N-MOS被打开)使用输出驱动器。输入数据寄存器(GPIOx_IDR)在每个APB2时钟周期捕捉I/O引脚上的数据。所有GPIO引脚有一个内部弱上拉和弱下拉,当配置为输入时,它们可以被激活也可以被断开。 当对GPIOx_ODR的个别位编程时,软件不需要禁止中断:在单次APB2写操作里,可以只更改一个或多个位。这是通过对“置位/复位寄存器”(GPIOx_BSRR,复位是 GPIOx_BRR)中想要更改的位写1来实现的。没被选择的位将不被更改。  复用功能(AF)使用默认复用功能前必须对端口位配置寄存器编程。对于复用的输入功能,端口必须配置成输入模式(浮空

4、、上拉或下拉)且输入管脚必须由外部驱动注意:也可以通过软件来模拟复用功能输入管脚,这种模拟可以通过对GPIO控制器编程来实现。此时,端口应当被设置为复用功能输出模式。显然,这时相应的管脚不再由外部驱动,而是通过GPIO控制器由软件来驱动。对于复用输出功能,端口必须配置成复用功能输出模式(推挽或开漏)。对于双向复用功能,端口位必须配置复用功能输出模式(推挽或开漏)。这时,输入驱动器被配置成浮空输入模式。如果把端口配置成复用输出功能,则引脚和输出寄存器断开,并和片上外设的输出信号连接。如果软件把一个GPIO脚配置成复用输出功能,但是外设没有被激活,它的输出将不确定。 软件重新映射I/O复

5、用功能为了使不同器件封装的外设I/O功能的数量达到最优,可以把一些复用功能重新映射到其他一些脚上。这可以通过软件配置相应的寄存器来完成(参考AFIO寄存器描述)。这时,复用功能就不再映射到它们的原始引脚上了。 输入配置当I/O端口配置为输入时:输出缓冲器被禁止施密特触发输入被激活根据输入配置(上拉,下拉或浮动)的不同,弱上拉和下拉电阻被连接出现在I/O脚上的数据在每个APB2时钟被采样到输入数据寄存器对输入数据寄存器的读访问可得到I/O状态    输出配置当I/O端口被配置为输出时:输出缓冲器被激活开漏模式:输出寄存器上的0激活N-MOS,而输

6、出寄存器上的1将端口置于高阻状态(P-MOS从不被激活)。推挽模式:输出寄存器上的0激活N-MOS,而输出寄存器上的1将激活P-MOS。施密特触发输入被激活弱上拉和下拉电阻被禁止出现在I/O脚上的数据在每个APB2时钟被采样到输入数据寄存器在开漏模式时,对输入数据寄存器的读访问可得到I/O状态在推挽式模式时,对输出数据寄存器的读访问得到最后一次写的值。   模拟输入配置当I/O端口被配置为模拟输入配置时:输出缓冲器被禁止;禁止施密特触发输入,实现了每个模拟I/O引脚上的零消耗。施密特触发输出值被强置为0;弱上拉和下拉电阻被禁止;读取输入数据寄存器时数值为0。

7、60;      例程(1)  本例展示了如何通过设置GPIO BSRR寄存器(Port bit set/reset registe)和GPIO BRR寄存器 (Port bit reset register)来翻转IO的状态。 通过设置这两个寄存器,可以利用单比特操作(single atomic write access)来改变一个或者几个IO端口的状态。 #include "stm32f10x_lib.h" /* Private typedef -*/* Pri

8、vate define -*/* Private macro -*/* Private variables -*/GPIO_InitTypeDef GPIO_InitStructure;ErrorStatus HSEStartUpStatus; /* Private function prototypes -*/void RCC_Configuration(void);void NVIC_Configuration(void);void Delay(vu32 nCount); /* Private functions -*/ /* Function Name

9、60; : main* Description    : Main program.* Input          : None* Output         : None* Return         : None*/int main(void)#ifdef DEBUG  debug();#endif

10、   /* Configure the system clocks */  RCC_Configuration();     /* NVIC Configuration */  NVIC_Configuration();   /* Enable GPIOC clock */  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); /使能APB2外设(GPIOC)时钟   /* Configure  PC

11、.04-PC.07  as Output push-pull */   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  GPIO_Init(GPIOC, &GPIO_InitStructure); 

12、60; while (1)      /* Turn on led connected to PC.04pin */       GPIO_SetBits(GPIOC, GPIO_Pin_4);    /* Insert delay */    Delay(0xAFFFF);     /* Turn on led connected to PC.05 and PC.06 pins */ 

13、      GPIO_SetBits(GPIOC, GPIO_Pin_5 | GPIO_Pin_6);    /* Turn off led connected to PC.04 pin */       GPIO_ResetBits(GPIOC, GPIO_Pin_4);    /* Insert delay */    Delay(0xAFFFF);   

14、0; /* Turn on led connected to PC.07 pin */        GPIO_SetBits(GPIOC, GPIO_Pin_7);    /* Turn off led connected to PC.05 and PC.06 pins */      GPIO_ResetBits(GPIOC, GPIO_Pin_6 | GPIO_Pin_5);    /* Insert dela

15、y */    Delay(0xAFFFF);     /* Turn off led connected to PC.07 pin */    GPIO_ResetBits(GPIOC, GPIO_Pin_7);   /* Function Name  : RCC_Configuration* Description    : Configures the different system clocks.* Input &#

16、160;        : None* Output         : None* Return         : None*/void RCC_Configuration(void)  /* RCC system reset(for debug purpose) */  RCC_DeInit();   /* Enable

17、HSE */  RCC_HSEConfig(RCC_HSE_ON);   /* Wait till HSE is ready */  HSEStartUpStatus = RCC_WaitForHSEStartUp();   if(HSEStartUpStatus = SUCCESS)      /* Enable Prefetch Buffer */    FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);&

18、#160;    /* Flash 2 wait state */    FLASH_SetLatency(FLASH_Latency_2);             /* HCLK = SYSCLK */    RCC_HCLKConfig(RCC_SYSCLK_Div1);     /* PCLK2 = HCLK */  &

19、#160; RCC_PCLK2Config(RCC_HCLK_Div1);     /* PCLK1 = HCLK/2 */    RCC_PCLK1Config(RCC_HCLK_Div2);     /* PLLCLK = 8MHz * 9 = 72 MHz */    RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);     /* Enable PLL *

20、/    RCC_PLLCmd(ENABLE);     /* Wait till PLL is ready */    while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) = RESET)             /* Select PLL as system clock source */    RCC_SYSCLKConfig(RC

21、C_SYSCLKSource_PLLCLK);     /* Wait till PLL is used as system clock source */    while(RCC_GetSYSCLKSource() != 0x08)           /* Function Name  : NVIC_Configuration* Description    : Configures Vector T

22、able base location.* Input          : None* Output         : None* Return         : None*/void NVIC_Configuration(void)#ifdef  VECT_TAB_RAM   /* Set the Vector

23、Table base location at 0x20000000 */  NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);#else  /* VECT_TAB_FLASH  */  /* Set the Vector Table base location at 0x08000000 */  NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);  #endif /* Function Name  : Delay* Descrip

24、tion    : Inserts a delay time.* Input          : nCount: specifies the delay time length.* Output         : None* Return         : None*/void Delay(vu32 nCount)  for(; nCount != 0; nCount-); #ifdef  DEBUG/* Function Name  : assert_failed* Description    : Reports the name of the source file and the source line number*

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论