基于STM32F407VET6自学笔记

ArtPig自学stm32

第一章 基于STM32VET6的编程环境

1.keil软件安装

选择版本:Keil5 MDK版,官网地址:https://www.keil.com/download/

安装教程不多赘述,安装路径选择非系统盘加英文文件夹

软件的激活,直接上网搜索(搜索关键字“Keil5 MDK的激活”),添加许可证前,一定要以管理员身份运行

2.芯片包的导入Keil

方法一:软件导入(科学上网,网速快)

点图片上红框里绿色的按钮

在这里插入图片描述

由于我之前已经安装过了,以我的芯片型号举例,在search那搜索STM32F407,然后点击install安装

在这里插入图片描述

方法二:离线导入

注意:我只是拿我的芯片举例,其他芯片自行搜索

官网下载:https://www.keil.arm.com/packs/stm32f4xx_dfp-keil/versions/

芯片包下载完后,到Keil里导入,点击File,再点击Import From Folder 找到存放此前下载的芯片包文件夹

在这里插入图片描述

3.基于固件库学习STM32

芯片固件库下载

官网下载:

以STMF407VET6举例,其为F4型号,则点F4

在这里插入图片描述

网页下拉,点击download下载

在这里插入图片描述

STM32官方标准固件介绍

参考文章:https://shequ.stmicroelectronics.cn/thread-635243-1-1.html

芯片固件库文件解压后:

在这里插入图片描述

Libraries 文件夹下面有CMSIS和 STM32F4xx_StdPeriph_Driver 两个目录,这两个目录包含固件库核心的所有子文件夹和文件

在这里插入图片描述

CMSIS文件夹存放的是符合CMSIS规范的一些文件。包括STM32F4核内外设访问层代码,DSP 软件库,RTOS API,以及 STM32F4 片上外设访问层代码等。我们后面新建工程的时候会从这个文件夹复制一些文件到我们工程。

在这里插入图片描述

STM32F4xx_StdPeriph_Driver 放的是 STM32F4 标准外设固件库源码文件和对应的头文件。inc 目录存放的是 stm32f4xx_ppp.h 头文件,无需改动。src 目录下面放的是 stm32f4xx_ppp.c 格式的固件库源码文件。每一个.c 文件和一个相应的.h 文件对应。这里的文件也是固件库外设的关键文件,每个外设对应一组文件。

在这里插入图片描述

Libraries 文件夹里面的文件在我们建立工程的时候都会使用到。

Project 文件夹下面有两个文件夹。顾名思义,STM32F4xx_StdPeriph_Examples 文件夹下面存放的的 ST 官方提供的固件实例源码,在以后的开发过程中,可以参考修改这个官方提供的实例来快速驱动自己的外设,很多开发板的实例都参考了官方提供的例程源码,这些源码对以后的学习非常重要。STM32F4xx_StdPeriph_Template 文件夹下面存放的是工程模板。

[外链图片转存中…(img-5db1178187f24d869920a8b514bc4056.png)

4.Keil工程模板创建

打开STM32固件标准库 点击project

(如何下载STM32固件标准库,具体请点击目录—— “3.基于寄存器学习stm32” )

均以STM32F40XX官方固件库为例
均以STM32F40XX官方固件库为例

点击这个模板STM32F4xx_StdPeriph_Templates

在这里插入图片描述
点击MDK-ARM
在这里插入图片描述
之后你能看到这个绿色的Keil project 工程文件
在这里插入图片描述
这便是STM官方替你写好的工程模板

打开工程模板是这样子的界面

在这里插入图片描述

打开main程序,找到main主函数里的while{},便可以开始写工程了

在这里插入图片描述

5.自己创建工程模板

个人更推荐B站stm32 大佬 “江协科技”的方法,自己创建一个工程模板

大佬B站首页网址:[添加链接描述](https://space.bilibili.com/383400717?spm_id_from=333.337.0.0)

第二章keil 创建新工程

关于keil安装包与stm32固件包的下载可以看我写的笔记第一章
https://blog.csdn.net/2302_76783933/article/details/137752785?spm=1001.2014.3001.5502

为了创建基于STM32F407的keil新建工程,我前期遇到不少问题就此分享

问题1.固件库缺少源文件

按照B站大佬“江协科技”新建keil文件的教程所遇到的问题

B站大佬教程视频截图

在这里插入图片描述

再看看我们下载的官方固件库(以STM32Fxxx为例)

根本就没有后缀名为 .mds文件

在这里插入图片描述

文件夹路径:STM32F4xx_DSP_StdPeriph_Lib_V1.9.0\Libraries\CMSIS\Device\ST\STM32F4xx\Source\Templates\arm

虽然有core_cm4.h文件,但却没有core_cm4.c文件

在这里插入图片描述

文件名路径:D:\Stugying of stm32\stm32f40xxx标准库最新版\en.stsw-stm32065_v1-9-0\STM32F4xx_DSP_StdPeriph_Lib_V1.9.0\Libraries\CMSIS\Include

问题2.官方keil工程模板过于复杂

stm32官方所提供的keil工程模板过于复杂不利于新手

官方模板截图,有众多的文件占用内存,前期学习根本用不到那么多函数,即使成功生成.hex文件,但警告特别多,新手难以看得懂

在这里插入图片描述

最为推荐的方法

我找了一下午终于找到一个非常好的教程

教程链接

不过我在跟着大佬教程时有遇到一些问题,就是我的stm32f4xx.h文件内容与大佬的内容不同

在这里插入图片描述

不过也没关系,直接将STM32F40_41xxx,USE_STDPERIPH_DRIVER拷贝过去就好了

在这里插入图片描述

在补充一下大佬没讲的,记得将这里的魔法棒里的Target里的Arm Compiler 改成 5 vision 或者 5.06版本

在这里插入图片描述

最后点一下编译,0错误、0警告

注意main.c文件里的程序最后要空一行

在这里插入图片描述

问题3.下载的keil里的 Arm Compiler 只有 6 vision

下载地址:https://developer.arm.com/downloads/view/ACOMP5

安装教程:点击三个方块,再点击Foder,再点击Arm Compiler那栏的三个点

在这里插入图片描述

点击Add another Arm Compiler ,然后找到刚刚下载好的Arm Compiler文件导进去

在这里插入图片描述

第三章 正式操作STN32F07系列芯片

注意:以下均以STM32F407VET6为例

一、点亮LED灯

复制粘贴我们的新建工程模板

跳转到的地方

我这边找到一个作者开源的STM32F407VET6文件

Github文件下载网址

点击绿色的Code

在这里插入图片描述

点击download zip

在这里插入图片描述

打开下载好的文件

在这里插入图片描述

打开program
在这里插入图片描述

复制1-新建工程模板

在这里插入图片描述

创建新文件夹led_test

在这里插入图片描述

粘贴新建工程模板到文件夹led_test

1.GPIO

STM32F407VET6下载

github文件下载教程

中文手册跳转至175

在这里插入图片描述

在上图我们可以知道GPIO其实就是每个I/O端口

相信学过51单片机的朋友应该很了解I/O端口

我们再来看看这个芯片的原理图

在这里插入图片描述
我们可以看到我们芯片上写的都是PA0、PB0…PE0之类的,那么我们的GPIO口在哪?

在这里插入图片描述
在这里插入图片描述
可以看到PE口就是GPIOE,PA口就是GPIOA,以此类推

如果还不够理解,现在打开我们刚刚的工程文件led_test

打开keil文件选择打开文件stm32f4xx_gpio.c

在这里插入图片描述
我们可以看到绿色的注释,

GPIOx peripheral 指GPIOx 外设,而PX(PE、PA之类的)就是外设

GPIOx: where x can be (A…K) 指GPIOx,末尾的“x”可以替换为A、B、C…E,就是PA、PB、PC…PE

LED灯是不是芯片的外设,那我们要点亮它,就得用到我们的外设,就得用到GPIO口

这是我板子的LED灯模块

在这里插入图片描述
可以看到我们的LED电路是PE口,那么我们的GPIOx就得是GPIOE;

可以看到我们的PE口是下拉电阻,并且是低电平点亮LED灯;

我建议创建一个led.c文件和led.h文件来编写我们的点灯程序,之后直接在main主函数使用;

led.h文件

在这里插入图片描述

led.c文件
在这里插入图片描述

对于这段代码GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;

ChatGpt 3.5的回答:

GPIO Output type enumeration 可能是指用于描述 GPIO(通用输入输出)引脚输出类型的枚举类型。在嵌入式系统或单片机开发中,GPIO引脚通常可以配置为输出模式,以便控制外部设备的状态。输出类型枚举可能包括:

  1. Push-Pull(推挽):在输出高电平时输出电压为高电平,输出低电平时输出电压为低电平。这种输出类型具有较快的切换速度和较低的功耗。

  2. Open-Drain(开漏):在输出高电平时,GPIO引脚处于高阻态,输出电压由外部上拉电阻决定;在输出低电平时,GPIO引脚连接到地,输出电压为低电平。这种输出类型通常用于需要级联多个设备的情况,例如总线通信。

  3. Open-Source(开源):与开漏类似,但是在输出低电平时,GPIO引脚连接到VCC,输出电压由外部下拉电阻决定。这种类型的输出在一些特定的电路设计中可能会有用。

  4. PWM(脉冲宽度调制):用于产生脉冲宽度调制信号,常用于控制电机速度、调节亮度等应用中。

具体的枚举类型可能会根据硬件平台或开发框架的不同而有所不同,你可能需要查阅相关文档或资料来了解特定平台或框架中的 GPIO 输出类型枚举。

如何查看那些官方帮我们写好的代码

在这里插入图片描述
将光标移动到这里,点击鼠标左键在这里插入图片描述
点击GO To Definition Of ‘GPIO_Init’

这时我们就能看到函数的功能,以及如何使用

在这里插入图片描述

模块化编程

将创建好的led.h头文件在主函数里使用,即模块化编程

优点是避免了主程序因编写过多的代码而冗长,并且可以随时调用;

在这里插入图片描述

教大家怎么看keil工程文件

源代码呀,头文件呀

使能,初始化,在同一个寄存器可以使用与或

2.RCC时钟

为什么要初始化时钟?

在这里插入图片描述

ChatGpt 3.5的回答:

在使用STM32(STMicroelectronics出品的一系列32位ARM Cortex-M微控制器)时,需要初始化RCC(Reset
and Clock
Control)时钟,是因为时钟是微控制器运行的基础。RCC模块负责控制微控制器的时钟源以及时钟分频,确保微控制器能够以正确的时钟频率运行。

具体来说,RCC模块可以执行以下功能:

  1. 时钟源选择:RCC允许你选择外部晶振、内部时钟源(比如内部RC振荡器)或者外部时钟源作为微控制器的主时钟源。

  2. 时钟分频:RCC还允许你设置主时钟频率的分频比例,以便得到你需要的特定时钟频率。

  3. 时钟使能:RCC负责使能或者关闭各种外设和总线的时钟,以便控制这些外设和总线的工作状态。

因此,在使用STM32时,初始化RCC时钟是非常重要的一步。如果未正确初始化RCC时钟,可能导致微控制器无法正常工作,外设不能正确访问,甚至可能导致系统不稳定或者崩溃。

3.烧录

如何根据电路原理图来判断烧录方法?

ChatGpt 3.5的回答:

Fly MCU的使用方法

以及如何根据原理图来判断板子的烧录方式

这个很重要

ST-Link 啊,J-Link啊

我所遇到的错误五

至于Stm32F07,我先发一下

不要拘泥,不要被局限

转化思路

买个F103开始学江科大

  • 28
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
基于STM32F407VET6的送药小车主要是一种自动化的医药物品送达系统,用于增强医院药物配送效率。该小车集成了STM32F407的微控制器,具有强大的处理能力和丰富的接口,能够实现复杂的控制逻辑和通信功能。 这个送药小车主要分为两个部分:机械部分和电子控制部分。机械部分包括车体和药物货架,车体上安装有电动轮组,可通过电机实现运动和导航。药物货架上设置了分层的药物架,能够容纳不同种类的药物。 而电子控制部分主要由STM32F407微控制器、传感器和无线通信模块组成。微控制器基于实时操作系统实现控制任务调度和交互逻辑。传感器包括编码器和红外传感器,用于感知车体的位置和避免障碍物。无线通信模块通过Wi-Fi或蓝牙实现与中央控制系统的通信,接受任务指令和传送完成状态。 送药小车的工作流程如下:首先,中央控制系统接收到医院内各个科室发出的药物配送请求,并根据药物类型和送达时间要求生成任务指令。任务指令通过无线通信模块传输给送药小车。小车接收任务指令后,通过传感器感知周围环境,确定车体位置,并根据任务指令规划路径。车体随后按照路径运动到指定位置,将药物从货架上取下并送达到目的地。小车在完成任务后,通过无线通信模块将完成状态反馈给中央控制系统。 这种基于STM32F407VET6的送药小车能够提高医院药物配送的效率和准确性,减少人工配送的工作量,实现自动化管理。未来还可以进一步优化其导航功能、增加药物储存容量和提升远程控制等功能,使其更加智能化和可靠。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值