RYMCU

金名的STM32F407标准库开发笔记(一)

kingmingnie 3 月前
# 金名的STM32F407标准库开发笔记 # RY-STM32F407 # STM32
  • 金名的 STM32F407 单片机标准库开发(一)
    • 前言
    • 一、开发板介绍
    • 二、STM32F407VET6 单片机简介
    • 三、开发环境搭建
      • 1、资源获取链接
      • 2、安装 MDK
      • 3、激活 Keil
        • 方式一
        • 方式二
      • 4、配置编译器 ARM Compiler5
        • 安装
        • 在 KEIL 中设置 AC5 编译器
    • 四、创建工程模板
      • 标准固件库获取
      • 标准固件库目录介绍
      • 创建 STM32F407VET6 的工程模板
    • 小结

金名的 STM32F407 单片机标准库开发(一)

前言

  在经过一段时间的嵌入式软件开发学习,作者发现一味的跟随不管是视频教程还是文档教程来编写代码的效率非常低下,初学者们(比如本人)并不理解教程中代码到底是什么意思,所以很难对自己敲下的代码有什么深刻的印象。作者在无数次的遗忘然后查找教程的死循环中,突然顿悟到了为什么大佬们都喜欢编写自己的博客:为了加深自己对知识的理解与对学习成果的检验,而不是作为教程供他人查阅。故此,为了提高学习效率,作者于 2024/11/28 写下人生中的第一篇博客。

一、开发板介绍

  RY-STM32F407 —— 是社区独家设计的一款基于 STM32F407VET6 芯片的高颜值、高性价比核心开发板。也是本教程使用的开发板,设计方案开源,可以自己手搓(RYMCU - 嵌入式知识学习交流平台),也可以直接购买(淘宝或抖音搜索“RYMCU”)。作者手搓了一个来进行学习,个人感觉难度不大,不过新手慎重考虑,容易扔钱哈(~ ̄▽ ̄)~。如果自己手头有 F407 的开发板也可以使用,注意分辨你自己的开发板和作者的开发板的一些区别即可。

二、STM32F407VET6 单片机简介

  单片机(Microcontroller Unit,MCU)是一种集成电路芯片,它将计算机的 CPU、存储器(包括 RAM 和 ROM)、输入/输出接口(I/O)以及其他功能模块集成在一个小型的芯片上。单片机通常用于嵌入式系统,能够控制其他电子设备或机械装置,实现特定的功能。
  STM32F407VET6 是一款由 ST 公司基于 ARM Cortex-M4 内核开发的 32 位高性能微控制器,具备 168MHz 的工作频率,512KB 的 Flash 存储器和 192KB 的 SRAM,支持浮点运算和 DSP 指令,具备丰富的外设接口,包括多个定时器、多个 UART、SPI、I2C、USB 等,工作电压范围为 1.8V 至 3.6V,工作温度范围为-40℃ 至 +85℃。

三、开发环境搭建

  简单了解一下 STM32F407VET6 之后,接下来到了嵌入式软件开发的第一步--开发环境的搭建。开发环境提供了编写、编译、调试代码的工具,以及项目管理和版本控制的功能,从而提高开发效率和软件质量。它还支持代码优化、模拟仿真和自动化测试,帮助开发者快速构建和部署高质量的软件产品。本教程所使用的集成开发环境(IDE)是 Keil5,以下为 Keil5 的安装过程。

1、资源获取链接

通过网盘分享的文件:STM32F407VET6
  链接: https://pan.baidu.com/s/1Jg-JMWhxrPhzybKnDe7TUQ?pwd=9wd5 提取码: 9wd5

2、安装 MDK

  • 打开资源包中的 开发环境搭建 文件夹,双击运行 MDK540.exe 文件;

  • 点击 Next;

  • 勾选 I agree...,然后点击 Next;

  • 点击 Browse 选择合适的安装路径,然后点击 Next;

    划线处为作者存储路径,仅供参考

    注: 建议不要将软件安装在 C 盘**注意路径不能出现中文 **

  • 填写信息,可随意填写,然后 Next

  • 等待安装完成;

  • 弹出窗口,点击安装;

  • 安装完成后,取消勾选 Show Release Notes,然后 Finish,安装完成。

3、激活 Keil

提供两种激活方式,个人推荐 第二种,省时省力。

方式一

Keil MDK 社区版(MDK-Community edition)是 Keil 官方为非商业用户提供的免费开发工具,主要特点包括:

  1. 免费使用:社区版完全免费,适用于电子爱好者、学生、学者等群体进行非商业评估和使用。
  2. 无代码大小限制:与之前的 MDK Lite 版本相比,社区版没有代码大小的限制,可以支持更复杂的项目开发。
  3. 支持广泛的微控制器:社区版支持超过 9500 款基于 Cortex-M 处理器的微控制器器件,覆盖了多种型号的单片机。
  4. 包含高级功能:社区版提供了许多高级功能,包括对基于 Arm 架构的微处理器的 CMSIS 标准框架的支持。
  5. 注册激活:社区版需要用户注册 Keil(ARM)账号,并进行激活,以确保软件的合法使用。

keil 社区版激活参考 ST 官方给出的教程:https://www.keil.arm.com/mdk-community/

注:此方法需在官网注册账号再获取 MDK 下载链接,需要重新下载安装。

方式二

打开 开发环境搭建 文件夹,阅读 readme

4、配置编译器 ARM Compiler5

  目前 MDK5.40 编译环境为 ARM Compiler6,而我们进行 STM32F4 标准库开发,使用的是 ARM Compiler5,故此需要自行安装 ARM Compiler5(AC5)。

安装

  • 依次打开 开发环境搭建 文件夹,ARMCompiler_506_Windows_x86_b960 文件夹,Installer 文件夹,双击运行 setup.exe
  • 点击 Next;
  • 勾选 I agree...,然后点击 Next;
  • 点击 Browse 选择合适的安装路径,然后点击 Next;

划线处为作者存储路径,仅供参考。 建议放在 KEIL5 的安装路径下,不要出现中文。 记住安装路径,底下配置的时候会用到。

  • 点击 Install
  • 等待安装完成。

在 KEIL 中设置 AC5 编译器

  • 打开 Keil,按下图操作;
  • 点击 Add... 选择刚刚安装的编译器路径;
  • 点击 Close 进行保存;
  • 点击 OK 关闭 Manage Project Items 窗口,打开 魔术棒,在 Target 选项卡下查看可选编译器;
  • 点击 ARM Compiler 后的倒三角符号;
  • 选中 V5.06...,点击 OK

至此开发环境搭建完成 <( ̄︶ ̄)↗[GO!]。

四、创建工程模板

  STM32F407VET6 的工程模板为开发者提供了一个预配置的开发框架,包括基础设置、启动代码、外设驱动和中断服务例程等,从而简化新项目初始化过程,提高开发效率,确保代码一致性和可移植性。

标准固件库获取

官网下载地址:https://www.st.com/zh/embedded-software/stsw-stm32065.html

此方法需要注册 ST 官网,所需资源在作者的网盘链接里也有给出。

解压即可使用。

标准固件库目录介绍

  • _htmresc:该文件夹包含官方 Logo 图片,忽略不看。
  • Libraries:此文件夹包含核心库文件,主要有 CMSISSTM32F4xx_StdPeriph_Driver 两个目录。CMSIS 文件夹存放符合 CMSIS 规范的文件,而 Driver 文件夹下则是 STM32F4 标准外设固件库的源码文件和头文件,即寄存器封装好的函数接口。
  • Project:该文件夹下包含 STM32F4xx_StdPeriph_ExamplesSTM32F4xx_StdPeriph_Template 两个文件夹。Examples**** ****文件夹提供固件示例源码,Template 文件夹提供工程模板,闲时可以阅读一下。
  • Utilities:此文件夹包含官方评估板的一些对应源码,忽略不看。

创建 STM32F407VET6 的工程模板

建议直接下载使用资料中准备好的模板。

  • 首先,在你的电脑桌面上新建一个文件夹,命名为 STM32F407_TemplateProject,用来存放工程文件。

  • 打开 Keil,依次点击 ProjectNew Uvision Project

  • 将目录选中到 STM32F407_TemplateProject 文件夹中的 MDK 目录。同时取名 STM32F407 之后进行保存;

  • 然后弹出 Device 界面,Serch 中搜索 STM32F407VET,选择芯片型号 STM32F407VETx,点击 OK

  • 然后会弹出 Manage Run-Time Environment 的窗口,这个窗口是 Keil 官方的工程配置界面,暂时使用不到,点击 Cancel

  • 查看 MDK 文件夹,出现以下文件;

  • 接下来我们返回上一级 STM32F407_TemplateProject 目录,新建 LIBRARIESCORESTART 文件夹;

  • 添加启动文件:从 STM32F4xx_DSP_StdPeriph_Lib_V1.9.0 库中,复制 LibrariesCMSISDeviceSTSTM32F4xxSourceTemplatesarm 目录下的启动文件 startup_stm32f40_41xxx.sSTM32F407_TemplateProjectSTART 文件夹中。** **

  • 添加固件库文件:将 STM32F4xx_DSP_StdPeriph_Lib_V1.9.0LibrariesSTM32F4xx_StdPeriph_Driver 目录下的 incsrc 文件夹复制到 STM32F407_TemplateProjectLIBRARIES 文件夹中。** **

  • 添加系统文件:将 STM32F4xx_DSP_StdPeriph_Lib_V1.9.0LibrariesCMSISInclude 中的 core_cm4.hcore_cmSimd.hcore_cmFunc.hcore_cmInstr.h 等核心文件复制到 STM32F407_TemplateProjectCORE 文件夹中。 再将 STM32F4xx_DSP_StdPeriph_Lib_V1.9.0LibrariesCMSISDeviceSTSTM32F4xxInclude 中的 stm32f4xx.hsystem_stm32f4xx.h 复制到 STM32F407_TemplateProjectMDK 文件夹中。

  • 添加模板文件:从 STM32F4xx_DSP_StdPeriph_Lib_V1.9.0ProjectSTM32F4xx_StdPeriph_Templates 目录中复制模板文件(main.cstm32f4xx_conf.hstm32f4xx_it.cstm32f4xx_it.hsystem_stm32f4xx.c)到 STM32F407_TemplateProjectMDK 文件夹中。

  • 返回桌面,右击 STM32F407_TemplateProject 选择属性,关闭只读选项,点击应用; 默认勾选 将更改应用于此文件夹、子文件夹和文件,点击确定。

  • 回到 Keil 添加这些文件到工程中去,按图示操作。

  • 进入 LIBARIES 下的 src,Ctrl+A 选中全部文件,再按住 Ctrl 取消选中 stm32f4xx _fmc.c,点击 add。

  • 与上一步操作相同,在 Groups 分别选中 STARTMDK 下面,添加文件。START 中添加 startup_stm32f40_41xxx.sMDK 中添加 main.c,stm32f4xx_it.c,system_stm32f4xx.c ,点击 OK 回到主页面。** **每个文件夹下都有相应的文件

  • 然后为整个工程添加宏定义标识符,并指明头文件的包含路径。
    STM32F40_41xxx,USE_STDPERIPH_DRIVER

  • 添加 CORE, MDKLIBRAIESinc OK 添加完成。

  • 打开 stm32f4xx_it.c,删除 25 行,删除 135~138 行。

  • 再打开 system_stm32f4xx.c,将 364 行的 25 改为 8。

  • 打开 main.c,全选替换为以下代码,

    #include "stm32f4xx.h"
    
      void delay_ms(u16 time)
      {    
         u16 i=0;  
         while(time--)
         {
            i=12000;  //自己定义
            while(i--) ;    
         }
    
      }
    
    
      int main(void)
      {
              GPIO_InitTypeDef GPIO_InitStructure;
              RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
              GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10;
              GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
              GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
              GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
              GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
              GPIO_Init(GPIOA, &GPIO_InitStructure);
     ​
              while(1)
          {
              GPIO_SetBits(GPIOA,GPIO_Pin_9|GPIO_Pin_10);
              delay_ms(200);
              GPIO_ResetBits(GPIOA,GPIO_Pin_9|GPIO_Pin_10);
              delay_ms(200);
          }
      }
    

    右击 "stm32f4xx.h",点击 Open document "stm32f4xx.c",

    将 137 行里的 25000000 改为 8000000,

    将 11581~11585 的内容选中,然后注释掉。****

  • 点击魔法棒,切换 ARM Complier 版本为 version 5,点击 OK 程序运行,输出显示 0 Error(s), 0 Warning(s) 大功告成!

小结

朋友,今天我们一起走过了 STM32F407 单片机开发的第一步。从介绍社区的开发板,到搭建起我们的开发环境,再到创建我们的第一个工程模板,每一步我们都一起摸索、一起学习。我们甚至还动手写了一个简单的程序,这个程序可以让 GPIO 引脚上的 LED 灯闪烁起来,我们将会在下一次来展示这段代码对应的实验现象并讲解这段代码的原理。

希望通过今天的学习,你们能感觉到单片机开发开发其实并不遥远,而且还挺有趣的。记得,实践是最好的老师,所以不要害怕犯错,多动手尝试。我相信,随着时间的推移,你们会越来越熟练,最终会成为单片机开发领域的高手。
               1732862025608.png

后发布评论

我选择第二种激活方式,哈哈哈👍 👍 👍