历史上的今天
返回首页

历史上的今天

今天是:2025年01月10日(星期五)

正在发生

2021年01月10日 | STM32L--GPIO

2021-01-10 来源:eefocus

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端口例子

void Init_GPIOS(void){

GPIO_InitTypeDef GPIO_InitStructure; //定义初始化结构体

RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB,ENABLE); //使能对应AHB总线时钟

 

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7; //根据需求配置GPIO工作模式

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;

GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_40MHz;

GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;

GPIO_Init(GPIOB, &GPIO_InitStructure); //初始化GPIO端口

}


推荐阅读

史海拾趣

聚辰(Giantec)公司的发展小趣事

港源公司深知品质是企业生存之本。公司先后通过了ISO9001质量管理体系认证、ISO14001环境体系认证、ISO45001职业健康安全管理体系认证以及IATF16949汽车质量体系认证等国际权威认证。这些认证不仅证明了港源公司在品质管理方面的卓越能力,还为公司赢得了国内外客户的广泛信赖和好评。港源公司坚持“诚信、创新、和谐、共赢”的企业核心价值观,致力于为客户提供高品质、高可靠性的产品和服务。

Advanced Pressure Technology公司的发展小趣事

随着销售量的持续增长,APT公司很快便超出了其初始设施的产能。为了满足市场需求,公司于1992年迁至加利福尼亚州纳帕市的一座占地36,000平方英尺的工厂,并配备了2,000平方英尺的100级洁净室。新工厂的启用为APT公司提供了更大的发展空间,也进一步提升了其产品质量和产能。同时,APT公司始终致力于技术创新,不断推出适应市场需求的新产品,进一步巩固了其在气体输送领域的领先地位。

Enterpoint公司的发展小趣事

为了进一步扩大市场份额,Enterpoint公司开始积极拓展国际市场。他们通过参加国际电子展会、建立海外销售网络等方式,不断提升品牌知名度和影响力。同时,公司还积极寻求与国际知名企业的合作机会,通过技术交流和产品合作,不断提升自身的技术实力和产品质量。

Hirect公司的发展小趣事
首先观察并记录故障现象,如输出电压异常、电流过大、设备过热等。
Euroquartz公司的发展小趣事

随着全球电子制造产业的不断发展,Euroquartz也积极拓展国际市场。公司凭借其高品质的产品和专业的技术服务,赢得了全球客户的信赖和支持。如今,Euroquartz的产品已经覆盖全球90多个国家和地区,为全球电子制造产业提供了重要的石英晶振、振荡器、滤波器以及其它频率相关产品。

High Tech Chips Inc公司的发展小趣事

Euroquartz Limited成立于1982年,其发展历程中,1987年的一次收购具有重要意义。这一年,Euroquartz收购了Brookes Crystals,这是一家在第二次世界大战期间形成的英国石英晶体制造商。这一收购使Euroquartz在石英晶体领域获得了重要的技术积累和市场地位,成为了英国重要的变频控制产品制造商。

问答坊 | AI 解惑

混音器电路

这是网上找的一个二输入混音器电路,但是我在用MULTISIM模拟时发现,他好像不是把两个信号简单的叠加,似乎把其中一个信号反相后再叠加? 是这样么?原理是什么?…

查看全部问答>

交叉编译apache遇到的问题

网上流传的大都是关于apache1.3.39的交叉编译步骤,我下载的http-2.2.9,找到一个此版本的交叉编译方法:http://203.208.37.104/search?q=cache:hrIbS-XEbrYJ:blog.xuite.net/bunny/blog/19764280+srclib/apr+arm&cd=2&hl=zh-CN&ct=clnk&gl=cn&st_u ...…

查看全部问答>

DM9000用于嵌入式工控产品的问题

我的嵌入式产品用的DM9000a, 用一台电脑能ping 通(偶尔丢包),不断电情况下,切换成另一台电脑,有时能ping通,有时ping 不通,并且10M/100M以及LINK灯灭,怎么回事啊?谢谢 …

查看全部问答>

S3C2410触摸屏驱动移植遇到问题

在将CE6.0的触摸屏驱动移植到FS2410时,编译通过了,但却得不到有效的触摸信息。得到的部分调试信息如下:   11941 PID:400002 TID:b1000a RELFSD: Opening file FS2410Touch.dll from desktop PB Debugger Loaded symbols for \'C:\\W ...…

查看全部问答>

WinCE下如何判断一个程序是否已经运行?

参考了一些桌面上的方案,发现在CE4.2下面都用不了,要么是mutex函数不支持多个参数,要么就是用不了Process类,大家能不能帮忙想想办法啊,看怎么实现判断程序是否运行的效果,如果已经运行了就不要再运行。…

查看全部问答>

求教关于TIMERA的捕获问题

使用的芯片是413 采用TA1的捕获模式从P1.2口测量频率周期,在测试板上使用按键模拟待测脉冲信号,结果发现按一次键会发生很多次捕获中断,为查明中断源有查TAIV,结果令人差异。代码如下: #include "msp430x41x.h" unsigned int m=1,l=1,o=1 ...…

查看全部问答>

请问430的C语言指令,一条指令就是一个时钟周期吗?

请问MSP430F149的C语言指令,一条指令就是一个时钟周期吗? 如果用汇编语言来写,一条指令就是一个周期对吗? 如果采用8MHZ的主时钟,一条指令就是125ns对吗? 从MSP430F149输出的MCLK是TTL电平吗?如果驱动COMS的串行时钟输入端要加上拉电阻吗 ...…

查看全部问答>

关于ds18b20读写时序的控制

最近一直在做温度传感器ds18b20的读写控制,感觉读写时序已经没有问题了,但是读出的数据始终是0,希望好心哥哥指点一下啊,我用ise 平台,vhdl语言写的代码~~~~ 芯片手册看了几百次了~求助啊…

查看全部问答>

求lm3s811芯片ft2232烧录的驱动以及烧录软件

麻烦有的能给我发一份吗?谢谢了.愿长期想各位请教!704114178@qq.com…

查看全部问答>