STM32中GPIO的使用
来源:互联网 发布:cmm软件质量管理体系 编辑:程序博客网 时间:2024/04/26 21:35
楼主一直是一个实用主义者(虽然还是菜鸟一个),所以我们就不啰嗦了,直接从使用开始,具体的GPIO的各种属性,输入输出的配置等请自行查看相关资料。
我们打开一个ST官方库文件中的GPIO例子,(打开方法参考我的博客中的《如何使用ST官方库文件中的例子程序》一文)
《如何使用ST官方库文件中的例子程序》连接地址:
http://blog.csdn.net/thebestleo/article/details/44155611
我们剪辑出其中的重要程序部分,为了清晰,我删除了其中的一些英文注释,下面还会增加一下中文的注释
#include "stm32f10x.h"GPIO_InitTypeDef GPIO_InitStructure;int main(void){ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_2; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOD, &GPIO_InitStructure); while (1) { /* Set PD0 and PD2 */ GPIOD->BSRR = 0x00000005; /* Reset PD0 and PD2 */ GPIOD->BRR = 0x00000005; /* Set PD0 and PD2 */ GPIOD->BSRR = 0x00000005; /* Reset PD0 and PD2 */ GPIOD->BRR = 0x00000005; /* Set PD0 and PD2 */ GPIOD->BSRR = 0x00000005; /* Reset PD0 and PD2 */ GPIOD->BRR = 0x00000005; /* Set PD0 and PD2 */ GPIOD->BSRR = 0x00000005; /* Reset PD0 and PD2 */ GPIOD->BRR = 0x00000005; /* Set PD0 and PD2 */ GPIOD->BSRR = 0x00000005; /* Reset PD0 and PD2 */ GPIOD->BRR = 0x00000005; /* Set PD0 and PD2 */ GPIOD->BSRR = 0x00000005; /* Reset PD0 and PD2 */ GPIOD->BRR = 0x00000005; /* Set PD0 and PD2 */ GPIOD->BSRR = 0x00000005; /* Reset PD0 and PD2 */ GPIOD->BRR = 0x00000005; /* Set PD0 and PD2 */ GPIOD->BSRR = 0x00000005; /* Reset PD0 and PD2 */ GPIOD->BRR = 0x00000005; /* Set PD0 and PD2 */ GPIOD->BSRR = 0x00000005; /* Reset PD0 and PD2 */ GPIOD->BRR = 0x00000005; /* Set PD0 and PD2 */ GPIOD->BSRR = 0x00000005; /* Reset PD0 and PD2 */ GPIOD->BRR = 0x00000005; }}
程序中while循环里使用了寄存器的方式来完成GPIO的操作,这里我们来改一下,全部用库文件的方式来完成,这里我们不考虑外围设备的状态(如LED灯的状态取决于硬件电路与STM32之间的连接,才能知道STM32输出高低电平后LED的亮灭),只考虑GPIO管脚的输出状态(0或者1)
此程序应该是一个双灯闪烁实验,在实际应用中应该加上一个延时程序,这里我们只介绍一下用法,所以不必过分纠结,此处我们只留一组寄存器操作代码作为对比
注解:程序中我习惯用//来注释一句程序,用/* */来注释下面的一段程序
#include "stm32f10x.h"GPIO_InitTypeDef GPIO_InitStructure; //定义一个GPIO_InitTypeDef类型的结构体int main(void){ /* 1、初始化GPIO */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE); // 使能GPIOD的时钟 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_2; // 配置所用到的管脚 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // 配置所用到的管脚的输入输出模式 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; // 配置所用到的管脚的速度 // 将GPIOD和GPIO_InitStructure结构体的首地址作为参数传递给GPIO初始化函数GPIO_Init GPIO_Init(GPIOD, &GPIO_InitStructure); /* 2、操作GPIO */ while (1) { GPIO_SetBits(GPIOD,GPIO_Pin_0); // D端口,0管脚置1 GPIO_SetBits(GPIOD,GPIO_Pin_2); // D端口,2管脚置1 GPIO_ResetBits(GPIOD,GPIO_Pin_0); // D端口,0管脚置0 GPIO_ResetBits(GPIOD,GPIO_Pin_2); // D端口,0管脚置0 /* Set PD0 and PD2 */ GPIOD->BSRR = 0x00000005; /* Reset PD0 and PD2 */ GPIOD->BRR = 0x00000005; }}
分析上面的程序我们可以得出如下结论:GPIO的操作一共分为2步
1、对所用的GPIO进行初始化设置,初始化又分为3个步骤,
1)、使能GPIOD的时钟
2)、填充GPIO的属性结构体
3)、传递参数至初始化函数
2、对GPIO进行操作
0 0
- STM32中GPIO的使用
- STM32的GPIO使用
- STM32之GPIO的使用
- STM32 GPIO的使用问题(持续更新中.....)
- STM32中对GPIO的配置与使用
- STM32的GPIO使用的函数剖析
- STM32的GPIO使用的函数剖析
- STM32菜鸟成长记录---GPIO的使用
- STm32 使用 stm32cube GPIO 点亮 led 的
- STM32 GPIO使用
- STM32的GPIO操作
- 初识stm32的GPIO
- STM32的GPIO口
- STM32的GPIO
- STM32 GPIO的学习
- stm32的GPIO
- STM32的GPIO
- STM32中GPIO工作模式
- android 实用代码片段整理
- 队列的顺序存储结构——循环队列 图解和代码实现
- Javascript函数的调用及事件
- iBATIS配置文件详细说明
- centos下配置git&gitolite
- STM32中GPIO的使用
- JavaScript入门
- JAVA表单的测试
- iOS APP应用程序进入到后台 ,不影响正在运行的后台音乐播放
- Mac或者Linux shell设置代理
- Javascript闭包
- 观察者模式 例子
- Swift学习小结之枚举和结构体
- Linux内核的配置与编译