最近在老师交给了一个项目,需要用到STM32单片机,这里就在学习的过程中所注意到的一些地方或细节部分记录了下来,笔者所使用的是STM32F407ZGT6芯片(探索者)。
查看芯片的数据手册
这个表格对每个I/O口的功能进行了很详细的介绍。每个I/O除了作为I/O使用外,还可以作为其他的复用。已以PE2口为例,“Alternate functions”所展示就是其可以复用的功能。
芯片结构
F3系列和F4系列芯片的芯片结构大体相似,区别在于F4将F3芯片的上下拉结构配置由内部转到了外部。如下图所示。
同时大家注意到在第二张图的右边有一个“TF:5V容忍”,F4芯片I/O口大部分也支持5V容忍,5V容忍就是说STM32的输出电压是3.3V,但是也容忍输出5V。
那么哪些I/O口支持5V容忍了,这个得看最上面的芯片手册,如果芯片后面有一栏写有“TF”标示,即说明支持5V容忍。
GPIO相关配置寄存器
每组GPIO口包含10组寄存器。
一个端口模式寄存器(GPIOx_MODER) 一个端口输出类型寄存器(GPIOx_OTYPER) 一个端口输出速度寄存器(GPIOx_OSPEEDR) 一个端口上拉下拉寄存器(GPIOx_PUPDR) 前4个为32位配置寄存器 一个端口输入数据寄存器(GPIOx_IDR) 一个端口输出数据寄存器(GPIOx_ODR) 中间2个为32位数据寄存器 一个端口置位/复位寄存器(GPIOx_BSRR) 一个端口配置锁存寄存器(GPIOx_LCKR) 两个复位功能寄存器(低位GPIOx_AFRL & GPIOx_AFRH)
如果配置一个IO口需要2个位,那么刚好32位寄存器配置一组IO口16个IO口
如果配置一个IO口只需要1个位,一般高16位保留
BSRR寄存器32位分为低16位BSRRL和高16位BSRRH,BSRRL配置一组IO口的16个IO口的置位状态(1),BSRRH配置复位状态(0)。
端口模式寄存器(GPIOx_MODER)
MODER寄存器没2位控制一个IO,32位就控制16个IO。以GPIOA为例,它就有GPIOA0~15,如果配置为’00’,则为“输入(复位状态)”模式。那么32位刚好可以配置一组IO的16个IO。
端口输出类型寄存器(GPIOx_OTYPER)
但是只有输出模式是不够的,还需要输出类型。
OTYPER寄存器每位控制一个IO,低16位控制一组IO的16个IO,高16位保留没有用。
每个IO只用到一位,可以设置位0或者1。如果设置为0则为“输出推挽”,若要设置为“复用输出推挽”,则将端口模式寄存器设置为“复用功能模式”,再将这里设置为“输出推挽”模式即可。
提示 任何方式操作IO口,都必须先使能相应IO口始终。
‘RCC_AHB1PeriphColckCmd();’
其它的寄存器设置方法与这两个类似,这里不过多介绍。
以上图片均来自探索者光盘自带的资料。
如果不妥地方,还请各位读者多多指出。需要更详细资料的也可以和笔者联系