STM32GPIO使用笔记

上传人:桔**** 文档编号:544823663 上传时间:2023-05-13 格式:DOC 页数:10 大小:92KB
返回 下载 相关 举报
STM32GPIO使用笔记_第1页
第1页 / 共10页
STM32GPIO使用笔记_第2页
第2页 / 共10页
STM32GPIO使用笔记_第3页
第3页 / 共10页
STM32GPIO使用笔记_第4页
第4页 / 共10页
STM32GPIO使用笔记_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《STM32GPIO使用笔记》由会员分享,可在线阅读,更多相关《STM32GPIO使用笔记(10页珍藏版)》请在金锄头文库上搜索。

1、STM32之GPIO笔记1 STM32的输入输出管脚有下面 8种可能的配置:(4输入+2输出+2复用输出) 浮空输入_IN_FLOATING 带上拉输入_IPU 带下拉输入_IPD 模拟输入_AIN 开漏输出_OUT_OD 推挽输出_OUT_PP 复用功能的推挽输出_AF_PP 复用功能的开漏输出_AF_OD1.1 I/O 口的输出模式下,有 3种输出速度可选(2MHz、10MHz 和50MHz),这个速度是指I/O 口驱动电路的响应速度而不是输出信号 的速度,输出信号的速度与程序有关(芯片内部在I/O 口的输出部分安排了多个响应速度不同的输出驱动电路,用户可以根据自己的需要选择合适的驱动电路

2、)。通过选择速度来选择不同的输出驱动模块,达到最 佳的噪声控制和降低功耗的目的。高频的驱动电路,噪声也高,当不需 要高的输出频率时,请选用低频驱动电路,这样非常有利于提高系统的 EMI性能。当然如果要输出较高频率的信号, 但却选用了较低频率的驱动模块,很可能会得到失真的输出信号。关键是GPIO的引脚速度跟应用匹配(推荐10倍以上?)。比如:1.1.1 对于串口,假如最大波特率只需115.2k,那么用2M的GPIO 的引脚速度就够了,既省电也噪声小。1.1.2 对于I2C接口,假如使用400k波特率,若想把余量留大些, 那么用2M的GPIO的引脚速度或许不够,这时可以选用10M的GPIO 引脚速

3、度。1.1.3 对于SPI接口,假如使用18M或9M波特率,用10M的GPIO的引脚速度显然不够了,需要选用50M的GPIO的引脚速度。1.2 GPIO 口设为输入时,输出驱动电路与端口是断开,所以输出 速度配置无意义。1.3 在复位期间和刚复位后,复用功能未开启,I/O端口被配置成浮空输入模式。1.4 所有端口都有外部中断能力。 为了使用外部中断线,端口必须 配置成输入模式。1.5 GPIO 口的配置具有上锁功能,当配置好 GPIO 口后,可以通 过程序锁住配置组合,直到下次芯片复位才能解锁2 在STM32中如何配置片内外设使用的10端口首先,一个外设经过配置输入的时钟和初始化后即被激活(开

4、 启);如果使用该外设的输入输出管脚,则需要配置相应的GPI0端口(否则该外设对应的输入输出管脚可以做普通GPI0管脚使用);再对外设进行详细配置。对应到外设的输入输出功能有下述三种情况:一、外设对应的管脚为输出:需要根据外围电路的配置选择对应的管脚 为复用功能的推挽输出或复用功能的开漏输出。二、外设对应的管脚为输入:贝V根据外围电路的配置可以选择浮空输入、 带上拉输入或带下拉输入。三、ADC对应的管脚:配置管脚为模拟输入。如果把端口配置成复用输出功能, 则引脚和输出寄存器断开,并和片上 外设的输出信号连接。将管脚配置成复用输出功能后, 如果外设没有被 激活,那么它的输出将不确定。3 通用I0

5、端口( GPI0)初始化:3.1 GPI0初始化3.1.1 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA| B | C, ENABLE):使能APB2总线外设时钟3.1.2 RCC_ APB2PeriphResetCmd(RCC_APB2Periph_GPI0A | B | C,DISABLE):释放 GPIO 复位3.2 配置各个PIN端口(模拟输入_AIN、输入浮空_IN_FLOATING、输入上拉_IPU、输入下拉PD、开漏输出_OUT_OD、 推挽式输出_OUT_PP、推挽式复用输出_AF_PP、开漏复用输出_AF_OD)3.3 GPIO初始化

6、完成最近刚开始学习STM32,所以从最基本的GPIO开始学起;首先看看STM32的datasheet上对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 和G

7、PIOx_BRR 寄存器允许对任何 GPIO寄存器的读/更改的独立访问;这样,在读和更改访问之间产生 IRQ时不会发生危险。端口位配置 CNFx1:0=xxb ,MODEx1:0=xxb再看GPIO功能很强大:1.通用l/O(GPIO):最最基本的功能,可以驱动 LED、可以产生PWM、可以驱动蜂鸣器等等;2单独的位设置或位清除:方便软体作业,程序简单。端口配置好以后只需 GPIO_SetBits(GPIOx, GPIO_Pin_x)就可以实现对 GPIOx 的pinx位为高电平;3外部中断/唤醒线:端口必须配置成输入模式时,所有端口都有外部中断能力;4复用功能(AF):复用功能的端口兼有10

8、功能等。复位期间和刚复位后,复用功能未开启,I/O端口被配置成浮空输入模式:(CNFx1:0=01b ,MODEx1:0=00b)。5软件重新映射I/O复用功能:为了使不同器件封装的外设I/O功能的数量达到最优,可以把一些复用功能重新映射到其他一些脚上。这可以通过软件配置相应的寄存器来完成。这时,复用功能就不再映射到它们 的原始引脚上了6.GPIO锁定机制:当在一个端口位上执行了所定(LOCK)程序,在下一 次复位之前,将不能再更改端口位的配置。GPIO基本设置GPIOMode_TypeDef GPIO mode定义及偏移地址GPIO_Mode_AIN = 0x0,模拟输入GPIO_Mode_

9、IN_FLOATING= 0x04, / 悬空输入GPIO_Mode_IPD = 0x28,下拉输入GPIO_Mode_IPU = 0x48,上拉输入GPIO_Mode_Out_OD = 0x14, / 开漏输出GPIO_Mode_Out_PP = 0x10, / 推挽输出GPIO_Mode_AF_OD = 0x1C,开漏复用GPIO_Mode_AF_PP = 0x18/ 推挽复用GPIO输入输出速度选择:typedef enumGPIO_Speed_10MHz = 1,GPIO_Speed_2MH z,GPIO_Speed_50MHzGPIOSpeed_TypeDef;#defi ne IS

10、_GPIO_SPEED(SPEED) (SPEED =GPIO_Speed_10MHz) |(SPEED = GPI0_Speed_2MHz) | (SPEED =GPIO_Speed_50MHz)做一个GPIO输出的试验当I/O端口被配置为推挽模式输出时:输出寄存器上的0激活N-MOS , 而输出寄存器上的1将激活P-MOS。用这段程序实现:GPIO_I nitStructure.GPIO_Mode =GPIO_Mode_Out_PP;int main( void)#ifdef DEBUGdebug();#en dif/*设置系统时钟*/RCC_Co nfiguratio n();/*嵌套中

11、断设置*/NVIC_Co nfiguratio n();/* 激活 GPIOC clock */RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);/* Con figure PC.04, PC.05, PC.06 and PC.07 as Output push-pull*/GPIO_I nitStructure.GPIO_Pin = GPIO_Pi n_4 | GPI0_Pin_5 |GPI0_Pin_6 |GPI0_Pin_7;GPIO_I nitStructure.GPIO_Speed = GPIO_Speed_50MH z;GPIO

12、_I nitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_I nit(GPIOC, & GPIO_I ni tStructure);while (1)/*本试验仅能实现LED1亮、熄功能*/GPIO_SetBits(GPIOC, GPIO_Pin_4); / 设置 PC.04 pin 为高电平, 点亮LED1Delay();GPIO_ResetBits(GPIOC, GPIO_Pin_4); / 设置 PC.04 pin 为低电平,熄灭LED1Delay();做一个GPIO输入的试验:以 EK-STM32F中LCDdemo 做例子 这个试验中把GPIO

13、的PD.04做为按键输入,当下降沿来临时触发。LCDdemo中的例程如下:首先配置按键 PD.03, PD.04为按键输入接 口。void Button_Con fig(void)GPIO_I ni tTypeDef GPIO_I nitStructure;/* En able GPIOD clock */RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE);/* Configure PD.03, PD.04 as output push-pull */GPIO_I nitStructure.GPIO_Pin = GPIO_Pi n_3 | G

14、PIO_Pin_4 ;GPIO_I nitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_I nitStructure.GPIO_Speed = GPIO_Speed_50MH z;GPIO_I nit(GPIOD, & GPIO_I ni tStructure);下面为按键作用是启动外部中断GPIO_EXTILi neCo nfig(GPIO_PortSourceGPIOD,GPIO_P in Source3);EXTI_I ni tStructure.EXTI_Li ne = EXTI_Li ne3;设定外部中断3EXTI_I ni tStructure.EXTI_Mode = EXTI_Mode_I nterrupt; /设定中断模式EXTI_I nitStructure.EXTI_Trigger = EXTI_Trigger_Falli ng; /设定下降沿触发模式EXTI_I nitStructure.EXTI_L in eCmd = ENABLE;EXTI_I nit(&EXTI_I ni tStructure);

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号