STM32F7原理与应用——寄存器版(上)
序
2014年底,意法半导体(ST)发布了STM32F7系列芯片。该芯片采用ARM公司最近发布的最新、最强的ARMCortexM7内核,其性能约为意法半导体原有最强处理器STM32F4(采用ARMCortexM4内核)的两倍。STM32F7系列微控制器的工作频率高达216MHz,采用6级超标量流水线和硬件浮点单元(FloatingPointUnit,FPU),测试分数高达1000CoreMark。在STMCU高级市场部经理曹锦东先生的帮助下,作者有幸于2015年拿到了STM32F7的样片和评估板。STM32F7强大的处理能力以及丰富的外设资源足以应付各种需求,在工业控制、音频处理、智能家居、物联网和汽车电子等领域,有着广泛的应用前景。其强大的DSP处理性能足以替代一部分DSP处理器,在中高端通用处理器市场有很强的竞争力。由于STM32F7和ARMCortexM7公布都不久,除了ST官方的STM32F7文档和源码,网络上很少有相关的教程和代码,遇到问题时也很少有人可以讨论。作为STM32F7在国内较早的使用者,作者经过近两年的学习和研究,将STM32F7的所有资源摸索了一遍,在此过程中,发现并解决了不少bug。为了让没接触过STM32F7的朋友更快、更好地掌握STM32F7,作者设计了一款STM32F7开发板(阿波罗STM32F767开发板),并对STM32F7的绝大部分资源编写了例程和详细教程。这些教程浅显易懂,使用的描述语言很自然,而且图文并茂,每一个知识点都设计了一个可以运行的示例程序,非常适合初学者学习。时至今日,书已成型,两年的时间包含了太多的心酸与喜悦,最终呈现给读者的是包括:《STM32F7原理与应用———寄存器版(上)》、《STM32F7原理与应用———寄存器版(下)》、《STM32F7原理与应用———HAL库版(上)》和《STM32F7原理与应用———HAL库版(下)》共4本书的一套书籍。这主要有以下几点考虑:①STM32F7的代码编写有两种方式:寄存器和HAL库。寄存器方式编写的代码具有精简、高效的特点,但是需要程序员对相关寄存器比较熟悉;HAL库方式编写的代码具有简单、易用的特点,但是效率低,代码量较大。一般想深入学习了解的话,建议选择寄存器方式;想快速上手的话,建议选择HAL库方式。实际应用中,这两种方式都有很多朋友选择,所以分为寄存器和库函数两个版本出版。②STM32F7的功能十分强大,外设资源也非常丰富,因此教程篇幅也相对较大,而一本书的厚度是有限的,无法将所有内容都编到一本书上,于是分成上下两册。
由于STM32F7的知识点非常多,即便分成上下两册,对很多方面也没有深入探讨,需要后续继续研究,而一旦有新的内容,我们将尽快更新到开源电子网(www.openedv.com)。STM32F7简介STM32F7是ST公司推出的第一款基于ARMCortexM7内核的微处理器,具有6级流水线、硬件单/双精度浮点计算单元、L1I/DCache、支持Flash零等待运行代码、支持DSP指令、主频高达216MHz,实际性能是STM32F4的两倍;另外,还有QSPI、FMC、TFTLCD控制器、SAI、SPDIF、硬件JPEG编解码器等外设,资源十分丰富。套书特色本套书籍作为学习STM32F7的入门级教材,也是市面上第一套系统地介绍STM32F7原理和应用的教材,具有如下特色:最新。新芯片,使用最新的STM32F767芯片;新编译器,使用最新的MDK5.21编译器;新库,基于ST主推的HAL库编写(HAL库版)代码,不再使用标准库。最全。书中包含了大量例程,基本上STM32F7的所有资源都有对应的实例,每个实例都从原理开始讲解→硬件设计→软件设计→结果测试,详细介绍了每个步骤,力求全面掌握各个知识点。循序渐进。书本从实验平台开始→硬件资源介绍→软件使用介绍→基础知识讲解→例程讲解,一步一步地学习STM32F7,力求做到心中有数,循序渐进。由简入难。书本例程从最基础的跑马灯开始→最复杂的综合实验,由简入难,一步步深入,完成对STM32F7各个知识点的学习。无限更新。由于书本的特殊性,无法随时更新,一旦有新知识点的教程和代码,作者都会发布在开源电子网(www.openedv.com),读者多关注即可。套书结构本套书籍一共分为2个版本,共4本:《STM32F7原理与应用———寄存器版(上)》、
《STM32F7原理与应用———寄存器版(下)》、《STM32F7原理与应用———HAL库版(上)》和《STM32F7原理与应用———HAL库版(下)》。其中,寄存器版本全部基于寄存器操作,精简高效,适合深入学习和研究;HAL库版本全部采用HAL库操作,简单易用,适合快速掌握和使用。上册详细介绍了实验平台的硬件、开发软件的入门和使用、新建工程、下载调试和30个基础例程,并且这30个基础例程绝大部分都是针对STM32F7内部一些基本外设的使用,比较容易掌握,也是灵活使用STM32F7的基础。对于想入门,或者刚接触STM32F7的朋友,上册版本是您的理想之选。下册则详细介绍了34/35(寄存器版多了综合实验)个高级例程,针对STM32F7内部的一些高级外设和第三方代码(FATFS、Lwip、μC/OS和音频解码库等)的使用等做了详细介绍,对学习者要求比较高,适合对STM32F7有一定了解、基础比较扎实的朋友学习。本套书籍的结构如下所示:
使用本套书籍对于时间充足、有过单片机使用经验、对底层驱动感兴趣的朋友,建议选择寄存器版本学习。因为它全部是基于最底层的寄存器操作,对学习者要求比较高,需要较多的时间来掌握,但是学会之后,编写代码思路会清晰很多,而且代码精简,效率极高。对于想快速入门、对底层接口兴趣不大,专注应用层软件的朋友,建议选择HAL库版本学习。因为它的底层驱动,全部由ST官方写好了,读者只须学会函数和参数的使用,就能实现对相关外设的驱动,有利于快速编写驱动代码,无须繁琐地查看寄存器,容易入门,能有更多的时间来实现应用层的功能。对于没有学习过STM32F7的初学者,建议先学习上册的内容,它对STM32F7的软硬件开发环境进行了详细的介绍,从新建工程教起,包括30个STM32F7内部资源使用的基础例程,每个例程都有详细的解说和示例程序,非常适合初学者入门。对于有一定单片机编程基础、对STM32F7有一定了解(最好学过本套书籍上册内容)、想进一步提高的朋友,推荐学习下册内容,它对STM32F7的一些高级外设有详细介绍和参考代码,并且对第三方代码组件也有比较详细的介绍,非常适合较大工程的应用。致谢感谢北京航空航天大学出版社,它的支持才让本套书籍得以和大家见面。感谢开源电子网的网友,是他们的支持和帮助才让我一步一步走了下来,其中有一些朋友还参与了本套书籍的审校和代码审核工作,特别感谢:八度空间、春风、jerymy_z、yyx112358等网友,他们参与了本书的审校工作。是众多朋友的认真工作,才使得本套书籍可以较早地出版。由于作者技术水平有限,精力有限,书中难免出现错误和代码设计缺陷,恳请读者批评指正(邮箱:liujun6037@foxmail.com)。读者可以在开源电子网(www.openedv.com)免费下载到本套书籍的全部源码,并查看与本套书籍对应的不断更新的系列教程。
刘军2017年2月于广州
前言
作为CortexM系列通用处理器市场的最大占有者,STM32以其优异的性能、超高的性价比、丰富的本地化教程,迅速占领了市场。ST公司自2007年推出第一款STM32以来,先后推出了STM32F0/F1/F2/F3/F4/F7等系列产品,涵盖了CortexM0/M3/M4/M7等内核,总出货量超过18亿颗,是ARM公司CortexM系列内核的霸主。STM32F7系列是ST推出的基于ARMCortexM7内核的处理器,采用6级流水线,性能高达5CoreMark/MHz,在200MHz工作频率下测试数据高达1000CoreMarks,远超此前性能最高的STM32F4(CortexM4内核)系列(DSP性能超过STM32F4的两倍)。STM32F76x系列(包括STM32F765/767/768/769等),主要有如下优势:更先进的内核,采用CortexM7内核,具有16KB指令/数据Cache,采用ST独有的自适应实时加速技术(ARTAccelerator),性能高达5CoreMark/MHz。更丰富的外设,拥有高达512KB的片内SRAM,并且支持SDRAM、带TFTLCD控制器、带图形加速器(ChormeART)、带摄像头接口(DCMI)、带硬件JPEG编解码器、带QSPI接口、带SAI&I2S音频接口、带SPDIFRX接口、USB高速OTG、真随机数发生器、OTP存储器等。更高的性能,STM32F767最高运行频率可达216MHz,具有6级流水线,带有指令和数据Cache,大大提高了性能,性能大概是STM32F4的两倍。而且STM32F76x自带了双精度硬件浮点单元(DFFPU),在做DSP处理的时候具有更好的性能。STM32F76x系列自带了LCD控制器和SDRAM接口,对于想要驱动大屏或需要大内存的朋友来说,是个非常不错的选择;更重要的是集成了硬件JPEG编解码器,可以秒解JPEG图片,做界面的时候可以大大提高加载速度,并且可以实现视频播放。本书将以STM32F767为例,向大家讲解STM32F7的学习。内容特点学习STM32F767有几份资料经常用到:《STM32F7中文参考手册》、《STM32F7xx参考手册》英文版、《STM32F7编程手册》。其中,最常用的是《STM32F7中文参考手册》。该文档是ST官方针对STM32F74x/75x的一份中文参考资料,里面有绝大部分寄存器的详细描述,内容翔实,但是没有实例,也没有对CortexM7构架进行大多介绍,读者只能根据自己对书本的理解来编写相关代码。另外,对STM32F767特有的部分外设(比如硬件JPEG编解码器、DFSDM等),则必须参考《STM32F7xx参考手册》英文版来学习。
《STM32F7编程手册》文档则重点介绍了CortexM7内核的汇编指令及其使用、内核相关寄存器(比如SCB、NVIC、SYSTICK等寄存器)是《STM32F7中文参考手册》的重要补充。很多在《STM32F7中文参考手册》无法找到的内容,都可以在这里找到答案,不过目前该文档没有中文版本,只有英文版。本书将结合以上3份资料,从寄存器级别出发,深入浅出地向读者展示STM32F767的各种功能。总共配有65个实例,基本上每个实例均配有软硬件设计,在介绍完软硬件之后马上附上实例代码,并带有详细注释及说明,让读者快速理解代码。这些实例涵盖了STM32F7的绝大部分内部资源,并且提供了很多实用级别的程序,如内存管理、NANDFlashFTL、拼音输入法、手写识别、图片解码、IAP等。所有实例均在MDK5.21A编译器下编译通过,读者只须下载程序到ALIENTEK阿波罗STM32开发板即可验证实验。读者对象不管你是一个STM32初学者,还是一个老手,本书都非常适合。尤其对于初学者,本书将手把手地教你如何使用MDK,包括新建工程、编译、仿真、下载调试等一系列步骤,让你轻松上手。本书不适用于想通过HAL库学习STM32F7的读者,因为本书的绝大部分内容都是直接操作寄存器的;如果想通过HAL库学习STM32F7,可看本套书的HAL库版本。配套资料本书的实验平台是ALIENTEK阿波罗STM32F7开发板,有这款开发板的朋友可以直接拿本书配套资料上的例程在开发板上运行、验证。而没有这款开发板而又想要的朋友,可以上淘宝购买。当然,如果已有了一款自己的开发板,而又不想再买,也是可以的,只要你的板子上有和ALIENTEK阿波罗STM32F7开发板上的相同资源(需要实验用到的),代码一般都是可以通用的,你需要做的就只是把底层的驱动函数(比如I/O口修改)稍做修改,使之适合你的开发板即可。本书配套资料包括ALIENTEK阿波罗STM32F7开发板相关模块原理图(pdf格式)、视频教程、文档教程、配套软件、各例程程序源码和相关参考资料等,所有这些资料读者都可以在http://www.openedv.com/thread1391211.html免费下载。
刘军2017年2月于广州