STM32学习入门程序解释GPIO.doc
《STM32学习入门程序解释GPIO.doc》由会员分享,可在线阅读,更多相关《STM32学习入门程序解释GPIO.doc(24页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、-_接触了 STM32 的开发板快一周了,拿到板子厂商提供了些 DEMO 程序,其他想自己学习,看了 ST 的资料手册,感觉看下来,一个工具还是不知道怎么用,还好现在网络强大,在论坛上可以去找自己需要的资料.我把搜集的资料整理了一下,以及自己加了一些自己的,方便自己以后再用到,方便查找,同时和网友们一起分享,希望你们有什么新的想法也提出来,一起分享.开始吧!嘿嘿简述简述1STM321STM32 的输入输出管脚有下面的输入输出管脚有下面 8 8 种可能的配置种可能的配置:(:(4 4 输入输入+2+2 输出输出+2+2复用复用输出)输出)-_ 浮空输入浮空输入_IN_FLOATING 带上拉输入
2、带上拉输入_IPU 带下拉输入带下拉输入_IPD (所谓上拉就是接一电阻到电源;下拉就是接一电阻到地。也就是说带所谓上拉就是接一电阻到电源;下拉就是接一电阻到地。也就是说带上拉就是口初始的时候是高电平,下拉就是低电平。上拉就是口初始的时候是高电平,下拉就是低电平。) 模拟输入模拟输入_AIN 开漏输出开漏输出_OUT_OD 推挽输出推挽输出_OUT_PP 复用功能的推挽输出复用功能的推挽输出_AF_PP 复用功能的开漏输出复用功能的开漏输出_AF_OD1.1 I/O 口的输出模式下,有口的输出模式下,有 3 种输出速度可选种输出速度可选(2MHz、10MHz和和 50MHz),这个速度是指,这
3、个速度是指 I/O 口驱动电路的响应速度而不是输出信号口驱动电路的响应速度而不是输出信号的速度,输出信号的速度与程序有关(芯片内部在的速度,输出信号的速度与程序有关(芯片内部在 I/O 口的输出部分口的输出部分安排了多个响应速度不同的输出驱动电路,用户可以根据自己的需要安排了多个响应速度不同的输出驱动电路,用户可以根据自己的需要选择合适的驱动电路)。通过选择速度来选择不同的输出驱动模块,选择合适的驱动电路)。通过选择速度来选择不同的输出驱动模块,达到最佳的噪声控制和降低功耗的目的。高频的驱动电路,噪声也高,达到最佳的噪声控制和降低功耗的目的。高频的驱动电路,噪声也高,当不需要高的输出频率时,请
4、选用低频驱动电路,这样非常有利于提当不需要高的输出频率时,请选用低频驱动电路,这样非常有利于提高系统的高系统的 EMI 性能。当然如果要输出较高频率的信号,但却选用了较性能。当然如果要输出较高频率的信号,但却选用了较-_低频率的驱动模块,很可能会得到失真的输出信号。关键是低频率的驱动模块,很可能会得到失真的输出信号。关键是 GPIO 的的引脚速度跟应用匹配(推荐引脚速度跟应用匹配(推荐 10 倍以上?)。比如:倍以上?)。比如:1.1.1 对于串口,假如最大波特率只需对于串口,假如最大波特率只需 115.2k,那么用,那么用 2M 的的GPIO 的引脚速度就够了,既省电也噪声小。的引脚速度就够
5、了,既省电也噪声小。1.1.2 对于对于 I2C 接口,假如使用接口,假如使用 400k 波特率,若想把余量留大些,波特率,若想把余量留大些,那么用那么用 2M 的的 GPIO 的引脚速度或许不够,这时可以选用的引脚速度或许不够,这时可以选用 10M 的的GPIO 引脚速度。引脚速度。1.1.3 对于对于 SPI 接口,假如使用接口,假如使用 18M 或或 9M 波特率,用波特率,用 10M 的的GPIO 的引脚速度显然不够了,需要选用的引脚速度显然不够了,需要选用 50M 的的 GPIO 的引脚速度。的引脚速度。输入模式。输入模式。1.4 所有端口都有外部中断能力。为了使用外部中断线,端口必
6、所有端口都有外部中断能力。为了使用外部中断线,端口必须配置成输入模式。须配置成输入模式。1.5 GPIO 口的配置具有上锁功能,当配置好口的配置具有上锁功能,当配置好 GPIO 口后,可以通口后,可以通过程序锁住配置组合,直到下次芯片复位才能解锁。过程序锁住配置组合,直到下次芯片复位才能解锁。2 在在 STM32 中如何配置片内外设使用的中如何配置片内外设使用的 IO 端口端口首先,一个外设经过首先,一个外设经过 配置输入的时钟和配置输入的时钟和 初始化后即被激活初始化后即被激活(开启开启);如果使用该外设的输入输出管脚,则需要配置相应的如果使用该外设的输入输出管脚,则需要配置相应的 GPIO
7、 端口端口-_(否则该外设对应的输入输出管脚可以做普通(否则该外设对应的输入输出管脚可以做普通 GPIO 管脚使用);管脚使用);再对外设进行详细配置。再对外设进行详细配置。对应到外设的输入输出功能有下述三种情况:对应到外设的输入输出功能有下述三种情况:一、外设对应的管脚为输出:需要根据外围电路的配置选择对应的管一、外设对应的管脚为输出:需要根据外围电路的配置选择对应的管脚为复用功能的推挽输出或复用功能的开漏输出。脚为复用功能的推挽输出或复用功能的开漏输出。二、外设对应的管脚为输入:则根据外围电路的配置可以选择浮空输二、外设对应的管脚为输入:则根据外围电路的配置可以选择浮空输入、带上拉输入或带
8、下拉输入。入、带上拉输入或带下拉输入。三、三、ADC 对应的管脚:配置管脚为模拟输入。对应的管脚:配置管脚为模拟输入。 如果把端口配置成复用输出功能,则引脚和输出寄存器断开,并和片如果把端口配置成复用输出功能,则引脚和输出寄存器断开,并和片上外设的输出信号连接。将管脚配置成复用输出功能后,如果外设没上外设的输出信号连接。将管脚配置成复用输出功能后,如果外设没有被激活,那么它的输出将不确定。有被激活,那么它的输出将不确定。 3 通用通用 IO 端口(端口(GPIO)初始化:)初始化:3.1 GPIO 初始化初始化3.1.1 RCC_APB2PeriphClockCmd(RCC_APB2Perip
9、h_GPIOA | B | C, ENABLE):使能:使能 APB2 总线外设时钟总线外设时钟3.1.2 RCC_ APB2PeriphResetCmd (RCC_APB2Periph_GPIOA | B | C, DISABLE):释放:释放 GPIO 复位复位-_3.2 配置各个配置各个 PIN 端口(模拟输入端口(模拟输入_AIN、输入浮空、输入浮空_IN_FLOATING、输入上拉、输入上拉_IPU、输入下拉、输入下拉_IPD、开漏输出、开漏输出_OUT_OD、推挽式输出、推挽式输出_OUT_PP、推挽式复用输出、推挽式复用输出_AF_PP、开漏、开漏复用输出复用输出_AF_OD)3
10、.3 GPIO 初始化完成初始化完成= =最近刚开始学习最近刚开始学习 STM32,所以从最基本的,所以从最基本的 GPIO 开始学起;首先看看开始学起;首先看看STM32 的的 datasheet 上对上对 GPIO 口的简单介绍:每个口的简单介绍:每个 GPI/O 端口有端口有两个两个 32 位配置寄存器位配置寄存器(GPIOx_CRL,GPIOx_CRH),两个,两个 32 位数据位数据寄存器寄存器(GPIOx_IDR,GPIOx_ODR),一个,一个 32 位置位位置位/复位寄存器复位寄存器(GPIOx_BSRR),一个,一个 16 位复位寄存器位复位寄存器(GPIOx_BRR)和一个
11、和一个 32 位位锁定寄存器锁定寄存器(GPIOx_LCKR)。GPIO 端口的每个位可以由软件分别配置成多种模式。每个端口的每个位可以由软件分别配置成多种模式。每个 I/O 端端口位可以自由编程,然而口位可以自由编程,然而 I/0 端口寄存器必须按端口寄存器必须按 32 位字被访问位字被访问(不允不允许半字或字节访问许半字或字节访问)。GPIOx_BSRR 和和 GPIOx_BRR 寄存器允许对寄存器允许对任何任何 GPIO 寄存器的读寄存器的读/更改的独立访问;这样,在读和更改访问之间更改的独立访问;这样,在读和更改访问之间产生产生 IRQ 时不会发生危险。时不会发生危险。端口位配置端口位
12、配置 CNFx1:0=xxb,MODEx1:0=xxb-_再看再看 GPIO 功能很强大:功能很强大:1.通用通用 I/O(GPIO):最最基本的功能,可以驱动:最最基本的功能,可以驱动 LED、可以产生、可以产生PWM、可以驱动蜂鸣器等等;、可以驱动蜂鸣器等等;2.单独的位设置或位清除:方便软体作业,程序简单。端口配置好以单独的位设置或位清除:方便软体作业,程序简单。端口配置好以后只需后只需 GPIO_SetBits(GPIOx, GPIO_Pin_x)就可以实现对就可以实现对 GPIOx 的的pinx 位为高电平;位为高电平;3.外部中断外部中断/唤醒线:端口必须配置成输入模式时,所有端口
13、都有外部唤醒线:端口必须配置成输入模式时,所有端口都有外部中断能力;中断能力;4.复用功能复用功能(AF):复用功能的端口兼有:复用功能的端口兼有 IO 功能等。复位期间和刚复位功能等。复位期间和刚复位后,复用功能未开启,后,复用功能未开启,I/O 端口被配置成浮空输入模式:端口被配置成浮空输入模式:(CNFx1:0=01b,MODEx1:0=00b)。5.软件重新映射软件重新映射 I/O 复用功能:为了使不同器件封装的外设复用功能:为了使不同器件封装的外设 I/O 功能的功能的数量达到最优,可以把一些复用功能重新映射到其他一些脚上。这可数量达到最优,可以把一些复用功能重新映射到其他一些脚上。
14、这可以通过软件配置相应的寄存器来完成。这时,复用功能就不再映射到以通过软件配置相应的寄存器来完成。这时,复用功能就不再映射到它们的原始引脚上了它们的原始引脚上了;-_6.GPIO 锁定机制:当在一个端口位上执行了所定锁定机制:当在一个端口位上执行了所定(LOCK)程序,在下程序,在下一次复位之前,将不能再更改端口位的配置。一次复位之前,将不能再更改端口位的配置。GPIO 基本设置基本设置GPIOMode_TypeDef GPIO mode 定义及偏移地址定义及偏移地址GPIO_Mode_AIN = 0x0, /模拟输入模拟输入GPIO_Mode_IN_FLOATING = 0x04, /悬空输
15、入悬空输入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 enum GPIO_Speed_10MHz = 1,-_GPIO_Speed_2MHz, GPIO_Speed_50MHzGPIOSpee
16、d_TypeDef;#define IS_GPIO_SPEED(SPEED) (SPEED = GPIO_Speed_10MHz) | (SPEED = GPIO_Speed_2MHz) | (SPEED = GPIO_Speed_50MHz)做一个做一个 GPIO 输出的试验输出的试验当当 I/O 端口被配置为推挽模式输出时:输出寄存器上的端口被配置为推挽模式输出时:输出寄存器上的 0 激活激活 N-MOS,而输,而输出寄存器上的出寄存器上的 1 将激活将激活 P-MOS。用这段程序实现:用这段程序实现:GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out
17、_PP;int main(void)#ifdef DEBUGdebug();#endif-_/* 设置系统时钟设置系统时钟 */RCC_Configuration();/* 嵌套中断设置嵌套中断设置*/NVIC_Configuration();/* 激活激活 GPIOC clock */RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);/* Configure PC.04, PC.05, PC.06 and PC.07 as Output push-pull */GPIO_InitStructure.GPIO_Pin = GPIO_Pin
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- STM32 学习 入门 程序 解释 GPIO
限制150内