一、寄存器说明:
STM32F4 GPIO最多有9组,从GPIOA-GPIOI,每组IO有16个Pin,STM32F407有7组,所以一共有7*16=112个引脚,再加上PH0和PH1,一共有114个
对应一组有一套寄存器来进行控制,这一套寄存器里面常用的有8个:MODER、OTYPER、OSPEEDR、PUPDR(四个配置寄存器)、ODR、IDR (输入输出电平控制相关的寄存器)、BSRR(32 位置位/复位寄存器)、LCKR(32 位锁定寄存器)、AFRH、AFRL(复用功能选择寄存器)
1.MODER 寄存器
:该寄存器是
GPIO
端口模式控制32位寄存器,用于控制
GPIOx
的工作模式
每组IO下有16个IO口,该寄存器共32 位,每2个位控制1个IO
具体的控制方法,无非是赋0赋1,那就有四种可能,所以也能推出一个寄存器,最多能给定一组GPIO的16个Pin分别有4种可能,对应于Moder寄存器
所以最后通过MODER 寄存器控制得到的模式有输入/输出/复用/模拟四种,
只是还不太明白,因为还觉着模拟就应该是输入的一种,还是说分成了普通输入和模拟输入呢
2.OTYPER 寄存器
:根据对于MODER寄存器的分析,下面的直接看教材就能得到很好地理解了
当且仅当MODER寄存器在对应为为输出模式时,(即非00时?那模拟模式算什么,模拟难道也有输出么),OTYPER寄存器有效,因为是对输出进行配置,所以只有两种可能,也就是推挽和开漏
3.OSPEEDER 寄存器
:
两位的,设置3种速度,但是需要注意,设置的仅为输出速度
4.PUPDR 寄存器
:
用于控制是上拉、下拉还是既不上拉也不下拉,保留一个11,但是有不明白的是
对于输出来说也有上拉和下拉吗,开漏和推挽内本身应该没有这样上拉或是下拉的定义(那什么是上拉推挽,下拉推挽这种输出呢?)
5.ODR寄存器
6.IDR寄存器
7.BSRR寄存器
二、各种工作模式说明:
具体的工作模式就是八种,分别为:
1、输入浮空
2、输入上拉
3、输入下拉
4、模拟输入
5、开漏输出
6、推挽输出
7、推挽式复用功能
8、开漏式复用功能(复用的时候都是给复用成了输出的?)
一共有八种模式,一直都没详细的沉下心看,今天找一些文章好好看
http://www.openedv.com/posts/list/32730.htm
三、和IO相关的操作函数说明
1.配置相关:
step1:无论怎么样,都要先使能一组GPIO的时钟
step2:操作四个配置寄存器配制成想要的八种模式?和选定不同的输出速度
2.使用GPIO相关:
2.1控制/读出输出状态
这里说明了可以用GPIO_Write,确实在大多数情况应该是不用的,在正点原子的点灯的程序中,用的是
#setBits和ResetBits能够控制的只是对应引脚在PF9和PF10位置的高低,对应电路图可以看到,当PF9或PF10为高时,即在SetBits之后,是两边都高,没有压降,是暗的,在ReSetBits之后,一边低,另外一边高,是亮的
在ReadOutputData和ReadOutputDataBit中,能够做到读出对应的IO口的输出状态
2.2读取输入状态
2.3 常用的设置输出状态的方法-->设置BSRR寄存器的固件库设置方法
"""
不明白为什么有IO端口可以自动提供5V和3.3V的电,是硬件上自动设置的输出,是推挽还是开漏吗,还是什么别的IO的功能呢
"""
参考资料:
1.https://blog.csdn.net/JianZhiZG/article/details/99714785
2.正点原子-《STM32F407最小系统板开发指南-库函数版本_V1.1》
3.https://blog.csdn.net/weixin_42108484/article/details/80511568
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)