第1章 初学STM32F429的准备工作
俗话说万事开头难,学习一门新的知识,难的往往不是知识本身,而是如何快速上手,需要什么资料和开发环境。一旦上手后,深入的学习就相对容易些了。
1.1 初学者重要提示
1.2 开发环境说明
1.3 F1和F429系列的区别
1.4 STM32F429开发资源查找
1.5 HAL库介绍
1.6 CMSIS软件包
1.7 STM32CubeMX图形平台
1.8 STM32F429调试方法
1.9 STM32F429出现硬件异常的解决办法
1.10总结
1.1 初学者重要提示
- 关于学习方法问题,可以看附件章节A。
- 学会 STM32F429相关资源的获取方法,做到心中有数,否则心里老是没底。
- 关于MDK和IAR两种编译器,推荐都掌握,以其中一个为主,另一个为辅。因为很多时候我们需要参考的工程代码不是自己熟悉的编译器,就会很被动。
- 这几年涌现出好几款非常棒的调试工具(如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-V6开发板,MCU是STM32F429BIT6。
1.3 F1和F429系列的区别
F1和F4系列的区别。
- F1采用Crotex M3内核,F429采用Crotex M4内核。
- F1最高主频 72MHz, F429最高主频180MHz。
- F429具有单精度浮点运算单元,F1没有浮点运算单元。
- F429的具备增强的DSP指令集。F429的执行16位DSP指令的时间只有F1的30%~70%。F429执行32位DSP指令的时间只有F1的25%~60%。
- F1内部SRAM最大64K字节,F429 SRAM有256K字节(192K+64K+16K+64KB)。
- F429有备份域SRAM(通过Vbat供电保持数据),F1没有备份域SRAM。
- F429从内部SRAM和外部FMC存储器执行程序的速度比F1快很多。F1的指令总线I-Bus只接到Flash上,从SRAM和FMC取指令只能通过S-Bus,速度较慢。F429的I-Bus不但连接到Flash上,而且还连接到SRAM和FMC上,从而加快从SRAM或FMC取指令的速度。
- F1最大封装为144脚,可提供112个GPIO;F429最大封装有216脚,可提供168个GPIO。
- F1的GPIO的内部上下拉电阻配置仅仅针对输入模式有用,输出时无效。而F429的GPIO在设置为输出模式时,上下拉电阻的配置依然有效。即F429可以配置为开漏输出,内部上拉电阻使能,而F1不行。
- F429的GPIO最高翻转速度为90MHz,F1最大翻转速度只有18MHz。
- F1最多可提供5个UART串口,F429最多可以提供8个UART串口。
- F1可提供2个I2C接口,F429可以提供3个I2C接口。
- F1和F429都具有3个12位的独立ADC,F1可提供21个输入通道,F429可以提供24个输入通道。F1的ADC最大采样频率为1Msps,2路交替采样可到2Msps(F1不支持3路交替采样)。F4的ADC最大采样频率为2.4Msps,3路交替采样可到7.2Msps。
- F1只有12个DMA通道,F429有16个DMA通道。F429的每个DMA通道有4*32位FIFO,F1没有FIFO。
- F1的SPI时钟最高速度为 18MHz, F429可以到45MHz。
- F1没有独立的32位定时器(32位需要级联实现),F429的TIM2和TIM5具有32位上下计数功能。
- F1和F429都有2个I2S接口,但是F1的I2S只支持半双工(同一时刻要么放音,要么录音),而F429的I2S支持全双工,放音和录音可以同时进行。
- 从编程的角度来说,M3和M4几乎没有区别。而性能上区别可以看此贴:http://www.armbbs.cn/forum.php?mod=viewthread&tid=21850
总的来说,主要有上面这四点不同,其它地方与使用F1,F4系列是相同的。
1.4 STM32F429开发资源查找
学习一款新的芯片,需要大家从官方获取两方面的资料,一个是相关的技术文档,比如参数手册、数据手册、应用笔记等;另一个是软件包,官方在软件包中提供了外设驱动库和基于此库的大量例程。
1.4.1 开发文档
学习STM32F429主要下载哪些相关手册呢?主要有以下几个,这几个手册是我们经常要使用到的,不光学习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官方升级后,通过页面超链接的方式查找非常不方便,当前推荐直接在官方右上角的方框里面检索即可,比如使用的是STM32F429,直接输入STM32F429检索:
- 第1步:进入ST官方地址www.st.com,页面上侧中间编辑框输入STM32F429检索。
- 第2步:检索后会弹出所有STM32F429的芯片(随着时间推移,会增加新型号)。
- 第3步:比如我们用的是STM32F429BI,点击进入第2步截图中的STM32F429BI选项即可。进入后,所有的相关资源就都在这个页面下了。
数据手册标识:
应用笔记标识:
参考手册标识:
编程手册标识:
勘误手册标识:
基本上大家所需的开发文档都在这个页面下了。
1.4.2 软件包
通过上面小节整理完毕相关文档后,就是STM32F429软件包的下载了。软件包也比较好找,同样推荐1.4.1小节的方式。
- 第1步:进入ST官方地址www.st.com ,页面上侧中间编辑框输入STM32CubeF4检索。
- 第2步:检索后会弹出STM32CubeF4的软件包选项。
- 第3步:进入STM32CubeF4的页面地址后,就在页面的最底端看到这个软件包了(随着时间推移,版本会不断更新)。
- 第4步:点击按钮“Get Software”后,弹出如下界面
点击ACCEPT进入下面界面:
点击Login/Register
通过上面四步就获取了STM32F429的软件包。软件包的目录结构如下:
1.5 HAL库介绍
HAL库就包含在大家下载的STM32CubeF4软件包里面。软件包的框图如下:
HAL库全称Hardware Abstraction Layer,即硬件抽象层,其实就是STM32F429的外设驱动包。代码文件位于路径:\Drivers\STM32F4xx_HAL_Driver。如下是部分截图:
单从人性化角度,这些外设驱动写的还是比较用心的,特别是每个C文件开头的使用说明。比如文件stm32f4xx_hal_gpio.c开头的说明:
HAL库的使用方法跟之前F4系列的标准库差不多,只是HAL库封装的稍显臃肿。事情都是两面的,代码臃肿了,易用性会好些。
1.6 CMSIS软件包介绍
CMSIS(微控制器软件接口标准,Cortex Microcontroller Software Interface Standard)是ARM官方设计的驱动包,框图如下:
ARM推出CMSIS软件包意在统一各大芯片厂商的外设驱动,DSP数字信号处理,下载器和各个主流RTOS的API统一。几年下来,各个厂商一直是各自为战,所以CMSIS的驱动一直没有被各个芯片厂商采用。而且ARM做得也不够完善,没有ADC、DAC、定时器之类的外设驱动。
这两年情况好了不少,特别是ARM为ST做的CMSIS-Driver明显完善了很多。针对我们这个教程来说,当前还用不到这些东西,主要用到CMSIS软件包里面的如下头文件即可(不同版本,截图中的文件可能不同,这个软件包是一直在更新中的,下面的截图的版本是V5.5.1):
这个软件包可以在三个地方获取:
- 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软件包了。
当然,也可以在ARM官网下载,只是这两年ARM官网升级得非常频繁,通过检索功能找资料非常麻烦。所以不推荐大家到ARM官网下载资料了。
下面为大家简单介绍下CMSIS软件包里面这几个文件夹:
- 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文档,打开后效果如下:
- Driver
这个是ARM做好的驱动框架,支持的外设如下:
针对不同厂商,ARM会出一个完整的驱动包,比如STM32F4系列,在MDK安装目录的此路径下(前提是大家安装了STM32F4软件包):ARM\PACK\Keil\STM32F4xx_DFP\2.13.0\CMSIS\Driver。
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新出的神经网络库,框图如下:
- Packs
这个文件没什么用,大家不用管。
- RTOS
这个是RTX4以及CMSIS-RTOS V1封装层,含源码,免费,Apache-2.0授权。
- RTOS2
这个是RTX5以及CMSIS-RTOS V2封装层,含源码,免费,Apache-2.0授权。
- SVD
SVD的全称是System View Description,系统视图描述。对芯片的外设、存储器等进行了详细描述,编译器要用到这个文件,不同系列芯片有不同的SVD文件。以STM32F429为例,在MDK的option选项里面可以看到以svd为后缀的文件被调用。
- Utilities
这个文件里面提供了一些实用的小软件或者文件。
关于CMSIS软件包就为大家介绍这么多,后面用到哪个文件时,再为大家详细介绍。
1.7 STM32CubeMX开发平台
STM32CubeMX是ST在2014年推出的图形开发软件,方便用户配置时钟、外设、引脚以及RTOS和各种中间件。整体框图如下:
通过这个图形软件,可以让大家方便地生成工程代码,支持MDK,IAR,TrueSTUDIO等编译器。针对STM32CubeMX的使用,后面会专门做几期专题教程。
1.8 STM32F429调试方法
STM32F429的调试方法主要分为两大类:
- MDK和IAR编译器自带的调试
MDK调试方法在第5章进行了详细讲解。
IAR调试方法在第7章进行了详细讲解。
- 终极调试组件Event Recoder的使用方法。
在8章节进行了详细讲解。
1.9 STM32F429出现硬件异常的解决办法
大家做项目时,经常会遇到硬件异常问题,所以专门为此做了一个章节(具体在11章节进行了详细讲解)。
1.10 总结
本章节就为大家讲解这么多,建议初学者花些时间对 STM32F429的开发文档的章节结构了解一下,随着以后的学习最好可以达到熟练查看这些开发文档的程度。
微信公众号:armfly_com