【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 就可以写入程序了!

posted @ 2017-02-25 09:44  ArtisticZhao  阅读(228)  评论(0编辑  收藏  举报