打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
STM32L
分类: STM32L 2013-09-09 00:00 298人阅读 评论(0) 收藏 举报

STM32L GPIO 


1. 每个GPIO均有以下寄存器:
  • 4个32位配置寄存器:GPIOx_MODER、GPIOx_OTYPER、GPIOx_OSPEEDR和GPIOx_PUPDR
GPIOx_MODER :配置IO端口方向为输入/输出/AF/模拟
GPIOx_OTYPER :选择输出类型:推挽/开漏
GPIOx_OSPEEDR :选择IO速度(与IO端口方向无关)
GPIOx_PUPDR :选择上拉/下拉电阻(与IO端口方向无关)
  • 2个32位数据寄存器:GPIOx_IDR、GPIOx_ODR
  • 1个32位置位/复位寄存器:GPIOx_BSRR(使用该寄存器读写寄存器可以避免在读写期间被IRQ中断,该读写操作属于一个原子操作)
该寄存器允许置位/复位GPIOx_ODR上指定的一位,GPIOx_ODR上每位关联到两个控制位:GPIOx_BSRR:BSRR(i) [Bits 15:0]和 GPIOx_BSRR:BSRR(i+SIZE)[Bits31:16];往GPIOx_BSRR:BSRR(i) [Bits 15:0]写1 可以置位对应的ODR;往GPIOx_BSRR:BSRR(i) [Bits 31:16]写1 可以置位对应的ODR;往该寄存器写0不会产生任何影响
  • 1个32位锁定寄存器:GPIOx_LCKR
必需通过通过一个特殊的读写时序才能写入该寄存器,但时序正确时,bit16会置位(lock key active),bits[15:0]显示哪些IO端口被锁定了,端口被锁定之后直到下一个复位才能解锁,锁定之后以下寄存器将被冻结:GPIOx_MODER、GPIOx_OTYPER、GPIOx_OSPEEDR、GPIOx_PUPDR、GPIOx_AFRH、GPIOx_AFRL
  • 2个复用功能寄存器:GPIOx_AFRH、GPIOx_AFRL

2. 每个GPIO端口均可单独设置为以下模式:
  • 输入+悬空
  • 输入+上拉
  • 输入+下拉
  • 模拟(用作ADC、DAC输出或者捕获输入情况下)
  • 输出+开漏+上拉/下拉(输出模式下GPIO的输出速度是可配置的)
  • 输出+推挽+上拉/下拉
  • 复用功能+推挽+上拉/下拉
  • 复用功能+开漏+上拉/下拉


下图为GPIO的架构图:



3. GPIO一般用途

  1. 默认情况或者刚复位后,所有IO端口被设置为输入+悬空模式,除了调试接口默认设置为了复用功能+上拉/下拉
  2. 当端口被设置为输出的时候,修改GPIOx_ODR对应可改变输出高低电平(一般会使用推挽或者开漏输出(输出低电平时,只有N-MOS是接通的))
  3. 当端口被设置为输入的时候,每个AHB总线时钟均会捕获端口上高低电平,并存放在GPIOx_IDR寄存器
  4. 所有的GPIO端口均可通过配置寄存器使能或不使能内部弱上拉/弱下拉




4 .I/O端口多路复用及映射

IO端口通过一个内部的多路选择器以允许在同一时刻只使用一种复用功能,这样使得多个外围电路共享同样的IO端口
每个IO端口可以通过配置GPIOx_AFRL和GPIOx_AFRH设置所使能的复用功能(AF0~AF15)
  • 复位之后,所有的IO连接到复用功能0(AF0)
  • 外围电路的复用功能映射到AF1~AF14
  • Cortex-M3 EVENTOUT映射到AF15
以下说明如何使用复用功能:
  • System Function:配置IO端口使能的复用功能(JTAG/SWD,在复位之后对应端口会被调试器设置为调试功能下且不受GPIO寄存器的控制;RTC_50HZ,对应端口需要设置为输入+悬空;MCO,该端口必需配置在复用模式下)
  • GPIO:根据需要配置GPIOx_MODER设置IO端口工作模式(输入、输入/模拟)
  • Perpheral‘s Alternate Function:对于ADC/DAC,配置IO为模拟;对于其他外围功能,配置GPIOx_MODER、GPIOx_OTYPE、GPIOx_PUPDR、GPIOx_OSPEEDER
  • EVENTOUT:配置IO端口复用功能AF15,用于输出Cortex-M3 EVENTOUT信号




5. 外部中断/唤醒 

所有的IO端口均有外部中断功能,使用外部中断功能时,IO端口必需设置为输入模式

6. 输入模式配置

当IO端口配置为输入模式时:
  • 输出模式被禁用
  • 施密特触发器被激活
  • 根据GPIOx_PUPDR寄存器使能上拉/下拉电阻
  • 每个AHB时钟均会采样IO端口上的值存放到输入数据寄存器中
  • 通过读取输入数据寄存器可以检测IO状态

7. 输出模式配置

当IO端口配置为输出模式时:
  • 输出模式使能
  • 施密特出发器被激活
--  开漏模式时:输出0时,N-MOS导通(P-MOS任何情况下不会导通)
--  推挽模式时:输出0时,N-MOS导通;输出1时,P-MOS导通 
  • 根据GPIOx_PUPDR寄存器使能弱上拉/下拉
  • 每个AHB时钟均会采样IO端口上的值存放到输入数据寄存器中
  • 通过读取输入数据寄存器可以检测IO状态
  • 通过读取输出数据寄存器可以得到最后写入的值


8. 复用功能配置

当IO端口配置为复用功能时:
  • 输出模式下可配置为开漏或推挽
  • 复用功能的输出信号将驱动输出缓冲区
  • 输入端的施密特触发器被激活
  • 根据GPIOx_PUPDR寄存器使能弱上拉/下拉
  • 每个AHB时钟均会采样IO端口上的值存放到输入数据寄存器中
  • 通过读取输入数据寄存器可以检测IO状态


9. 模拟模式配置

当IO端口配置为模拟模式时:
  • 输出模式被禁用
  • 输入模式下的施密特触发器被激活(为每个IO口的模拟值提供零功耗,施密特触发器的输出端被强制输出为0)
  • 弱上拉/下拉被禁用
  • 读取输入寄存器获取到0


10. 外部时钟/外部晶振端口复用

  • 没有使用LSE时,OSC32_IN和OSC32_OUT 可配置为一般用途的IO端口
  • 没有使用HSE时,OSC_IN和OSC_OUT 可配置为一般用途的IO端口

11. 选择RTC_AF1复用功能

STM32L152XX拥有以下特性
  • 两个GPIO端口可配置为唤醒源WKUP1和WKUP3
  • 一个GPIO端口可配置为唤醒源WKUP2,可用于检测篡改、时间戳事件,输出RTC AFO_ALARM、AFO_CALIB
RTC_AF1端口(PC13)可配置为以下功能:
  • 唤醒源(WKUP2):配置PWR_CSR寄存器中的EWUP2位
  • RTC AFO_ALARM输出:根据RTC_CR寄存器中的OSEL[1:0]输出可配置为:RTC Alarm A、 RTC Alarm B、RTC Wakeup
  • RTC AFO_CALIB输出:配置RTC_CR寄存器中的COE[23]位
  • RTC AFI_TAMPER1 : 篡改事件检测
  • 时间戳事件检测

12. 初始化GPIO端口例子

  1. void Init_GPIOS(void){  
  2.     GPIO_InitTypeDef GPIO_InitStructure;            //定义初始化结构体  
  3.     RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB,ENABLE);  //使能对应AHB总线时钟  
  4.   
  5.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;  //根据需求配置GPIO工作模式  
  6.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;  
  7.     GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;  
  8.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_40MHz;  
  9.     GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;  
  10.     GPIO_Init(GPIOB, &GPIO_InitStructure);          //初始化GPIO端口  
  11. }  

分类: STM32L 2013-09-09 00:00 298人阅读 评论(0) 收藏 举报

STM32L GPIO 


1. 每个GPIO均有以下寄存器:
  • 4个32位配置寄存器:GPIOx_MODER、GPIOx_OTYPER、GPIOx_OSPEEDR和GPIOx_PUPDR
GPIOx_MODER :配置IO端口方向为输入/输出/AF/模拟
GPIOx_OTYPER :选择输出类型:推挽/开漏
GPIOx_OSPEEDR :选择IO速度(与IO端口方向无关)
GPIOx_PUPDR :选择上拉/下拉电阻(与IO端口方向无关)
  • 2个32位数据寄存器:GPIOx_IDR、GPIOx_ODR
  • 1个32位置位/复位寄存器:GPIOx_BSRR(使用该寄存器读写寄存器可以避免在读写期间被IRQ中断,该读写操作属于一个原子操作)
该寄存器允许置位/复位GPIOx_ODR上指定的一位,GPIOx_ODR上每位关联到两个控制位:GPIOx_BSRR:BSRR(i) [Bits 15:0]和 GPIOx_BSRR:BSRR(i+SIZE)[Bits31:16];往GPIOx_BSRR:BSRR(i) [Bits 15:0]写1 可以置位对应的ODR;往GPIOx_BSRR:BSRR(i) [Bits 31:16]写1 可以置位对应的ODR;往该寄存器写0不会产生任何影响
  • 1个32位锁定寄存器:GPIOx_LCKR
必需通过通过一个特殊的读写时序才能写入该寄存器,但时序正确时,bit16会置位(lock key active),bits[15:0]显示哪些IO端口被锁定了,端口被锁定之后直到下一个复位才能解锁,锁定之后以下寄存器将被冻结:GPIOx_MODER、GPIOx_OTYPER、GPIOx_OSPEEDR、GPIOx_PUPDR、GPIOx_AFRH、GPIOx_AFRL
  • 2个复用功能寄存器:GPIOx_AFRH、GPIOx_AFRL

2. 每个GPIO端口均可单独设置为以下模式:
  • 输入+悬空
  • 输入+上拉
  • 输入+下拉
  • 模拟(用作ADC、DAC输出或者捕获输入情况下)
  • 输出+开漏+上拉/下拉(输出模式下GPIO的输出速度是可配置的)
  • 输出+推挽+上拉/下拉
  • 复用功能+推挽+上拉/下拉
  • 复用功能+开漏+上拉/下拉


下图为GPIO的架构图:



3. GPIO一般用途

  1. 默认情况或者刚复位后,所有IO端口被设置为输入+悬空模式,除了调试接口默认设置为了复用功能+上拉/下拉
  2. 当端口被设置为输出的时候,修改GPIOx_ODR对应可改变输出高低电平(一般会使用推挽或者开漏输出(输出低电平时,只有N-MOS是接通的))
  3. 当端口被设置为输入的时候,每个AHB总线时钟均会捕获端口上高低电平,并存放在GPIOx_IDR寄存器
  4. 所有的GPIO端口均可通过配置寄存器使能或不使能内部弱上拉/弱下拉




4 .I/O端口多路复用及映射

IO端口通过一个内部的多路选择器以允许在同一时刻只使用一种复用功能,这样使得多个外围电路共享同样的IO端口
每个IO端口可以通过配置GPIOx_AFRL和GPIOx_AFRH设置所使能的复用功能(AF0~AF15)
  • 复位之后,所有的IO连接到复用功能0(AF0)
  • 外围电路的复用功能映射到AF1~AF14
  • Cortex-M3 EVENTOUT映射到AF15
以下说明如何使用复用功能:
  • System Function:配置IO端口使能的复用功能(JTAG/SWD,在复位之后对应端口会被调试器设置为调试功能下且不受GPIO寄存器的控制;RTC_50HZ,对应端口需要设置为输入+悬空;MCO,该端口必需配置在复用模式下)
  • GPIO:根据需要配置GPIOx_MODER设置IO端口工作模式(输入、输入/模拟)
  • Perpheral‘s Alternate Function:对于ADC/DAC,配置IO为模拟;对于其他外围功能,配置GPIOx_MODER、GPIOx_OTYPE、GPIOx_PUPDR、GPIOx_OSPEEDER
  • EVENTOUT:配置IO端口复用功能AF15,用于输出Cortex-M3 EVENTOUT信号




5. 外部中断/唤醒 

所有的IO端口均有外部中断功能,使用外部中断功能时,IO端口必需设置为输入模式

6. 输入模式配置

当IO端口配置为输入模式时:
  • 输出模式被禁用
  • 施密特触发器被激活
  • 根据GPIOx_PUPDR寄存器使能上拉/下拉电阻
  • 每个AHB时钟均会采样IO端口上的值存放到输入数据寄存器中
  • 通过读取输入数据寄存器可以检测IO状态

7. 输出模式配置

当IO端口配置为输出模式时:
  • 输出模式使能
  • 施密特出发器被激活
--  开漏模式时:输出0时,N-MOS导通(P-MOS任何情况下不会导通)
--  推挽模式时:输出0时,N-MOS导通;输出1时,P-MOS导通 
  • 根据GPIOx_PUPDR寄存器使能弱上拉/下拉
  • 每个AHB时钟均会采样IO端口上的值存放到输入数据寄存器中
  • 通过读取输入数据寄存器可以检测IO状态
  • 通过读取输出数据寄存器可以得到最后写入的值


8. 复用功能配置

当IO端口配置为复用功能时:
  • 输出模式下可配置为开漏或推挽
  • 复用功能的输出信号将驱动输出缓冲区
  • 输入端的施密特触发器被激活
  • 根据GPIOx_PUPDR寄存器使能弱上拉/下拉
  • 每个AHB时钟均会采样IO端口上的值存放到输入数据寄存器中
  • 通过读取输入数据寄存器可以检测IO状态


9. 模拟模式配置

当IO端口配置为模拟模式时:
  • 输出模式被禁用
  • 输入模式下的施密特触发器被激活(为每个IO口的模拟值提供零功耗,施密特触发器的输出端被强制输出为0)
  • 弱上拉/下拉被禁用
  • 读取输入寄存器获取到0


10. 外部时钟/外部晶振端口复用

  • 没有使用LSE时,OSC32_IN和OSC32_OUT 可配置为一般用途的IO端口
  • 没有使用HSE时,OSC_IN和OSC_OUT 可配置为一般用途的IO端口

11. 选择RTC_AF1复用功能

STM32L152XX拥有以下特性
  • 两个GPIO端口可配置为唤醒源WKUP1和WKUP3
  • 一个GPIO端口可配置为唤醒源WKUP2,可用于检测篡改、时间戳事件,输出RTC AFO_ALARM、AFO_CALIB
RTC_AF1端口(PC13)可配置为以下功能:
  • 唤醒源(WKUP2):配置PWR_CSR寄存器中的EWUP2位
  • RTC AFO_ALARM输出:根据RTC_CR寄存器中的OSEL[1:0]输出可配置为:RTC Alarm A、 RTC Alarm B、RTC Wakeup
  • RTC AFO_CALIB输出:配置RTC_CR寄存器中的COE[23]位
  • RTC AFI_TAMPER1 : 篡改事件检测
  • 时间戳事件检测

12. 初始化GPIO端口例子

  1. void Init_GPIOS(void){  
  2.     GPIO_InitTypeDef GPIO_InitStructure;            //定义初始化结构体  
  3.     RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB,ENABLE);  //使能对应AHB总线时钟  
  4.   
  5.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;  //根据需求配置GPIO工作模式  
  6.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;  
  7.     GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;  
  8.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_40MHz;  
  9.     GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;  
  10.     GPIO_Init(GPIOB, &GPIO_InitStructure);          //初始化GPIO端口  
  11. }  


本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
GPIO内部结构及工作原理
【嵌入式】STM32学习(3)——GPIO的8种工作方式及相关寄存器说明
STM32的8种GPIO输入输出模式深入详解
华大电子MCU-CIU32F011x3、CIU32F031x5通用输入输出
明解STM32—GPIO理论基础知识篇之寄存器原理
一文看懂GPIO!
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服