一 GPIO基本原理与寄存器配置 1 GPIO基本结构和工作方式 参考资料:& J" O/ B" T6 D/ e 战舰/精英STM32F1开发板- P4 Z: Y. w2 I 《STM32F1开发指南-库函数版本》-第六章 跑马灯实验6.1小节 miniSTM32F1开发板 《STM32不完全手册-库函数版本》-第六章 跑马灯实验6.1小节! Z: J. O! s/ E1 k; g; y) @) P STM32F1xx官方资料2 y* V% a1 _' C( ] 《STM32中文参考手册V10》-第8章通用和复用功能IO(GPIO和AFIO)' \. D! f/ N1 R0 e 芯片数据手册(datasheet)# V+ a) Q- X- l) P* [ P, Y5 R IO说明:& o7 m- b7 C8 i2 K 战舰版和精英版144引脚如STM32F103ZET6 一共7组IO 每组IO口有16个IO一共112个IO,从GPIOA-GPIOG mini版如STM32F103RCT6 一共4组IO 一共16*3+3=51个IO GPIOA-GPIOD. ^0 ~3 [! `3 l, C' N6 s2 z 其中GPIOD只有GPIOD0-D2- Z3 X0 K4 N5 Y8 c; ]& S" b 注:STM32的大部分引脚除了当GPIO使用外,还可以复用为外设功能引脚(比如串口) 注:大部分IO可容忍5V(有FT标识) ! i' B8 l5 T% ^ g% ?8 ?, t GPIO工作方式 4种输入模式:8 q2 c, L6 m9 a5 r, P 输入浮空; G% R( s5 C$ k+ C1 u. K6 f 输入上拉 输入下拉4 |) ?: q% K4 l$ Q& _ 模拟输入 4种输出模式: 开漏输出 开漏复用功能% {! m7 l& v4 L: l6 f 推挽式输出 推挽式复用功能, S% l% U. z. B 参考资料:STM32八种IO口模式的区别.pdf 3种最大翻转速度:/ z3 @, l8 Q3 w( E% E% _8 Y 2MHZ 10MHZ 50MHZ 注:如果写进去1 N-MOS处于关闭,输出值是由外部上拉或下拉决定的,所以读取的值不一定和写进去的一样。 参考帖子:http://www.openedv.com/posts/list/21980.htm 注:: i8 ?) f' C9 D7 M 推挽输出可以输出强高低电平,连接数字器件;; G2 t+ C, v2 N9 d, y4 a 开漏输出只可以输出强低电平,高电平得靠外部电阻拉高。输出端相当于三极管的集电极,要得到高电平状态需要上拉电阻才行,适合做电流型的驱动,其吸收电流的能力相对强(一般20mA以内) } m; |2 Y3 Y/ c& q 2 GPIO寄存器说明 每组GPIO端口的寄存器包括: 两个32位配置寄存器(GPIOx_CRL,GPIOx_CRH), 两个32位数据寄存器(GPIOx_IDR和GPIOx_ODR),- M' s0 w- B+ V3 A 一个32位置位/复位寄存器(GPIOx_BSRR), 一个16位复位寄存器(GPIOx_BRR), 一个32位锁定寄存器(GPIOx_LCKR). 每个I/O端口位可以自由编程,然而I/O端口寄存器必须按32位字被访问(不允许半字或字节访问)' L1 x e3 P4 o% c# t: L1 u 每四位控制一个IO 低两位是MODE 高两位是CNF 具体参数设置需要按表所需。 ' v4 ^+ G) ^, |6 R; q1 M# L$ L( S 输入模式下配置CRL或CRH 需要配合ODR配置成上拉或下拉& J! a& @8 K, W' z6 s3 y # p6 B& g3 z; C- ]) @ 简单来说 配置BSRR可以单独对位操作,就是配置某一个位为1,其他位为0 时,配置0的不改变它本来的状态。而在ODR配置中,配0配1都会发生相应的改变。 BRR相当于BSRR的高16位。 * L. S( N8 ]! C; h$ g# H9 D 3 STM32F10x GPIO引脚说明 8 ?7 u, [4 E3 l" [ 注:所有IO都可以作为中断输入, [! A- h8 z" J |
【经验分享】STM32F1和STM32F4 区别
【经验分享】STM32F1系列之常用外设说明
【经验分享】STM32介绍
【经验分享】STM32F1x系列——Flash 模拟 EEPROM
【经验分享】STM32F1在MDK下新建标准库函数工程
【经验分享】stm32f1的存储器与复位
【经验分享】STM32F10X-架构
【经验分享】stm32F1 us延时函数
【经验分享】STM32F1之定时器
【经验分享】【stm32】stm32f1代码中core_cm3、system_stm32f10x、stm32f10x_conf、stm32f10x等文件的作用