为什么要新增这个所谓番外呢?
是因为今天在做尝试做库的情况下又重新复习了一遍标准外设的配置操作,发现身为非科班的我确实在基础方面的不牢固,所以为了增加我的学习效率,特开此STM32番外篇来分门别类根据STM32标准库AI手册来讲解不同外设的配置和操作。
好了不水了,今天来讲一下stm32的GPIO的操作与配置。首先先看一下GPIO的寄存器结构
GPIO寄存器
至于什么是AFIO,本着实事求是的精神先忽略一下这个,我们只知道它涉及到IO复用部分,所以可以暂且搁置,毕竟目前我们不缺IO用/(ㄒoㄒ)/~~
GPIO寄存器
至于寄存器操作IO的部分,我会在接下来的几天里接触寄存器操作所以这里仅仅当作展示。 GPIO操作库函数
首先介绍一下
GPIO_DeInit();GPIO_AFIODeInit ();GPIO_StructInit() ;
这三个函数分别会将缺省值配置为IO进行基本配置,我们理解为默认模式。
GPIO_Init();用于初始化GPIO寄存器包含四个队GPIO的基本设置值分别为
GPIO_Pin,GPIO_Mode,GPIO_Speed,
其中GPIO_Pin是设置相应的管脚,
Mode为设置相应的管脚工作状态:
G PIO_Mode_AIN 模拟输入
GPIO_Mode_IN_FLOATING 浮空输入
GPIO_Mode_IPD 下拉输入
GPIO_Mode_IPU 上拉输入
GPIO_Mode_Out_OD 开漏输出
GPIO_Mode_Out_PP 推挽输出
GPIO_Mode_AF_OD 复用开漏输出
GPIO_Mode_AF_PP 复用推挽输出
Speed是设置选中国管脚的速率,分别有三个选项:
GPIO_Speed_10MHz 最高输出速率 10MHz
GPIO_Speed_2MHz 最高输出速率 2MHz
GPIO_Speed_50MHz 最高输出速率 50MHz
对GPIO的基本操作要通过一个结构体GPIO_InitTypeDef完成操作
完整的管脚定义为:
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);
这里就定义了A10管脚为浮空输入,扫描速率为10Mhz
特别要注意的是在实际操作中除了对管脚的声明配置外还要设置管脚的时钟,没有时钟设置的管脚是不能正常工作的,这里要特别注意!!!
函数 GPIO_ReadOutputDataBit
GPIO_ReadOutputData
GPIO_ReadInputDataBit
GPIO_ReadInputDat
这四个函数为读输入/输出的GPIO数据。因为这个单片机中管脚通常为数字管脚,所以一个管脚的值通常为0/1.读bit就是读一位GPIO的Pin值而Data为读若干个GPIO的输出输入数据,要便于区分读Date和读DataBit的区别。
实例:
u16 ReadValue;
ReadValue = GPIO_ReadInputData(GPIOC);
网友评论