历史上的今天
返回首页

历史上的今天

今天是:2024年08月28日(星期三)

正在发生

2019年08月28日 | 【安富莱STM32H7教程】第1章 初学STM32H7的准备工作

2019-08-28 来源:eefocus

1.1   初学者重要提示

1、  关于学习方法问题,可以看附件章节A。


2、  学会 STM32H7相关资源的获取方法,做到心中有数,否则心里老是没底。


3、  关于MDK和IAR两种编译器,推荐都掌握,以其中一个为主,另一个为辅。因为很多时候我们需要参考的工程代码不是自己熟悉的编译器,就会很被动。


4、  相对于F1、F4系列,H7最大的区别的还是MPU和Cache的配置,这两个配置会贯穿整个教程为大家做讲解,而外设的学习大同小异。


5、  H7携带了DTCM和ITCM,ITCM用于运行指令,也就是程序代码,DTCM用于数据存取,特点是跟内核速度一样,而片上的其它RAM主频都是200MHz,所以要充分发挥TCM的性能。


6、  STM32H7系列只有HAL库,没有再配套标准库了,这点要知道。HAL库的优点是配置方便,特别是配合图形开发工具STM32CubeMX时,缺点是源代码稍显臃肿,封装的有点多。


7、  这几年涌现出好几款非常棒的调试工具(如Event Recoder,SEGGER RTT),教程的后面章节会为大家做讲解。



1.2   开发环境说明

1、  IDE:支持两种IDE开发环境,MDK和IAR


        a.  MDK推荐使用MDK5.26正式版及其以上版本。


        b.  IAR固定使用IAR8.3版本,由于IAR向下兼容性稍差,其它版本未做支持。


2、  调试器使用JLINK,CMSIS-DAP,ULINK或者STLINK均可。


3、  配套开发板是安富莱的:STM32-V7开发板,MCU是STM32H743XIH6。


1.3   STM32H7和F1,F4系列的区别

使用STM32H7跟F1,F4系列的区别。


1、  最大的区别H7是多了一个L1 Cache一级缓存,这个缓存在为低速存储器带来加速的同时,也为程序设计带来了一些问题,其中最为主要的是数据一致性问题。


2、  STM32H7的自带外设比较之前的任何STM32型号都要生猛,算是大换血了,换了ADC,DMA,USART等重要外设,性能比之前要强劲很多。比如ADC换成了3.6Msps 16位分辨率,DMA支持任意互联了,USART也支持波特率自适应。


3、  到了STM32H7系列,ST官方仅提供了HAL库,没有再提供标准库,而对于F1,F4系列,标准库和HAL库都是有的。


4、  F1是M3内核,F4是M4内核,而STM32H7是M7内核,从编程的角度来说,几乎没有区别。而性能上区别可以看此贴:


http://forum.armfly.com/forum.php?mod=viewthread&tid=21850


 


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


1.4   STM32H7开发资源查找

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


1.4.1      开发文档

学习STM32H7主要下载哪些相关手册呢?主要有以下几个,这几个手册是我们经常要使用到的,不光学习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。虽然是STM32H7是M7内核,大部分内容跟M3/M4都是一样的。论坛下载地址:http://forum.armfly.com/forum.php?mod=viewthread&tid=2161 。


了解了这些手册的作用以后,我们学习如何在官网上面查找这些文档。前几年ST官方升级后,通过页面超链接的方式查找非常不方便,当前推荐直接在官方右上角的方框里面检索即可,比如使用的是STM32H7,直接输入STM32H7检索:


第1步:进入ST官方地址www.st.com,右上角输入STM32H7检索。

第2步:检索后会弹出所有STM32H7的芯片(随着时间推移,会增加新型号)。


第3步:比如我们用的是STM32H743XI,点击进入第2步截图中的STM32H743XI选项即可。进入后,所有的相关资源就都在这个页面下了。


数据手册标识:


 

应用笔记标识:


参考手册标识:


 

编程手册标识:


 

勘误手册标识:


 

基本上大家所需的开发文档都在这个页面下了。


1.4.2      软件包

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


第1步:进入ST官方地址www.st.com ,右上角输入STM32CubeH7检索。


第2步:检索后会弹出STM32CubeH7的软件包选项。


第3步:进入STM32CubeH7的页面地址后,就在页面的最底端看到这个软件包了(随着时间推移,版本会不断更新)。


 

第4步:点击按钮“Get Software”后,弹出如下界面

点击ACCEPT进入下面界面:


点击Login/Register


通过上面四步就获取了STM32H7的软件包。软件包的目录结构如下:

1.5   HAL库介绍

HAL库就包含在大家下载的STM32CubeH7软件包里面。软件包的框图如下:



HAL库全称Hardware Abstraction Layer,即硬件抽象层,其实就是STM32H7的外设驱动包。代码文件位于路径:DriversSTM32H7xx_HAL_Driver。如下是部分截图:


单从人性化角度,这些外设驱动写的还是比较用心的,特别是每个C文件开头的使用说明。比如文件stm32h7xx_hal_gpio.c开头的说明:


  ==============================================================================

                    ##### GPIO Peripheral features #####

  ==============================================================================

  [..] 

  Subject to the specific hardware characteristics of each I/O port listed in the datasheet, each

  port bit of the General Purpose IO (GPIO) Ports, can be individually configured by software

  in several modes:

  (+) Input mode 

  (+) Analog mode

  (+) Output mode

  (+) Alternate function mode

  (+) External interrupt/event lines

 

  [..]  

  During and just after reset, the alternate functions and external interrupt  

        lines are not active and the I/O ports are configured in input floating mode.

     

  [..]   

  All GPIO pins have weak internal pull-up and pull-down resistors, which can be 

        activated or not.

 

  [..]

  In Output or Alternate mode, each IO can be configured on open-drain or push-pull

        type and the IO speed can be selected depending on the VDD value.

 

  [..]  

  All ports have external interrupt/event capability. To use external interrupt 

        lines, the port must be configured in input mode. All available GPIO pins are 

        connected to the 16 external interrupt/event lines from EXTI0 to EXTI15.

 

  [..]

  The external interrupt/event controller consists of up to 23 edge detectors 

        (16 lines are connected to GPIO) for generating event/interrupt requests (each 

        input line can be independently configured to select the type (interrupt or event) 

        and the corresponding trigger event (rising or falling or both). Each line can 

        also be masked independently. 

 

                     ##### How to use this driver #####

  ==============================================================================  

  [..]

    (#) Enable the GPIO AHB clock using the following function: __HAL_RCC_GPIOx_CLK_ENABLE().

 

    (#) Configure the GPIO pin(s) using HAL_GPIO_Init().

        (++) Configure the IO mode using "Mode" member from GPIO_InitTypeDef structure

        (++) Activate Pull-up, Pull-down resistor using "Pull" member from GPIO_InitTypeDef 

             structure.

        (++) In case of Output or alternate function mode selection: the speed is 

             configured through "Speed" member from GPIO_InitTypeDef structure.

        (++) In alternate mode is selection, the alternate function connected to the IO

             is configured through "Alternate" member from GPIO_InitTypeDef structure.

        (++) Analog mode is required when a pin is to be used as ADC channel 

             or DAC output.

        (++) In case of external interrupt/event selection the "Mode" member from 

             GPIO_InitTypeDef structure select the type (interrupt or event) and 

             the corresponding trigger event (rising or falling or both).

 

    (#) In case of external interrupt/event mode selection, configure NVIC IRQ priority 

        mapped to the EXTI line using HAL_NVIC_SetPriority() and enable it using

        HAL_NVIC_EnableIRQ().

         

    (#) To get the level of a pin configured in input mode use HAL_GPIO_ReadPin().

            

    (#) To set/reset the level of a pin configured in output mode use 

        HAL_GPIO_WritePin()/HAL_GPIO_TogglePin().

                 

   (#) To lock pin configuration until next reset use HAL_GPIO_LockPin().

  

                 

    (#) During and just after reset, the alternate functions are not 

        active and the GPIO pins are configured in input floating mode (except JTAG

        pins).

  

    (#) The LSE oscillator pins OSC32_IN and OSC32_OUT can be used as general purpose 

        (PC14 and PC15, respectively) when the LSE oscillator is off. The LSE has 

        priority over the GPIO function.

  

    (#) The HSE oscillator pins OSC_IN/OSC_OUT can be used as 

        general purpose PH0 and PH1, respectively, when the HSE oscillator is off. 

        The HSE has priority over the GPIO function.

HAL库的使用方法跟之前F1,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.3.0):

这个软件包可以在三个地方获取:


1、STM32CubeH7软件包里面。


每个版本的Cube软件包都会携带CMSIS文件夹。


2、MDK安装目录(下面是5.3.0版本的路径)。


大家安装了新版MDK后,CMSIS软件包会存在于路径:ARMPACKARMCMSIS5.3.0CMSIS。


3、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会出一个完整的驱动包,比如STM32H7系列,在MDK安装目录的此路径下(前提是大家安装了STM32H7软件包):ARMPACKKeilSTM32H7xx_DFP2.1.0CMSISDriver。

ARM做的这个驱动跟HAL库有什么区别呢?ARM做的这个库要调用到HAL的一些API,然后封装了一些比较好用的API,方便用户调用。


DSP_Lib


这个是ARM提供的DSP库,此库支持以CM0、CM3、CM4以及CM7为内核的所有MCU,含源码。详细介绍可以看我们的DSP教程:http://forum.armfly.com/forum.php?mod=viewthread&tid=3886 。

推荐阅读

史海拾趣

Dau Semiconductor Inc公司的发展小趣事

Dau Semiconductor Inc公司成立于XXXX年,由几位在半导体行业拥有多年经验的工程师创立。当时,他们意识到在快速发展的电子行业中,高性能、低功耗的半导体芯片有着巨大的市场需求。于是,他们决定依托自己在半导体设计和制造方面的技术积累,创办Dau Semiconductor Inc公司,专注于研发和生产高性能的半导体芯片。

Astema公司的发展小趣事

随着技术的不断成熟,Astema开始积极拓展市场。公司制定了一系列市场策略,包括与大型电子设备制造商建立合作关系、参加国际电子展等,以扩大品牌影响力。通过这些努力,Astema逐渐打开了国际市场的大门,其产品远销海外,市场份额稳步提升。

Eaton公司的发展小趣事

除了能源管理领域外,伊顿公司还在商用车领域取得了显著成就。自1985年首次将技术引进中国以来,伊顿的变速器产品已经进入中国市场30多年。通过与国内各个商用车生产企业的紧密合作,伊顿成功地将其先进的变速器技术应用于各种商用车型中,提高了车辆的燃油经济性和驾驶舒适性。特别是在物流行业,伊顿的变速器产品帮助车队降低了油耗成本,提高了运营效率。

DAYLIGHT公司的发展小趣事

DAYLIGHT公司成立于XX年,由一群富有远见卓识的电子工程师和投资者共同创立。当时,电子行业正经历着快速的技术革新,市场对高效、可靠的电子产品需求日益增加。DAYLIGHT公司凭借其独特的技术优势和创新能力,成功开发出一系列高性能的电子产品,迅速在市场中立足。

Continental公司的发展小趣事

近年来,大陆集团在特种商用车胎领域也取得了重要突破。2014年,大陆集团在亚洲国际物流技术与运输系统展览会上发布了一款全新的产品——SC8特种商用车胎。这款产品是专门针对亚洲物料搬运业而开发出来的,适用于仓库、饮料业、造纸业等多个行业。SC8轮胎具备超深的轮胎花纹和极佳的性能,为物料搬运业提供了更高效、更安全的解决方案。这一产品的推出进一步巩固了大陆集团在商用车胎领域的市场地位。

EWC Controls公司的发展小趣事

EWC Controls公司始终将产品质量视为企业的生命线。公司建立了一套严格的质量管理体系和检测流程,确保每一台产品都符合高标准的质量要求。同时,公司还不断追求卓越的品质和服务,通过持续改进和创新提升产品的性能和可靠性。这种质量为本、追求卓越的理念使得EWC Controls公司的产品赢得了客户的信任和好评。

问答坊 | AI 解惑

AOL新战略8月初出炉 时代华纳否认媒体报道

本帖最后由 jameswangsynnex 于 2015-3-3 19:58 编辑 7月12日消息,据国外媒体报道,本周二,时代华纳表示计划于8月初公布旗下互联网部门AOL的商业战略计划,并否认了《华尔街日报》此前的一份报道,该报道称由于AOL打算提供免费服务,因此到2009 ...…

查看全部问答>

汽车电子保护电路设计

汽车环境对电子产品而言是非常苛刻的:任何连接到12V电源上的电路都必须工作在9V至16V的标称电压范围内,其它需要迫切应对的问题包括负载突降、冷车发动、电池反向、双电池助推、尖峰信号、噪声和极宽的温度范围。在负载突降时,交流发电机的输出电 ...…

查看全部问答>

硬件工程师如何转变成一个项目经理

项目经理掌控着产品从立项、开发到市场,到技术支持等整个环节。硬件工程师要想成为一个项目经理除了要拓宽自己的知识面,提高自己的技术外,要锻炼出良好的沟通能力,面对压力的调节能力,同一时间处理多个事务的协调和决断能力和良好平和的心态等 ...…

查看全部问答>

探讨安防人生路,大家来现身说法

从加入安防的那天起,有种如鱼得水的感觉。一转眼几个年头过去了,感受颇深。安防行业跟其他行业一样,职位很多,销售、技术、工程管理、调试、研发(个人一直认为研发不该属于安防,应属于电子或软件),你对哪个有兴趣?如果你选择了销售,那么恭 ...…

查看全部问答>

被某人成为世界难题(干扰和信号),坛里的高手来看看

公司历经三年,耗资3000万始终没有解决问题。我们系统中GPRS wifi 等大功率大电流的模块都是实时工作 在他们工作的时候 系统中模拟电路 始终受到大功率模块的 辐射干扰和传导干扰导致系统无**常工作。 现在我们系统重新架构如上图所示。所有模块 ...…

查看全部问答>

同步连接ActiveSync问题

同步连接问题: 请问谁用过串口或以太网实现过ActiveSync连接啊,我的USB从接口有问题了,所以想改用那些串口,但不知道要修改或设置什么参数,请用过的大虾多指教一下,谢了。…

查看全部问答>

5.6寸真彩色智能终端 比 单色液晶屏还低?

  单片机的各种应用产品设计中,LCD和触摸屏作为人机交换的界面使其应用越来越广泛,但在实际应用中单片机要去直接控制大尺寸的彩色LCD(5.6寸以上)是比较困难的。我公司推出的智能显示产品正是为了单片机可以直接控制大尺寸LCD和触摸屏而 ...…

查看全部问答>

串口这是怎么回事???

接上arm板,可以接收到armlinux启动的信息,但是arm却无法接受键盘的信息!再其他电脑测试下,arm正常 就是串口无法接受信息 这是什么问题??会是串口烧掉了么?烧掉了 为什么还可以发送信息?? 需要换串口芯片??…

查看全部问答>