stm32配置led

Posted 菜头大大

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了stm32配置led相关的知识,希望对你有一定的参考价值。

前言:我们学习一门新语言的时候都是先从hello world入门,stm32也有自己的入门方式,那就是流水灯的配置。

 在配置之前我们需要先配置好编译环境,我们需要手动修改头文件中的一些内容。

1、首先我们需要先创建一个新工程,前面我已经详细讲过怎么创建一个新工程了,在这里就不赘述了,不懂的朋友可以看看我的上一篇的随笔(stm32环境搭建)。

2、修改系统时钟,把文件system_stm32f4xx.c(Startup)文件中的PLL_M宏定义改为8,PLL_N如果不是336的话改成336,还有stm32f4xx.h文件中的HSE_VALUE的值改成8000000

 

 

 

2、J-Link正确连接到开发板,安装驱动Setup_JLinkARM_V415e.exe

3)在工程选项的【Debug】标签,选中“J-LINK/J-TRACE Cortex”,接着点击“settings”,设置port为“sw”,频率为“5MHz”;然后点击【Flash Download】,勾选“Reset and Run”。最后点击“确定”按钮退出。

 

 

4、通过查看原理图,找出四盏led灯的管脚名字,我这里分别为LED0、LED1、FSMC_D10、FSMC_D11,这里不同的板子led的管脚的名字可能不同。

5、知道led灯管脚的名字之后,再通过芯片原理图找到对应的led灯管脚名字的I/O口,从原理图可知,对应的I/O为PF9、PF10、PE13和PE14,不同的硬件对应的I/O口不同,需要自己找出自己硬件上的led对应的I/O口。

 

6、找出对应芯片上的I/O口之后,我们就可以着手写代码了。如果不懂这么写的可以查阅官方的标准的外设库文件(Standard Peripherals Library),里面有配置I/0的模板例子,但是需要做适当的修改。如图便是标准外设库文件配置I/O的例子

 

 

 

7、具体代码如下led.c如下:

#include "stm32f4xx.h"

GPIO_InitTypeDef  GPIO_InitStructure;

void delay(void)
{
    unsigned int i=0x500000;
    
    while(i--);

}


int main(void)
 {
      /* GPIOG Peripheral clock enable ,使能外设时钟GPIOF和GPIOE,也就是让GPIOF和GPIOE工作*/
      RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);
     RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE);
     
    /* 配置PF9引脚为推挽输出模式 */
     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10;    //第PF9和PF10号引脚
     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;            //输出模式
     GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;            //推挽输出模式,增加输出电流
     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;        //引脚的的工作速度最高为100MHz,最低为2MHz,工作速度越高,功耗就越高
     GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;        //不需要上拉电阻
     GPIO_Init(GPIOF, &GPIO_InitStructure);                    //初始化端口F
    
     
     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14; //第PE13和PE14号引脚
     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;            //输出模式
     GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;            //推挽输出模式,增加输出电流
     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;        //引脚的的工作速度最高为100MHz,最低为2MHz,工作速度越高,功耗就越高
     GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;        //不需要上拉电阻
     GPIO_Init(GPIOE, &GPIO_InitStructure);                    //初始化端口E
     

     while(1)
     {
        
        GPIO_ResetBits(GPIOF,GPIO_Pin_9);//PF9引脚为低电平,led灯亮
        delay();
        GPIO_SetBits(GPIOF,GPIO_Pin_9);  //PF9引脚为高电平,led灯灭
        delay();
        
        GPIO_ResetBits(GPIOF,GPIO_Pin_10);//PF10引脚为低电平,led灯亮
        delay();                          
        GPIO_SetBits(GPIOF,GPIO_Pin_10);  //PF10引脚为高电平,led灯灭
        delay();
         
        GPIO_ResetBits(GPIOE,GPIO_Pin_13); //PE13引脚为低电平,led灭亮
        delay();
        GPIO_SetBits(GPIOE,GPIO_Pin_13);   //PE13引脚为高电平,led灯灭
        delay();
        
        GPIO_ResetBits(GPIOE,GPIO_Pin_14); //PE14引脚为低电平,led灭亮
        delay();
        GPIO_SetBits(GPIOE,GPIO_Pin_14);   //PE14引脚为高电平,led灯灭
        delay();
     }
 }

 

7、编译之后,通过仿真器下载到板子上就可以跑流水灯了。

 

以上是关于stm32配置led的主要内容,如果未能解决你的问题,请参考以下文章

STM32F103VET6基于STM32CubeMX创建定时器中断控制LED闪烁

STM32的IO配置点灯

stm32亮灯后灯不能灭

STM32Cubemx——定时器中断

基于STM32的外围系统设计

基于STM32的外围系统设计