• 嵌入式STM32实例之LED灯闪烁控制以及相关注意事项


    在本实例中,主要是为了实现LED灯的闪烁。首先分析LED的驱动方式,本实验中使用的是OpenM3V,内置8个LED均采用灌流方式驱动(低电平亮)。如果想要实现其闪烁,则需要给相应端口持续不断的高低交替电平。

    在软件结构设计中,加入使用LED8,则需要在PD7口不断的输出高电平和低电平。首先需要初始化系统时钟,然后再开始配置PD7作为输出使用,打开外设时钟最后控制PD7输出持续的高低轮流。

    开始 -> 配置系统时钟 -> 配置PD7作为输出在打开PD外设时钟 -> 置位PD7,熄灭LED8 -> 延时程序 -> 清PD7,点亮LED8 -> 延时 -> 置位PD7,以此开始循环闪烁。

    以下给出具体的代码(代码运行在KEIL5上)。

    在软件代码编写中需要实现LED的闪烁其实是很简单的,只需要轮流的置低、置高控制LED8的I/O口线就好。

    #include<stm32f10x_lib.h> //包含头文件,使用库函数必须要加入该头文件

    int main(void)

    {

    RCC_Configuration();//配置系统时钟,设置系统时钟为72MHz

    NVIC_Configuration();//配置中断

    //使能A,B,C,D,E外设时钟,如果用到那个外设,必须打开其外设时钟

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|

      RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD|

      RCC_APB2Periph_GPIOE,ENABLE);

        GPIO_InitSrtucture.GPIO_Pin = GPIO_ALL;//选中所有的引脚0~15;

    GPIO_InitSrtucture.GPIO_Mode = GPIO_AIN;//配置成模拟输入;

    GPIO_Init(GPIOA, &GPIO_InitStructure);//把A端口全部引脚配置成模拟输入

    GPIO_Init(GPIOB, &GPIO_InitStructure);//把B端口全部引脚配置成模拟输入

    GPIO_Init(GPIOC, &GPIO_InitStructure);//把C端口全部引脚配置成模拟输入

    GPIO_Init(GPIOD, &GPIO_InitStructure);//把D端口全部引脚配置成模拟输入

    GPIO_Init(GPIOE, &GPIO_InitStructure);//把E端口全部引脚配置成模拟输入

      //使能A,B,C,D,E外设时钟,关闭A,B,C,D,E外设

      RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|

      RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD|

      RCC_APB2Periph_GPIOE,DISABLE);

      //配置LED所在的外设的6,7,8,9引脚为输出

        GPIO_InitSrtucture.GPIO_Pin = GPIO_Pin6|GPIO_Pin7|GPIO_Pin8|GPIO_Pin9;

    GPIO_InitSrtucture.GPIO_Mode = GPIO_Mode_Out_PP;//配置为输出

    GPIO_InitSrtucture.GPIO_Speed = GPIO_Speed_50MHz;

    GPIO_Init(GPIO_LED,&GPIO_InitSrtucture);

    While(1)  //为了产生循环

    {

    }

    }

    以下是完整的程序(其中以头文件方式包含以上程序)

    #include<stm32f10x_lib.h>

    Void Delay(void)

    {

    unsigned long k;

    For(k=0;k<0xffff8;k++);

    }

    int main()

    {

    RCC_Configuration();//配置系统时钟,设置系统时钟为72MHz

    NVIC_Configuration();//配置中断

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE);//打开外设D的时钟

    //配置LED所在的外设的7引脚为输出

    GPIO_InitSrtucture.GPIO_Pin = GPIO_Pin_7;

    GPIO_InitSrtucture.GPIO_Mode = GPIO_Mode_Out_PP;// I/Od的方向

    GPIO_InitSrtucture.GPIO_Speed = GPIO_Speed_50MHz;

    GPIO_Init(GPIOD,&GPIO_InitStructure);//初始化外设D的7端口

    While(1)

    {

    GPIO_SetBits(GPIOD,GPIO_Pin_7);//置位PD7,灭LED8

    Delay();                      //延时

    GPIO_Resetbits(GPIOD,GPIO_Pin_7);//清PD7,点亮LED8

    Delay(); //延时

    }

    }

    以上就是完整的程序,但是在使用外设的时候,以下几点非常重要。

    1.FWLAB文件组中加入该外设的库文件

    2.在头文件stm32f10x_conf.h中,打开对应外设的宏定义

    3.根据系统对该功能的需求,初始化该功能外设

    4.打开该外设的时钟

    5.在NVIC_Configuration()函数中配置嵌套向量中断  

    在介绍如何使用I/O外设:

    1.需要向FWLAB文件组中加入时钟(RCC),中断(NVIC),flash,系统(LIB)和GPIO相关的库文件,这样有关I/O口的库文件也加入了;

    2.头文件中的外设定义是否打开(是否有宏定义);

    3.首先需要使用GPIO_Init(GPIOD,&GPIO_InitStructure)函数来初始化端口D,设置端口7为输出;

    4.调用RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE)函数打开外设D的时钟;由于没有使用中断,所以没有配置中断优先级,加入说有中断则需要配置中断优先级。

    创客学院全新视频:www.makeru.com.cn

    嵌入式学习交流群:561213221

  • 相关阅读:
    时间过的好快啊
    IBM的 SOA架构设计还是写的很好的
    昨天尝试了Layout,也谈Silverlight的布局
    这几天忙着选车了!
    痛苦的事情是将自己的想法表达出来
    花了一天的工夫才写了一篇PPT
    昨天抄写了gameEnvironment的行为模式
    XMLHTTP对像异步请求四步曲
    第一篇: 第一个简单的vs 2008 ASP.NET Ajax 范例
    什么是 Silverlight?
  • 原文地址:https://www.cnblogs.com/huan-huan/p/8309760.html
Copyright © 2020-2023  润新知