STM第三天点亮LED
一:控制LED灯
1:LED灯的正极接到了3.3V, LED灯的负极接到了PA1,也就是GPIOA1引脚
2:只需要控制PA1为相对应的低电平,即可点亮对饮的LED灯,输出高电平则熄灭对应的LED灯。
二:写程序
1:为了方便,以后我们写外设写在user新建一个文件夹,里面建.c和.h文件
2:在keil上写工程
a:建立LED的.c文件(每一行代码必须要写注释,全部搞懂)
#include"led.h"
#include"stm32f10x.h"
void LED_Init(void)//初始化LED的函数———定义一个函数,声明函数(在头文件.h),调用函数(在main.c文件)
{
GPIO_InitTypeDef LED_Initstruct;//初始化GPIO结构体,结构体后面的名字可以自由取
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//初始化时钟APB2下的GPIOA和打开时钟
//也就是说要先打开时钟,在配置外设
//时钟初始化,要写在初始化GPIO结构体的前面,因为时钟就似心脏,要心脏开始跳了,CPU才会运行
LED_Initstruct.GPIO_Pin=GPIO_Pin_1;//配置引脚为GPIO_PIN_1,也就是GPIOA1引脚
LED_Initstruct.GPIO_Speed=GPIO_Speed_2MHz;//配置引脚传输速度为2MHZ
LED_Initstruct.GPIO_Mode=GPIO_Mode_Out_PP;//配置引脚输出模式为推挽输出
GPIO_Init(GPIOA,&LED_Initstruct);//初始化GPIO
}
2:写LED.h(头文件)
void LED_Init(void);//函数声明
3:写main主函数
#include "stm32f10x.h"
#include "main.h"
#include "led.h"
int main()
{
//1。初始化灯的引脚GPIOA1
LED_Init();
while(1)
{
//2.让GPIOA1输出低电平,灯就亮了
GPIO_ResetBits(GPIOA,GPIO_Pin_1);
}
}
三:让LED灯实现一秒闪烁
我们使用软件延时 粗延时
#include "stm32f10x.h"
#include "main.h"
#include "led.h"
void delay(uint16_t time)//延时1ms 软件延时粗延时
{
uint16_t i=0;
while(time --)
{
i=12000;
while(i --);
}
}
int main()
{
//1。初始化灯的引脚GPIOA1
LED_Init();
while(1)
{
GPIO_ResetBits( GPIOA, GPIO_Pin_1);//2.让GPIOA1输出低电平,灯就亮了
delay(1000); //亮一秒钟
GPIO_SetBits( GPIOA, GPIO_Pin_1); //让GPIOA1输出高电平,灯就灭了
delay(1000); //灭一秒钟
}
}