描述

这篇文章是研发文章的第一篇,在这里稍微详细的介绍一下。
学习stm32第一步先把LED灯点亮,这是最简单的。这篇文章会详细的介绍这一研发步骤

  • 研发平台:淘宝上购买的野火店铺的一款单片机,名字叫骄阳开发板,核心芯片是
    stm32F407IGT6

思路

我们通过两种方式,可以完成LED灯的控制。

  1. 使用stm32公司研发的CubeMX工具,对芯片进行一些简单的设置,就可以完成灯的控制(这都是官方支持的工具,我推荐自主研发时使用这种方式)
  2. 靠调用官方hal库,并通过写代码的方式完成灯的控制(如果需要利用别人的代码,要学会这种方式)

两种方法我都会介绍

研发步骤一:使用CubeMX

  1. 打开CubeMX软件,选择左上角的“File”——“New Project”,建造一个新的工程
  2. 选择你的芯片类型,我的是F407IGT6,双击确定
  3. 接下来你就会进入核心的芯片管脚编辑界面了
  4. 找到你使用芯片的原理图,找到LED的部分,确定每一个灯的控制管脚。
  5. 以我芯片的原理图为例,四个灯的管脚分别为PA15、PE2、PG15、PB8
  6. 以“PA15”为例,在芯片下面的小搜索框内输入“PA15”,软件会将该管脚用黑色闪烁点亮,单击PA15会在旁边弹出一个框,选择“GPIO_Output”
  7. 这是设置完四个LED灯后的样子
  8. 选择左侧标签栏中的“System Core”——“GPIO”选项,可以对刚才的四个管脚进一步配置
  9. 我们按照图片这样配置
  10. 在“Project Manager”中的“Project”,可以设置工程保存的位置。注意“IDE”一项选择为“MDK-ARM”,这样工程生成后是可以使用keil软件打开的
  11. 在“Project Manager”中的“Code Generator”中可以设置一些工程代码生成的配置,可以按照我图片写的进行设置
  12. 随后点击右上角的“Generate Code”即可
  13. 代码生成后可以使用Keil打开,构架编译并下载到开发板上后,会发现开发板上的四个灯全部被点亮了
  14. 打开工程,点击“gpio.c”这个文件,会发现如下几行代码
  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(GPIOE, GPIO_PIN_2, GPIO_PIN_RESET);

  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15, GPIO_PIN_RESET);

  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(GPIOG, GPIO_PIN_15, GPIO_PIN_RESET);

  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, GPIO_PIN_RESET);

这四句话实际上将LED的四个管脚的输出,设置成了低电平,通过原理图我们可以知道低电平会使二极管导通点亮LED灯。
将其中任意一句代码中的GPIO_PIN_RESET改成GPIO_PIN_SET,也就是将低电平的设置改为了高电平,重新下载到板子上观察现象。
你会发现:改了的语句代表的那个LED灯是熄灭的状态,没有被点亮

研发步骤二:使用代码

还有另外一种办法来控制LED灯,就是纯代码编写的方式。
使用这种方式,将不会用到CubeMX软件,也就是stm32官方推荐的方式。野火的官方教程上,把这种代码称为“板级支持包”。顾名思义,这些代码是支持固定芯片型号的代码,如果使用另外的单片机,这些代码也就失去了作用。

野火官方的HAL库代码很好搜,如果搜不到再私信找我要

我将说明,如何利用写好的代码,嵌入到自己的工程中

  1. 生成一个空白的工程。你可以自己使用keil去搭建一个空白的工程框架,这里我依旧利用CubeMX进行空白工程生成,也是无所谓的。
    简单来说,我打开了CubeMX,没有更改任何的管脚,就点击了“Generate Code”
  2. 举例子,我们找到了野火写的板级支持包,一个c文件bsp_led.c,一个h文件bsp_led.h。将他们拷贝到你的工程下(自己选择合适的位置,野火说一般将第三方代码放置在User文件夹下,我一般放在3rd文件夹下。这不重要,自己根据个人习惯,下面按照野火的指示放到了User下,User文件夹随意放到了工程下)
  3. 右面是我们空白的工程目录。找到“Application/User/Core”,右键跳出菜单,选择“Add Existing Files to Group”,选择bsp_led.c,这就添加到了工程中,如图

  4. bsp_led.c文件中有includebsp_led.h头文件的语句,更改路径,确保工程可以找到你添加的头文件。
    如何判断已经添加进来了,右键include语句,点击Open”Documentbsp_led.h”,如果可以正常跳出头文件,即为成功,否则失败。

  5. main.c文件中,也添加include "bsp_led.h"的语句
    并在main函数中按照如下方式添加代码

    
     LED_GPIO_Config();
    while (1)
    {
         LED1( ON );
         HAL_Delay(1000);
         LED1( OFF );
    
         LED2( ON );
         HAL_Delay(1000);
         LED2( OFF );
    
         LED3( ON );
         HAL_Delay(1000);
         LED3( OFF );
    
         LED4( ON );
         HAL_Delay(1000);
         LED4( OFF );
    
         LED_ALLON;
         HAL_Delay(1000);
    
         LED_ALLOFF;
         HAL_Delay(1000);
    }
    
  6. 构建并下载到开发板,最终的结果就是
    LED从左到右依次闪烁,随后全部点亮,再全部熄灭
    以上步骤不停循环

总结

这篇通过两种方式,实现了LED灯的控制。
下一篇将进行更高级的LED灯控制