【STM32】新手折腾笔记--02:点亮LED灯
作为一个STM32F0的核心板,只有一个LED可用,PC13
关于STM32的具体的一些细节(比如:时钟、具体的IO模式等),网路上面的视频教材很多很全很详细,我就不在此赘述了。我直接上我的理解
首先STM32比51复杂很多但是我总结起来,
点亮一个LED的大致步骤就是
1.配置(使能)系统时钟
2.设置IO口
此外希望大家养成良好的编程习惯,把一段功能代码封装好,而不是全部丢在main函数中,这样从main函数文件的宏观上你就知道你在做什么,而不考虑具体如何做的细节
一、文件结构
在此补充
一下,Bsp文件夹是放入驱动的(比方说我们点亮LED之前的工作就是在驱动LED,这样我们在主函数看到的就是直接使用LED,这样不是更加清晰?)
ps:Bsp也要加入到include path中
二、驱动部分
我们在Bsp下建立两个文件
led.h
#ifndef __LED_H // 条件编译,防止重复引用
#define __LED_H
#include "stm32f0xx.h"
void led_init(void); //声明函数
void led_on(void);
void led_off(void);
#endif
led.c
#include "stm32f0xx.h"
#include "led.h"
GPIO_InitTypeDef GPIO_InitStructure; //定义结构体,这个结构体包括了全部GPIO的参数
void led_init(){
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC, ENABLE); //使能GPIOC时钟,C脚上面有时钟
//使用刚才的结构体来配置参数
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 ; //第13引脚
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; //输出模式(stm32输出和输入是分别两个格式)
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽输出模式,具体百度
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //输出速率50Mhz
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; //无上拉(浮空)
GPIO_Init(GPIOC, &GPIO_InitStructure); //把上面的参数应用到GPIOC
/*
实际上一开始定义的结构体就像是一个配件单,写明了要求,最后一步我们把这个配件单送个相应的商家,让商家下单十分清晰
*/
}
void led_on(){
GPIO_ResetBits(GPIOC,GPIO_Pin_13); //对一个脚置0函数
}
void led_off(){
GPIO_SetBits(GPIOC,GPIO_Pin_13); //对一个脚置1函数
}
三、主函数
#include "main.h"
#include "led.h"
int main(void)
{
led_init(); //初始化led 就是之前一堆配置 ,采用结构体那个
while (1)
{
led_on(); //点亮led
}
}
这样写出的main函数很干净,我们直接就能看清我们干了什么
插上STLink 点LOAD 就可以写入程序了!