首页 > 代码库 > 外设实战总集之LED

外设实战总集之LED

外设实战总集之LED

2014-6-4


现在开发环境搭建好了,接下来先从最基本的开始,最基本的当然是驱动LED。


接下来是实战步骤:


一、查看电路原理图,LED1对应的是PA2,LED2对应的是PA3,两个LED都是灌电流方式驱动,所以GPIO设置成输出,当输出低电平时,LED亮,输出高电平是,LED灭。


二、开始编写代码:

 注意在LED文件中添加包含头文件:

#include "stm32f0xx.h"

下面一些宏和库函数都在stm32f0xx.h文件中有声明

1.初始化LEDS对应的IO外设时钟:

       RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);


2.初始化LEDS对应的IO管脚

    GPIO_InitTypeDef GPIO_InitStruct;


    GPIO_InitStruct.GPIO_Pin =GPIO_Pin_2 | GPIO_Pin_3;
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;
    GPIO_InitStruct.GPIO_OType = GPIO_OType_OD;
    GPIO_InitStruct.GPIO_Speed =GPIO_Speed_Level_1;
    GPIO_Init(GPIOA, &GPIO_InitStruct);
    GPIO_SetBits(GPIOA, GPIO_Pin_2 | GPIO_Pin_3);

3.设置LED1和LED2亮的函数,也就是设置对应管脚输出低电平

    GPIO_ResetBits(GPIOA, GPIO_Pin_2 );

    GPIO_ResetBits(GPIOA, GPIO_Pin_3 );    


 

4.设置LED1和LED2灭的函数,也就是设置对应管脚输出高电平

    GPIO_SetBits(GPIOA, GPIO_Pin_2 );

    GPIO_SetBits(GPIOA, GPIO_Pin_3 );


5.软件延时函数

extern void Delay(int t)
{
    int i,j,k;
    
    for(i = 0; i < t;i ++)
        for(j = 0 ; j < 100;j++)
            for(k = 0 ; k < 100;k ++);
}


6.测试这些函数是否能用

在main函数中:

int main(void)
{
    LEDS_Init();
    
    while(1){
        LED1_ON();
        LED2_OFF();
        Delay(1000);
        LED1_OFF();
        LED2_ON();
        Delay(1000);        
    }
}

编译并下载运行,可以看到两个灯交替亮灭,时间间隔大约1S。这样就验证完了LED部分了。

目前只是用到了IO输出,后面还会需要用到IO输入的。