硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1159|回复: 0
收起左侧

[BSP驱动教程] 【STM32F407用户手册】第1章 初学STM32F407的准备工作

[复制链接]

740

主题

1326

回帖

3546

积分

管理员

春暖花开

Rank: 9Rank: 9Rank: 9

积分
3546
QQ
发表于 2021-12-1 22:02:37 | 显示全部楼层 |阅读模式
本帖最后由 席萌0209 于 2021-12-1 22:11 编辑

第1章    初学STM32F407的准备工作
俗话说万事开头难,学习一门新的知识,难的往往不是知识本身,而是如何快速上手,需要什么资料和开发环境。一旦上手后,深入的学习就相对容易些了。
1.1 初学者重要提示
1.2 开发环境说明
1.3 F1和F407系列的区别
1.4 STM32F407开发资源查找
1.5 HAL库介绍
1.6 CMSIS软件包
1.7 STM32CubeMX图形平台
1.8 STM32F407调试方法
1.9 STM32F407出现硬件异常的解决办法
1.10总结


1.1    初学者重要提示
1、关于学习方法问题,可以看附件章节A。
2、学会 STM32F407相关资源的获取方法,做到心中有数,否则心里老是没底。
3、关于MDK和IAR两种编译器,推荐都掌握,以其中一个为主,另一个为辅。因为很多时候我们需要参考的工程代码不是自己熟悉的编译器,就会很被动。
4、这几年涌现出好几款非常棒的调试工具(如Event Recoder,SEGGER RTT),教程的后面章节会为大家做讲解。

1.2    开发环境说明
1、    IDE:支持两种IDE开发环境,MDK和IAR
  •    MDK推荐使用MDK5.26正式版及其以上版本。
  •    IAR固定使用IAR8.3版本,由于IAR向下兼容性稍差,其它版本未做支持。
2、    调试器使用JLINK,CMSIS-DAP,ULINK或者STLINK均可。
3、    配套开发板是安富莱的:STM32-V5开发板,MCU是STM32F407IGT6。

1.3    F1和F407系列的区别
F1和F4系列的区别。
  •     F1采用Crotex M3内核,F407采用Crotex M4内核。
  •     F1最高主频 72MHz, F407最高主频168MHz。
  •     F407具有单精度浮点运算单元,F1没有浮点运算单元。
  •     F407的具备增强的DSP指令集。F407的执行16位DSP指令的时间只有F1的30%~70%。F407执行32位DSP指令的时间只有F1的25%~60%。
  •     F1内部SRAM最大64K字节, F407 SRAM有192K字节(112K+64K+16K)。
  •     F407有备份域SRAM(通过Vbat供电保持数据),F1没有备份域SRAM。
  •     F407从内部SRAM和外部FMC存储器执行程序的速度比F1快很多。F1的指令总线I-Bus只接到Flash上,从SRAM和FMC取指令只能通过S-Bus,速度较慢。F407的I-Bus不但连接到Flash上,而且还连接到SRAM和FMC上,从而加快从SRAM或FMC取指令的速度。
  •     F1最大封装为144脚,可提供112个GPIO;F407最大封装有176脚,可提供140个GPIO。
  •     F1的GPIO的内部上下拉电阻配置仅仅针对输入模式有用,输出时无效。而F407的GPIO在设置为输出模式时,上下拉电阻的配置依然有效。即F407可以配置为开漏输出,内部上拉电阻使能,而F1不行。
  •     F407的GPIO最高翻转速度为90MHz,F1最大翻转速度只有18MHz。
  •     F1最多可提供5个UART串口,F407最多可以提供6个UART串口。
  •     F1可提供2个I2C接口,F407可以提供3个I2C接口。
  •     F1和F407都具有3个12位的独立ADC,F1可提供21个输入通道,F407可以提供24个输入通道。F1的ADC最大采样频率为1Msps,2路交替采样可到2Msps(F1不支持3路交替采样)。F4的ADC最大采样频率为2.4Msps,3路交替采样可到7.2Msps。
  •     F1只有12个DMA通道,F407有16个DMA通道。F407的每个DMA通道有4*32位FIFO,F1没有FIFO。
  •     F1的SPI时钟最高速度为 18MHz, F407可以到37.5MHz。
  •     F1没有独立的32位定时器(32位需要级联实现),F407的TIM2和TIM5具有32位上下计数功能。
  •     F1和F407都有2个I2S接口,但是F1的I2S只支持半双工(同一时刻要么放音,要么录音),而F407的I2S支持全双工,放音和录音可以同时进行。
  •     从编程的角度来说,M3和M4几乎没有区别。而性能上区别可以看此贴:http://www.armbbs.cn/forum.php?mod=viewthread&tid=21850

总的来说,主要有上面这四点不同,其它地方与使用F1,F4系列是相同的。

1.4    STM32F407开发资源查找
学习一款新的芯片,需要大家从官方获取两方面的资料,一个是相关的技术文档,比如参数手册、数据手册、应用笔记等;另一个是软件包,官方在软件包中提供了外设驱动库和基于此库的大量例程。

1.4.1    开发文档
学习STM32F407主要下载哪些相关手册呢?主要有以下几个,这几个手册是我们经常要使用到的,不光学习STM32需要这类手册,学习FPGA、DSP也是这些类型的手册,熟练查阅和使用这些手册也是电子工程师必备的知识之一。
  •     参考手册(Reference Manual)
对芯片每个外设的具体描述和功能介绍,比如我们要查USART,SPI,DMA相关寄存器和功能的介绍就可以使用这个手册。
  •     数据手册(Data Sheet)
在我们要画PCB的时候用到这个手册的情况比较多,这个手册上面有关于这个系列芯片的引脚定义、电气特性、机械封装、料号定义等信息。
  •     勘误手册(Errata Sheet)
描述了芯片某些功能的局限性,并给出解决办法。这个手册也比较重要,有时候我们觉得有些地方调试老是出问题,就需要查找一下,看看是否是硬件bug。
  •     闪存编程手册(Flash Programming Manual)
芯片的片上Flash操作指南,比如芯片的擦除,编程,闪存读写保护,选项字节信息等。
  •     内核编程手册(Cortex-M Programming Manual)
对内核的系统控制块的介绍。这个手册有时候也要用到,比如我们需要了解NVIC和SysTick相关的寄存器,就需要使用这个手册。这个手册可以在ARM官方网站下载,也可以到ST官网下载,区别是ARM官网下载的手册是通用的,而ST的是针对自家芯片做的。有时候在参考手册上面找不到相关寄存器的信息时,就需要用到这个手册。
  •     应用笔记(Application Note)
针对不同应用主题的描述性文档,部分笔记还会有配套的固件例程。应用笔记的重要性不言而喻,很多时候官方对一些应用做出了解决方案,都会以应用笔记的形式发布。
  •     用户手册(User Manual)
一般是对某个软件库的说明文档。
  •     Cortex-M3/M4权威指南
这也是非常重要的参考资料,对于有兴趣了解M3/M4内核的同学,这个资料相当重要,了解了内核才能更好的利用M3/M4。论坛下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=2161
了解了这些手册的作用以后,我们学习如何在官网上面查找这些文档。前几年ST官方升级后,通过页面超链接的方式查找非常不方便,当前推荐直接在官方右上角的方框里面检索即可,比如使用的是STM32F407,直接输入STM32F407检索:
  1、  第1步:进入ST官方地址www.st.com,页面上侧中间编辑框输入STM32F407检索。
1.png
  2、  第2步:检索后会弹出所有STM32F407的芯片(随着时间推移,会增加新型号)。
2.png
  3、  第3步:比如我们用的是STM32F407IG,点击进入第2步截图中的STM32F407IG选项即可。进入后,所有的相关资源就都在这个页面下了。
3.png
数据手册标识:
4.png
应用笔记标识:
5.png
参考手册标识:
6.png
编程手册标识:
7.png
勘误手册标识:
8.png
基本上大家所需的开发文档都在这个页面下了。

1.4.2    软件包
通过上面小节整理完毕相关文档后,就是STM32F407软件包的下载了。软件包也比较好找,同样推荐1.4.1小节的方式。

1、第1步:进入ST官方地址www.st.com ,页面上侧中间编辑框输入STM32CubeF4检索。
9.png
2、第2步:检索后会弹出STM32CubeF4的软件包选项。
10.png
3、第3步:进入STM32CubeF4的页面地址后,就在页面的最底端看到这个软件包了(随着时间推移,版本会不断更新)。
11.png
4、第4步:点击按钮“Get Software”后,弹出如下界面
12.png
点击ACCEPT进入下面界面:
13.png
点击Login/Register
14.png
通过上面四步就获取了STM32F407的软件包。软件包的目录结构如下:
15.png

1.5    HAL库介绍
HAL库就包含在大家下载的STM32CubeF4软件包里面。软件包的框图如下:
16.png
HAL库全称Hardware Abstraction Layer,即硬件抽象层,其实就是STM32F407的外设驱动包。代码文件位于路径:\Drivers\STM32F4xx_HAL_Driver。如下是部分截图:
17.png
单从人性化角度,这些外设驱动写的还是比较用心的,特别是每个C文件开头的使用说明。比如文件stm32f4xx_hal_gpio.c开头的说明:
  1.   ==============================================================================
  2.                     ##### GPIO Peripheral features #####
  3.   ==============================================================================
  4.   [..]
  5.   Subject to the specific hardware characteristics of each I/O port listed in the datasheet, each
  6.   port bit of the General Purpose IO (GPIO) Ports, can be individually configured by software
  7.   in several modes:
  8.   (+) Input mode
  9.   (+) Analog mode
  10.   (+) Output mode
  11.   (+) Alternate function mode
  12.   (+) External interrupt/event lines

  13.   [..]  
  14.   During and just after reset, the alternate functions and external interrupt  
  15.   lines are not active and the I/O ports are configured in input floating mode.
  16.   
  17.   [..]   
  18.   All GPIO pins have weak internal pull-up and pull-down resistors, which can be
  19.   activated or not.

  20.   [..]
  21.   In Output or Alternate mode, each IO can be configured on open-drain or push-pull
  22.   type and the IO speed can be selected depending on the VDD value.

  23.   [..]  
  24.   All ports have external interrupt/event capability. To use external interrupt
  25.   lines, the port must be configured in input mode. All available GPIO pins are
  26.   connected to the 16 external interrupt/event lines from EXTI0 to EXTI15.
  27.   
  28.   [..]
  29.   The external interrupt/event controller consists of up to 23 edge detectors
  30.   (16 lines are connected to GPIO) for generating event/interrupt requests (each
  31.   input line can be independently configured to select the type (interrupt or event)
  32.   and the corresponding trigger event (rising or falling or both). Each line can
  33.   also be masked independently.

  34.                      ##### How to use this driver #####
  35.   ==============================================================================  
  36.   [..]
  37.     (#) Enable the GPIO AHB clock using the following function: __HAL_RCC_GPIOx_CLK_ENABLE().

  38.     (#) Configure the GPIO pin(s) using HAL_GPIO_Init().
  39.         (++) Configure the IO mode using "Mode" member from GPIO_InitTypeDef structure
  40.         (++) Activate Pull-up, Pull-down resistor using "Pull" member from GPIO_InitTypeDef
  41.              structure.
  42.         (++) In case of Output or alternate function mode selection: the speed is
  43.              configured through "Speed" member from GPIO_InitTypeDef structure.
  44.         (++) In alternate mode is selection, the alternate function connected to the IO
  45.              is configured through "Alternate" member from GPIO_InitTypeDef structure.
  46.         (++) Analog mode is required when a pin is to be used as ADC channel
  47.              or DAC output.
  48.         (++) In case of external interrupt/event selection the "Mode" member from
  49.              GPIO_InitTypeDef structure select the type (interrupt or event) and
  50.              the corresponding trigger event (rising or falling or both).

  51.     (#) In case of external interrupt/event mode selection, configure NVIC IRQ priority
  52.         mapped to the EXTI line using HAL_NVIC_SetPriority() and enable it using
  53.         HAL_NVIC_EnableIRQ().
  54.          
  55.     (#) To get the level of a pin configured in input mode use HAL_GPIO_ReadPin().
  56.             
  57.     (#) To set/reset the level of a pin configured in output mode use
  58.         HAL_GPIO_WritePin()/HAL_GPIO_TogglePin().
  59.    
  60.     (#) To lock pin configuration until next reset use HAL_GPIO_LockPin().

  61.                  
  62.     (#) During and just after reset, the alternate functions are not
  63.         active and the GPIO pins are configured in input floating mode (except JTAG
  64.         pins).
  65.   
  66.     (#) The LSE oscillator pins OSC32_IN and OSC32_OUT can be used as general purpose
  67.         (PC14 and PC15, respectively) when the LSE oscillator is off. The LSE has
  68.         priority over the GPIO function.
  69.   
  70.     (#) The HSE oscillator pins OSC_IN/OSC_OUT can be used as
  71.         general purpose PH0 and PH1, respectively, when the HSE oscillator is off.
  72.         The HSE has priority over the GPIO function.
复制代码

HAL库的使用方法跟之前F4系列的标准库差不多,只是HAL库封装的稍显臃肿。事情都是两面的,代码臃肿了,易用性会好些。

1.6    CMSIS软件包介绍
CMSIS(微控制器软件接口标准,Cortex Microcontroller Software Interface Standard)是ARM官方设计的驱动包,框图如下:
18.png
ARM推出CMSIS软件包意在统一各大芯片厂商的外设驱动,DSP数字信号处理,下载器和各个主流RTOS的API统一。几年下来,各个厂商一直是各自为战,所以CMSIS的驱动一直没有被各个芯片厂商采用。而且ARM做得也不够完善,没有ADC、DAC、定时器之类的外设驱动。
这两年情况好了不少,特别是ARM为ST做的CMSIS-Driver明显完善了很多。针对我们这个教程来说,当前还用不到这些东西,主要用到CMSIS软件包里面的如下头文件即可(不同版本,截图中的文件可能不同,这个软件包是一直在更新中的,下面的截图的版本是V5.5.1):
19.png
这个软件包可以在三个地方获取:
  • STM32CubeF4软件包里面。
每个版本的Cube软件包都会携带CMSIS文件夹。
  •   MDK安装目录(下面是5.5.1版本的路径)。
大家安装了新版MDK后,CMSIS软件包会存在于路径:ARM\PACK\ARM\CMSIS\5.5.1\CMSIS。
  •   GitHub。
通过GitHub获取也比较方便,地址:https://github.com/ARM-software/CMSIS_5 。点击右上角就可以下载CMSIS软件包了。
20.png
当然,也可以在ARM官网下载,只是这两年ARM官网升级得非常频繁,通过检索功能找资料非常麻烦。所以不推荐大家到ARM官网下载资料了。
下面为大家简单介绍下CMSIS软件包里面这几个文件夹:
21.png
  •     Core
Cortex-M处理器内核和外设的API。 它为Cortex-M0,Cortex-M0 +,Cortex-M3,Cortex-M4,Cortex-M7,Cortex-M23,Cortex-M33,SC000和SC300提供了标准化接口。 还包括用于Cortex-M4,Cortex-M7和Cortex-M33 的SIMD指令。当前这个文件下只有一个示例文件,还用不上。
  •     Core_A
同上,只是用于Cortex-A5/A7/A9。
  •     DAP
这个是ARM官方推出的下载器固件,也就是大家所说的CMSIS-DAP下载器。
  •     Documentation
这个是CMSIS软件包的Help文档,打开后效果如下:
22.png
  •    Driver
这个是ARM做好的驱动框架,支持的外设如下:
23.png
针对不同厂商,ARM会出一个完整的驱动包,比如STM32F4系列,在MDK安装目录的此路径下(前提是大家安装了STM32F4软件包):ARM\PACK\Keil\STM32F4xx_DFP\2.13.0\CMSIS\Driver。
24.png
ARM做的这个驱动跟HAL库有什么区别呢?ARM做的这个库要调用到HAL的一些API,然后封装了一些比较好用的API,方便用户调用。
  •     DSP_Lib
这个是ARM提供的DSP库,此库支持以CM0、CM3、CM4以及CM7为内核的所有MCU,含源码。详细介绍可以看我们的DSP教程:http://www.armbbs.cn/forum.php?mod=viewthread&tid=3886
  •     Include
这个文件比较重要,虽然是头文件,但是封装了很多内核方面的API,是大家工程里面务必包含的路径。
  •     Lib
这个文件是GCC和MDK格式的DSP库文件。
  •     NN
这个是ARM新出的神经网络库,框图如下:
25.png
  •     Packs
这个文件没什么用,大家不用管。
  •     RTOS
这个是RTX4以及CMSIS-RTOS V1封装层,含源码,免费,Apache-2.0授权。
  •     RTOS2
这个是RTX5以及CMSIS-RTOS V2封装层,含源码,免费,Apache-2.0授权。
  •     SVD
SVD的全称是System View Description,系统视图描述。对芯片的外设、存储器等进行了详细描述,编译器要用到这个文件,不同系列芯片有不同的SVD文件。以STM32F407为例,在MDK的option选项里面可以看到以svd为后缀的文件被调用。
26.png
  •     Utilities
这个文件里面提供了一些实用的小软件或者文件。

关于CMSIS软件包就为大家介绍这么多,后面用到哪个文件时,再为大家详细介绍。

1.7    STM32CubeMX开发平台
STM32CubeMX是ST在2014年推出的图形开发软件,方便用户配置时钟、外设、引脚以及RTOS和各种中间件。整体框图如下:
27.png
通过这个图形软件,可以让大家方便地生成工程代码,支持MDK,IAR,TrueSTUDIO等编译器。针对STM32CubeMX的使用,后面会专门做几期专题教程。

1.8    STM32F407调试方法
STM32F407的调试方法主要分为两大类:
  •    MDK和IAR编译器自带的调试

MDK调试方法在第5章进行了详细讲解。
IAR调试方法在第7章进行了详细讲解。
  •     终极调试组件Event Recoder的使用方法。

在8章节进行了详细讲解。

1.9    STM32F407出现硬件异常的解决办法
大家做项目时,经常会遇到硬件异常问题,所以专门为此做了一个章节(具体在11章节进行了详细讲解)。

1.10    总结
本章节就为大家讲解这么多,建议初学者花些时间对 STM32F407的开发文档的章节结构了解一下,随着以后的学习最好可以达到熟练查看这些开发文档的程度。



努力打造安富莱高质量微信公众号:点击扫描图片关注
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-5 00:50 , Processed in 0.202112 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表