空降文章列表
回顾
- 经过《2、准备工程模板》的学习,相信你已经准备好了stm32工程模板,接下来,让我们进入正式的编码学习。
本章实验材料
- 面包板、杜邦线若干、直插led。
你能学会什么
- 控制stm32 GPIO,通过软延时,实现led灯交替闪烁。
GPIO控制篇
- 如果您还未建立工程,请参考文章。
- 首先,我们将template文件夹复制一份,更改为GPIO控制。
- 代码很简单,我们先不进行文件划分,直接在main.c中编码。
#include "stm32f10x.h"
/*
GPIO操作,是学习一款MCU最基本的知识。
stm32 MCU与51单片机在IO控制上有很大的区别。
在51单片机中,我们可以直接对某一引脚赋值,
而在stm32中,我们需要更多的配置,比如开启时钟,配置输入输出模式等。
*/
//延时函数,不要想定时器,先老老实实用土办法i--
void simple_delay(){
unsigned int i = 4800000;
while(i--);
}
int main()
{
GPIO_InitTypeDef GPIO_InitStruct;//配置结构体变量
/*
GPIO_InitTypeDef:结构体,其中含有和GPIO的配置相关的变量
*/
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_5;//设置对应的引脚
/*
GPIO_Pin可取值有:
GPIO_Pin_0-15:0-15引脚,可用或运算选中多个引脚,如GPIO_Pin_0|GPIO_Pin_5
GPIO_Pin_All:选中所有引脚
*/
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;//设置引脚模式
/*
GPIO_Mode可取值有:
GPIO_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:复用推挽输出
*/
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_10MHz;//设置管脚速率
/*
GPIO_Speed可取的值有:
GPIO_Speed_10MHz
GPIO_Speed_2MHz
GPIO_Speed_50MHz
*/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//需要先开启时钟,再初始化
//!--所谓的时钟,在入门阶段你可以理解为人的心跳,没有心跳,什么都不起作用。
//! --至于上面这句为什么是这么写,你先不用管,随着学习的深入再慢慢理解。
//! --记住一句:想要干活,就要有心跳,就要开时钟!
/*
--我们前面对于GPIO_InitStruct的操作,可以理解为拿了一个本子,写上我们想要配置成什么样,
--那么接下来调用GPIO_Init接口,让固件库拿着我们写好的本子(GPIO_InitStruct),去操作stm32的寄存器
--实现我们想要的配置功能。
*/
/*
GPIO_Init:
参数1:端口,PORT
参数2:GPIO配置结构体指针
*/
GPIO_Init(GPIOA,&GPIO_InitStruct);
while(1){
GPIO_SetBits(GPIOA,GPIO_Pin_5);//让PA5输出高电平
simple_delay();
GPIO_ResetBits(GPIOA,GPIO_Pin_5);//让PA5输出低电平
simple_delay();
}
return 0;
}
-
对于上面的程序,在PA5引脚串联一个led和限流电阻后接地,编译和烧录程序,你会看到led闪烁效果。
-
对于GPIO的输入输出的模式,你不必困惑,在入门阶段,我大部分人是控制led灯或者蜂鸣器,你只需要将它设置为推挽输出模式即可,对于其它模式,你会在后续的学习中逐步了解。