STM32F103点亮LED
这条博客是基于正点原子mini板的代码。
创建文件夹、源文件以及设置路径就不讲了,直接附上代码。
库函数配置步骤
- 在模板中新建文件夹用于存放 led.c 和 led.h文件
- 设置好 led.c 和 led.h 文件的路径
- 在 led.h 文件中设置好 __LED_H 宏定义和引脚定义
- 在 led.c 中配置好初始化函数 LED_Init 函数体
- 在 main.c文件中应用相应函数体,并设置延时循环体
- 如果不想创建 led.c 和 led.h 文件,则可以直接在主函数中定义功能函数
方法一:将功能函数分化出来,另外建立文件夹。
1、led.h 文件配置
#ifndef __LED_H
#define __LED_H
#include "sys.h"
#define LED0 PAout(8) // 用位操作定义引脚PA8
#define LED1 PDout(2)
void LED_Init(void);
#endif
2、led.c文件配置
# include "led.h"
void LED_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure; //引用GPIO_Init 函数结构体声明
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //设置端口使能时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //输出推挽模式
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // I/O口输出速度
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; //配置引脚
GPIO_Init(GPIOA, &GPIO_InitStructure); //引脚初始化
GPIO_SetBits(GPIOA,GPIO_Pin_8); //高电平输出
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
GPIO_Init(GPIOD, &GPIO_InitStructure);
GPIO_SetBits(GPIOD,GPIO_Pin_2);
}
3、main.c函数配置
#include "led.h"
#include "delay.h"
#include "sys.h"
int main(void)
{
delay_init(); // 引用模板文件里已经定义好的延时函数
LED_Init(); // 引用我们前面创立的I/O初始化函数
while(1)
{
LED0=0; //设置I/O口初始参数
LED1=1;
delay_ms(300); // 设置延时参数
LED0=1;
LED1=0;
delay_ms(300);
}
}
方法二:直接在主函数中配置功能函数
main.c文件
# include <stm32f10x.h>
# include "delay.h"
int main(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
delay_init();
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_8;
GPIO_Init(GPIOA,&GPIO_InitStruct);
GPIO_ResetBits(GPIOA, GPIO_Pin_8);
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_2;
GPIO_Init(GPIOD,&GPIO_InitStruct);
GPIO_ResetBits(GPIOD, GPIO_Pin_2);
while(1)
{
GPIO_SetBits(GPIOA, GPIO_Pin_8);
GPIO_ResetBits(GPIOD, GPIO_Pin_2);
delay_ms(300);
GPIO_SetBits(GPIOD, GPIO_Pin_2);
GPIO_ResetBits(GPIOA, GPIO_Pin_8);
delay_ms(300);
}
}