关注 + 点赞 不错过精彩内容
大家好,我是硬核王同学,最近在做免费的嵌入式知识分享,帮助对嵌入式感兴趣的同学学习嵌入式、做项目、找工作!
操作STM32的GPIO需要三个步骤:
1.使用RCC打开GPIO的时钟;
2.使用GPIO_Init函数初始化GPIO;
3.使用输出或输入函数来控制GPIO口
这里涉及了GPIO和RCC两个外设,可以看看这两个外设有哪些库函数
首先是RCC,我们可以在Library中找到rcc.h这个文件,双击打开,在这个.h文件的最下面,一般都是库函数所有函数的声明
在这里我们可以看到RCC有很多的库函数,但实际上这里的大部分函数我们都不会用到,我们最常用的只有这三个函数,RCC_AHB外设时钟控制、RCC_APB2外设时钟控制、RCC_APB1外设时钟控制
右键点击函数名,跳转到函数定义,但此时跳转不过去,是因为刚才我们把中间文件给删掉了,那么重新编译一下再跳转就可以跳转成功了。这时就来到了RCC的.c文件里的函数定义
选中的这部分有这个函数的介绍,这个AHB外设时钟控制的函数就是使能或者失能AHB外设时钟的
第一个参数就是选择哪一个外设
STM32互联型的设备可以在这个列表选择
其他设备再这个选中的部分选则
接着第二个参数就是ENABLE或者DISABLE
下面的APB2外设时钟控制和APB1外设时钟控制都是一样的操作方法
第一个参数选择外设,第二个参数使能或失能
如果你不清楚哪个外设是连接在哪个总线上的,还可以在这个函数的上面的列表找一下
列表中出现了就肯定是这个总线的外设
RCC函数到这里就介绍完了,最主要的还是这三个函数,其他的基本上用不到,需要用到的时候再看详细介绍~
GPIO的库函数,我们可以在Library中打开GPIO.h这个文件,在这个.h文件的最后,就是GPIO的全部库函数了
目前可以先了解前面的一些库函数,后面的库函数以后需要用到了再了解
第一个就是GPIO_Delnit,参数可以写GPIOA、GPIOB等等
调用这个函数之后,所指定的GPIO外设就会被复位
void GPIO_DeInit(GPIO_TypeDef* GPIOx);
第二个AFIODeinit也是一样,可以复位AFIO外设,这个AFIO我们后面再讲
void GPIO_AFIODeInit(void);
第三个GPIO_Init是一个非常重要的函数,这个函数的作用是,用结构体的参数来初始化GPIO口
void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);
我们需要先定义一个结构体变量,再给结构体赋值,最后调用这个函数,这个函数内部就会自动读取结构体的值,自动把外设的各个参数配置好
这种init函数在STM32中基本所有的外设都有,一般我们初始化外设都是使用这个init函数来完成的
第四个是GPio_StructInit函数,这个函数可以把结构体变量赋一个默认值
void GPIO_StructInit(GPIO_InitTypeDef* GPIO_InitStruct);
接下来这四个就是GPIO的读取函数了
uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx);
uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);
再下面跟着的四个就是GPIO的写入函数,这些函数就可以实现读写GPIO口的功能
void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);
void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);
剩下的这些函数我们暂时不会用到,这里面重要的函数就是上面的GPIO Init和这8个读写函数
下面(下一篇)我们就来试试,用这些函数来操作GPIO吧
作 者 :硬核王同学
------- END ------
关注公众号回复“加群”按规则加入技术交流群 回复“1024”查看更多内容