精华内容
下载资源
问答
  • 打砖块 stm32f429
  • stm32f429i-discovery官方例程 例子。STM32F429I-DISCO
  • stm32f429-linux-builder 这是一个简单的工具,旨在为STM32f429 Discovery板创建uClinux发行版。 STM32F429 MCU提供了以180 MHz运行的ARM Cortex M4内核(带有浮点单元)的性能,同时达到了相当低的静态功耗。 先决...
  • STM32F401 STM32F411 STM32F429.....STM32F4XX系列单片机官方例程
  • 第3章 STM32F429整体把控 初学STM32F429一定要优先整体把控芯片的框架,不要急于了解单个外设的功能。 目录 第3章 STM32F429整体把控 3.1 初学者重要提示 3.2 STM32F429硬件框图 3.3 STM32F429各个型号的区别 ...

    最新教程下载:http://www.armbbs.cn/forum.php?mod=viewthread&tid=93255

    第3章   STM32F429整体把控

    初学STM32F429一定要优先整体把控芯片的框架,不要急于了解单个外设的功能。

    目录

    第3章   STM32F429整体把控

    3.1   初学者重要提示

    3.2   STM32F429硬件框图

    3.3   STM32F429各个型号的区别

    3.4   STM32F429总线框图和时钟

    3.5   STM32F429的AHB总线矩阵

    3.6   STM32F429的FLASH

    3.7   STM32F429的RAM

    3.8   总结


    3.1   初学者重要提示

    1.   学习一款新的芯片,优先掌握系统框架是比较重要的,建议逐渐养成这种学习习惯,然后各个击破即可。
    2.   本章节提供了多张STM32F429的框图,这些框图都非常具有代表性。很多时候记忆知识点比较费脑子,记录这些框图是一种非常好的方式。
    3.   对于本章节提供的部分知识点,无法理解透彻,暂时没有关系。随着后面的深入学习,基本都可以掌握。

    3.2   STM32F429硬件框图

    学习一款新的芯片,需要优先了解一下它的整体功能设计。需要的资料主要是来自官网和数据手册,比如我们V6开发板使用的STM32F429BIT6,直接在官方地址:链接(这是超链接)就可以看到对此芯片所做的介绍,页面中有一个如下的框图,对于了解STM32F429整体设计非常方便(当前ST官网显示bug,导致F429系列的框图都被搞丢了,下面先用F407做展示)。

    再稍微详细点,就需要大家读页面上的”Key Features”,就是下图所示的内容:

     

    或者直接看数据手册开头的章节即可,也进行了介绍,内容基本都是差不多的,如下图所示(部分截图):

    通过框图和Key Features,大家可以方便地了解STM32F4的FLASH、RAM大小以及各种自带外设的信息。

    3.3   STM32F429各个型号的区别

    涉及到芯片选型的时候,需要大家了解各个型号的区别。通过网页链接(这是一个超链接)里面的截图可以方便的了解。最主要的是下面的这个截图:

    通过这个截图可以方便地了解不同型号的引脚数、封装、FLASH大小、RAM大小以及是否带HW CRYPTO硬件加密的区别。

    需要了解更详细的对比信息,可以看数据手册。任意下载一个型号的数据手册,在数据手册的的Table 2里面有详细的对比,如下图所示(部分截图):

     

    使用ST提供的软件STMCUFinder或者STM32CubeMX也可以做对比,只是没有上面的表格这么方便,可以一目了然。

    3.4   STM32F429总线框图和时钟

    STM32F429的数据手册里面提供了一张非常棒的框图,大家可以方便地查看每个总线的时钟速度和这个总线所挂的外设。这个在大家配置外设时钟分频的时候还是非常有用的,因为外设的时钟分频就是建立在所挂的总线速度(大家直接在数据手册里面检索Figure 1就可以找到)。

     

    比如我们想得到不同定时器的主频,通过上面的框图,可以方便地获得如下信息:

    SYSCLK(Hz)   = 180MHz

    HCLK(Hz)     = 180MHz

    HCLK = SYSCLK / 1     (AHB1Periph)

    PCLK2 = HCLK / 2      (APB2Periph)

    PCLK1 = HCLK / 4      (APB1Periph)

     

    因为APB1 prescaler != 1, 所以 APB1上的TIMxCLK = PCLK1 x 2 = SystemCoreClock / 2;

    因为APB2 prescaler != 1, 所以 APB2上的TIMxCLK = PCLK2 x 2 = SystemCoreClock;

     

    APB1 定时器有 TIM2, TIM3 ,TIM4, TIM5, TIM6, TIM7, TIM12, TIM13,TIM14

    APB2 定时器有 TIM1, TIM8 ,TIM9, TIM10, TIM11

    3.5   STM32F429的AHB总线矩阵

    下面这个截图比较有代表性,可以帮助大家理解STM32F429总线系统。

    通过这个框图我们要了解以下几点:

    1、 32位AHB总线组成的10*8矩阵

    •   7个从接口端

    Flash的ICode和Dcode;SRAM1;SRAM2;SRAM3;AHB1外设;AHB2外设和FMC总线。

    •   8个主接口端

    Cortex-M4内核的I-Bus,D-Bus和S-Bus;DMA1的DMA_MEM1;DMA2的DMA_MEM2和DMA_P2;以太网MAC;USB OTG HS;LCD-TFT控制器;DMA2D。

    2、  并行操作

    由于总线矩阵的存在,8个主接口端都可以发起通信,只要不是访问同一个外设,且通信的通路没有公用,那么就可以并行执行。

    3.6   STM32F429的FLASH

    STM32F429的主频是180MHz,但自带的Flash支持的频率是远低于这个值的。具体延迟数值和主频关系如下:

     

    对于上面的表格,大家可以看到,当延迟等待设置为0的时候,即无等待,单周期访问,速度可以做到30MHz(供电电压选择2.7到3.6V)。增加1个Flash周期后,访问速度可以做到60MHz。当增加到5个Flash周期后,最高速度可以做到180MHz。

    当STM32F429以180MHz运行的时候,每次访问Flash都需要6个时钟周期,时间太长了。为了解决这个问题,STM32F429的Flash做了ART Chrom加速,可以实现Flash操作零等待。

    3.7   STM32F429的RAM

    通过本章的3.5小节,我们了解到,STM32F429由以下几块SRAM组成:

    •   SRAM1,SRAM2和SRAM3区

    这三块SRAM的地址是连续的。

    SRAM1首地址:0x2000 0000,大小128KB。

    SRAM2首地址:0x2001 C000,大小16KB。

    SRAM3首地址:0x2002 0000,大小64KB。

    速度:180MHz。

    •   CCM RAM区

    CCM RAM是直接接到M4内核的D-Bus总线上,优势是M4访问比较快,缺点是这个RAM区不支持DMA,这点要特别注意。

    CCM RAM首地址:0x1000 0000,大小64KB。

    速度:180MHz。

    •   Backup SRAM区

    备份RAM区。

    Backup SRAM首地址0x4002 4000,大小4KB。

    速度:180MHz。

    用途:用途不限,主要用于系统进入低功耗模式后,继续保存数据(Vbat引脚外接电池)。

    3.8   总结

    本章节就为大家讲解这么多,让大家对STM32F429有个整体的认识,后面章节将逐个进行学习。

     

    展开全文
  • LittleVGL (LVGL) STM32F429IGTx [使用野火STM32F429开发板] LVGL版本:v7.5 使用STD库 MDK-ARM Keil5集成开发环境 实现各小控件的演示 移植触摸以及LTDC驱动 800*480的RGB显示屏 已开启DMA2D 打印机例程因Flash内存...
  • STM32F429_Discovery_UCOSII_移植
  • fake86_to_stm32f429_port:用于STM32F429 MCU的8086 PC(x86)仿真器
  • 0.STM32F429使用STM32CUBMX5.6移植touchGFX4.13 旧版: 1.STM32F429移植touchGFX(一)——通过STM32CubeMX移植TouchGFX 2.STM32F429移植touchGFX(二)—— 使用MVP架构来实现GUI和硬件的双向交互 3.STM32F429移植touch...
  • STM32F427---STM32F429中文数据手册
  • 第1章 初学STM32F429的准备工作 俗话说万事开头难,学习一门新的知识,难的往往不是知识本身,而是如何快速上手,需要什么资料和开发环境。一旦上手后,深入的学习就相对容易些了。 目录 第1章 初学STM32F429的...

    最新教程下载:http://www.armbbs.cn/forum.php?mod=viewthread&tid=93255

    第1章   初学STM32F429的准备工作

    俗话说万事开头难,学习一门新的知识,难的往往不是知识本身,而是如何快速上手,需要什么资料和开发环境。一旦上手后,深入的学习就相对容易些了。

    目录

    第1章   初学STM32F429的准备工作

    1.1   初学者重要提示

    1.2   开发环境说明

    1.3   F1和F429系列的区别

    1.4   STM32F429开发资源查找

    1.4.1      开发文档

    1.4.2      软件包

    1.5   HAL库介绍

    1.6   CMSIS软件包介绍

    1.7   STM32CubeMX开发平台

    1.8   STM32F429调试方法

    1.9   STM32F429出现硬件异常的解决办法

    1.10 总结


    1.1   初学者重要提示

    1.   关于学习方法问题,可以看附件章节A。
    2.   学会 STM32F429相关资源的获取方法,做到心中有数,否则心里老是没底。
    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-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开头的说明:

      ==============================================================================
                        ##### 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库的使用方法跟之前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的开发文档的章节结构了解一下,随着以后的学习最好可以达到熟练查看这些开发文档的程度。

     

    展开全文
  • 本章教程为大家介绍STM32F429的GPIO应用之跑马灯,跑马灯作为经典的测试例程,可以让大家对STM32F429应用有个简单的整体认识。 目录 第18章 STM32F429的GPIO应用之跑马灯 18.1 初学者重要提示 18.2 跑马灯硬件...

    最新教程下载:http://www.armbbs.cn/forum.php?mod=viewthread&tid=93255

    第18章       STM32F429的GPIO应用之跑马灯

    本章教程为大家介绍STM32F429的GPIO应用之跑马灯,跑马灯作为经典的测试例程,可以让大家对STM32F429应用有个简单的整体认识。

    目录

    第18章       STM32F429的GPIO应用之跑马灯

    18.1 初学者重要提示

    18.2 跑马灯硬件设计

    18.2.1 灌电流驱动方式

    18.2.2 LED的压降和驱动电流

    18.2.3 总线扩展

    18.2.4 贴片LED的正负极区分

    18.3 跑马灯软件驱动设计

    18.4 跑马灯板级支持包(bsp_led.c)

    18.4.1 函数bsp_InitLed

    18.4.2 函数bsp_LedOn

    18.4.3 函数bsp_LedOff

    18.4.4 函数bsp_LedToggle

    18.4.5 函数bsp_IsLedOn

    18.5 跑马灯驱动移植和使用

    18.6 实验例程设计框架

    18.7 实验例程说明(MDK)

    18.8 实验例程说明(IAR)

    18.9 总结


     

    18.1 初学者重要提示

    1.   学习本章节前,务必保证已经学习了第15,16和17章。
    2.   虽然是跑马灯的初级例程,但有必要掌握程序的基本设计框架,后面的例子都是建立在这个框架的基础上。
    3.   LED不是用CPU的IO直接驱动,而是由74HC574驱动的,74HC574是一个8路并口缓冲器,挂在FMC总线上,实现IO扩展。也许初学者会问为什么要做IO扩展,不是已经用了208脚的STM32F429BIT6吗?因为开发板使用了32位SDRAM和RGB888硬件接口,消耗IO巨大,所以必须得扩展了。
    4.   对于初学者来说,仅需掌握LED驱动的实现方法和对应的API调用即可,需要深入的理解IO扩展部分,会在后面的节进行详细讲解。
    5.   FMC总线扩展32路高速IO理解成GPIO的ODR寄存器就很简单了,其实就是一个东西。

    FMC扩展IO是对地址0x60001000的32bit数据空间的0和1的操作。GPIOA的ODR寄存器是对地址 0x40000000 + 0x18020000 + 0x14 空间的操作。但只能操作16个引脚。

    使用总线的优势就在这里了,相当于在GPIOA到GPIOK的基础上,又扩展出GPIOL和GPIOM。

    #define PERIPH_BASE            ((uint32_t)0x40000000)
    #define D3_AHB1PERIPH_BASE     (PERIPH_BASE + 0x18020000)
    #define GPIOA_BASE             (D3_AHB1PERIPH_BASE + 0x0000)
    #define GPIOA                  ((GPIO_TypeDef *) GPIOA_BASE)
    
    typedef struct
    {
      __IO uint32_t MODER;    /*!< GPIO port mode register,               Address offset: 0x00      */
      __IO uint32_t OTYPER;   /*!< GPIO port output type register,        Address offset: 0x04      */
      __IO uint32_t OSPEEDR;  /*!< GPIO port output speed register,       Address offset: 0x08      */
      __IO uint32_t PUPDR;    /*!< GPIO port pull-up/pull-down register,  Address offset: 0x0C      */
      __IO uint32_t IDR;      /*!< GPIO port input data register,         Address offset: 0x10      */
      __IO uint32_t ODR;      /*!< GPIO port output data register,        Address offset: 0x14      */
      __IO uint16_t BSRRL;    /*!< GPIO port bit set/reset low register,  Address offset: 0x18      */
      __IO uint16_t BSRRH;    /*!< GPIO port bit set/reset high register, Address offset: 0x1A      */
      __IO uint32_t LCKR;     /*!< GPIO port configuration lock register, Address offset: 0x1C      */
      __IO uint32_t AFR[2];   /*!< GPIO alternate function registers,     Address offset: 0x20-0x24 */
    } GPIO_TypeDef;

    18.2 跑马灯硬件设计

    跑马灯的硬件设计如下:

     

    通过这个硬件设计,有如下四点需要学习:

    18.2.1 灌电流驱动方式

    关于拉电流、灌电流和相关的电气特性,在第15章的15.4小节做了专门的讲解。对于STM32F429来说,使用拉电流和灌电流驱动LED都是可以的,因为拉电流和灌电流时,STM32F429总的拉电流和灌电流都是不可超过120mA,单个引脚最大不可超过25mA。

    开发板这里是采用的灌电流方式。

    18.2.2 LED的压降和驱动电流

    这种采用的是灌电流方式,而流经LED的电流大小是多少呢? 这里需要先补充一个基础的知识点。

    直插超亮发光二极管压降,主要有三种颜色,然而三种发光二极管的压降都不相同,具体压降参考值如下:

    •   红色发光二极管的压降为2.0V-2.2V。
    •   黄色发光二极管的压降为1.8V-2.0V。
    •   绿色发光二极管的压降为3.0V-3.2V。
    •   正常发光时的额定电流约为20mA。

    贴片LED压降:

    •   红色的压降为1.82-1.88V,电流5-8mA。
    •   绿色的压降为1.75-1.82V,电流3-5mA。
    •   橙色的压降为1.7-1.8V,电流3-5mA。
    •   蓝色的压降为3.1-3.3V,电流8-10mA。
    •   白色的压降为3-3.2V,电流10-15mA。

     

    实际测试开发板红色贴片LED的压降的确是1.8V左右,那么流过LED的电流就是

    (3.3 – 1.8)/ 1K = 1.4mA

    在不考虑二极管本身电阻的情况下,流过LED的电流就是1.4mA。

    18.2.3 总线扩展

    在教程第XX章节详细讲解了这个问题(后面会补上具体章节),对于初学者来说,可以先不用看,等后面学习了FMC总线后再去看,就容易掌握多了。

    18.2.4 贴片LED的正负极区分

    仔细查看开发板版上面所使用的贴片LED,会发现一端有绿点,有绿点的这端是负极,而另一端就是正级了。

    18.3 跑马灯软件驱动设计

    跑马灯的软件驱动实现比较简单,主要是IO初始化,LED亮,LED灭,LED翻转。对应的驱动文件也是实现了这几个功能,没有特别的技巧,所以大家看源代码也比较省事。

    18.4 跑马灯板级支持包(bsp_led.c)

    LED驱动文件bsp_led.c主要实现了如下几个API:

    •   bsp_InitLed
    •   bsp_LedOn
    •   bsp_LedOff
    •   bsp_LedToggle
    •   bsp_IsLedOn

    下面将这几个API逐一进行说明。

    18.4.1 函数bsp_InitLed

    函数原型:

    /*
    *********************************************************************************************************
    *    函 数 名: bsp_InitLed
    *    功能说明: 配置LED指示灯相关的GPIO,  该函数被 bsp_Init() 调用。
    *    形    参:  无
    *    返 回 值: 无
    *********************************************************************************************************
    */
    void bsp_InitLed(void)
    {
        bsp_LedOff(1);
        bsp_LedOff(2);
        bsp_LedOff(3);
        bsp_LedOff(4);
    }

    函数描述:

    此函数主要用于LED初始化。由于将GPIO设置为输出时,GPIO输出寄存器的值缺省是0,因此会驱动LED点亮,因此在改变GPIO为输出前,先关闭LED指示灯。

    注意事项:

    1. 大家会有疑惑,为什么这里没有初始化GPIO。这是因为V6开发板是由74HC574驱动的,不是用CPU的IO直接驱动,74HC574是一个8路并口缓冲器,挂在FMC总线上,实现IO扩展。
    2. 通过FMC总线扩展出的IO来驱动,不是GPIO直接驱动。
    3. 调用此函数前,要优先调用函数bsp_InitExtIO(),此函数用于初始化FMC扩展接口,关于这方面的知识在第XX章节详细讲解了这个问题(后面会补上具体章节)

    使用举例:

    调用此函数前,务必优先调用函数bsp_InitExtIO()。这里底层驱动初始化一般都是在bsp.c文件的函数bsp_Init里面调用。

    18.4.2 函数bsp_LedOn

    函数原型:

    /*
    *********************************************************************************************************
    *    函 数 名: bsp_LedOn
    *    功能说明: 点亮指定的LED指示灯。
    *    形    参:  _no : 指示灯序号,范围 1 - 4
    *    返 回 值: 无
    *********************************************************************************************************
    */
    void bsp_LedOn(uint8_t _no)
    {
        if (_no == 1)
        {
            HC574_SetPin(LED1, 0);
        }
        else if (_no == 2)
        {
            HC574_SetPin(LED2, 0);
        }
        else if (_no == 3)
        {
            HC574_SetPin(LED3, 0);
        }
        else if (_no == 4)
        {
            HC574_SetPin(LED4, 0);
        }
    }

    函数描述:

    此函数主要用于点亮LED。

    函数参数:

    •   第1个参数用于指定点亮那个LED,范围1-4。

    使用举例:

    此函数的使用比较简单,需要调用的时候直接调用即可。另外使用前记得先调用函数bsp_InitExtIO()和bsp_InitLed。

    18.4.3 函数bsp_LedOff

    函数原型:

    /*
    *********************************************************************************************************
    *    函 数 名: bsp_LedOff
    *    功能说明: 熄灭指定的LED指示灯。
    *    形    参:  _no 指示灯序号,范围 1 - 4
    *    返 回 值: 无
    *********************************************************************************************************
    */
    void bsp_LedOff(uint8_t _no)
    {
        if (_no == 1)
        {
            HC574_SetPin(LED1, 1);
        }
        else if (_no == 2)
        {
            HC574_SetPin(LED2, 1);
        }
        else if (_no == 3)
        {
            HC574_SetPin(LED3, 1);
        }
        else if (_no == 4)
        {
            HC574_SetPin(LED4, 1);
        }
    }

    函数描述:

    此函数主要用于熄灭LED。

    函数参数:

    •   第1个参数用于指定熄灭那个LED,范围1-4。

    使用举例:

    此函数的使用比较简单,需要调用的时候直接调用即可。另外使用前记得先调用函数bsp_InitExtIO()和bsp_InitLed。

    18.4.4 函数bsp_LedToggle

    函数原型:

    /*
    *********************************************************************************************************
    *    函 数 名: bsp_LedToggle
    *    功能说明: 翻转指定的LED指示灯。
    *    形    参:  _no 指示灯序号,范围 1 - 4
    *    返 回 值: 按键代码
    *********************************************************************************************************
    */
    void bsp_LedToggle(uint8_t _no)
    {
        uint32_t pin;
        
        if (_no == 1)
        {
            pin = LED1;
        }
        else if (_no == 2)
        {
            pin = LED2;
        }
        else if (_no == 3)
        {
            pin = LED3;
        }
        else if (_no == 4)
        {
            pin = LED4;
        }
        else
        {
            return;
        }
    
        if (HC574_GetPin(pin))
        {
            HC574_SetPin(pin, 0);
        }
        else
        {
            HC574_SetPin(pin, 1);
        }    
    }

    函数描述:

    此函数主要用于翻转LED。

    函数参数:

    •   第1个参数用于指定翻转那个LED,范围1-4。

    使用举例:

    此函数的使用比较简单,需要调用的时候直接调用即可。另外使用前记得先调用函数bsp_InitExtIO()和bsp_InitLed。

    18.4.5 函数bsp_IsLedOn

    函数原型:

    /*
    *********************************************************************************************************
    *    函 数 名: bsp_IsLedOn
    *    功能说明: 判断LED指示灯是否已经点亮。
    *    形    参:  _no 指示灯序号,范围 1 - 4
    *    返 回 值: 1表示已经点亮,0表示未点亮
    *********************************************************************************************************
    */
    uint8_t bsp_IsLedOn(uint8_t _no)
    {
        uint32_t pin;
        
        if (_no == 1)
        {
            pin = LED1;
        }
        else if (_no == 2)
        {
            pin = LED2;
        }
        else if (_no == 3)
        {
            pin = LED3;
        }
        else if (_no == 4)
        {
            pin = LED4;
        }
        else
        {
            return 0;
        }
        
        if (HC574_GetPin(pin))
        {
            return 0;    /* 灭 */
        }
        else
        {
            return 1;    /* 亮 */
        }
    }

    函数描述:

    此函数主要用于获取LED亮灭状态。

    函数参数:

    •   第1个参数用于指定获取那个LED的亮灭状态,范围1-4。

    使用举例:

    此函数的使用比较简单,需要调用的时候直接调用即可。另外使用前记得先调用函数bsp_InitExtIO()和bsp_InitLed。

    18.5 跑马灯驱动移植和使用

    跑马灯控制是基于FMC扩展IO实现的,所以跑马灯的移植需要看第xxx章的移植方式(后面会补上具体章节)。

    18.6 实验例程设计框架

    通过程序设计框架,让大家先对配套例程有一个全面的认识,然后再理解细节,本次实验例程的设计框架如下:

      第1阶段,上电启动阶段:

    • 这部分在第14章进行了详细说明。

      第2阶段,进入main函数:

    •   第1部分,硬件初始化,主要是HAL库,系统时钟,滴答定时器和LED。
    •   第2部分,应用程序设计部分,实现了一个简易的跑马灯效果。

    18.7 实验例程说明(MDK)

    配套例子:

    V6-002_跑马灯

    实验目的:

    1. 学习F429平台的跑马灯实现。

    实验内容:

    1. 启动一个自动重装软件定时器,每100ms翻转一次LED1和LED2。
    2. 再启动一个自动重装软件定时器,每500ms翻转一次LED3和LED4。

    上电后串口打印的信息:

    波特率 115200,数据位 8,奇偶校验位无,停止位 1

    程序设计:

     系统栈大小分配:

      硬件外设初始化

    硬件外设的初始化是在 bsp.c 文件实现:

    /*
    *********************************************************************************************************
    *    函 数 名: bsp_Init
    *    功能说明: 初始化所有的硬件设备。该函数配置CPU寄存器和外设的寄存器并初始化一些全局变量。只需要调用一次
    *    形    参:无
    *    返 回 值: 无
    *********************************************************************************************************
    */
    void bsp_Init(void)
    {
          /* 
           STM32H429 HAL 库初始化,此时系统用的还是F429自带的16MHz,HSI时钟:
           - 调用函数HAL_InitTick,初始化滴答时钟中断1ms。
           - 设置NVIV优先级分组为4。
         */
        HAL_Init();
    
        /* 
           配置系统时钟到168MHz
           - 切换使用HSE。
           - 此函数会更新全局变量SystemCoreClock,并重新配置HAL_InitTick。
        */
        SystemClock_Config();
    
        /* 
           Event Recorder:
           - 可用于代码执行时间测量,MDK5.25及其以上版本才支持,IAR不支持。
           - 默认不开启,如果要使能此选项,务必看V5开发板用户手册第8章
        */    
    #if Enable_EventRecorder == 1  
        /* 初始化EventRecorder并开启 */
        EventRecorderInitialize(EventRecordAll, 1U);
        EventRecorderStart();
    #endif
        
        bsp_InitKey();        /* 按键初始化,要放在滴答定时器之前,因为按钮检测是通过滴答定时器扫描 */
        bsp_InitTimer();      /* 初始化滴答定时器 */
        bsp_InitUart();    /* 初始化串口 */
        bsp_InitExtIO();   /* 初始化扩展IO */
        bsp_InitLed();        /* 初始化LED */    
    }

      主功能:

    主功能的实现主要分为两部分:

    •   启动一个自动重装软件定时器,每100ms翻转一次LED1和LED2。
    •   再启动一个自动重装软件定时器,每500ms翻转一次LED3和LED4。
    /*
    *********************************************************************************************************
    *    函 数 名: main
    *    功能说明: c程序入口
    *    形    参: 无
    *    返 回 值: 错误代码(无需处理)
    *********************************************************************************************************
    */
    int main(void)
    {
    
        bsp_Init();        /* 硬件初始化 */
        
        PrintfLogo();    /* 打印例程名称和版本等信息 */
        PrintfHelp();    /* 打印操作提示 */
    
        /* 先做个LED1的亮灭显示 */
        bsp_LedOn(1);
        bsp_DelayMS(100);
        bsp_LedOff(1);
        bsp_DelayMS(100);
        
        bsp_StartAutoTimer(0, 100); /* 启动1个100ms的自动重装的定时器 */
        bsp_StartAutoTimer(1, 500);    /* 启动1个500ms的自动重装的定时器 */
        
        /* 进入主程序循环体 */
        while (1)
        {
            bsp_Idle();        /* 这个函数在bsp.c文件。用户可以修改这个函数实现CPU休眠和喂狗 */
    
            /* 判断定时器超时时间 */
            if (bsp_CheckTimer(0))    
            {
                /* 每隔100ms 进来一次 */  
                bsp_LedToggle(1);            
            }
            
            /* 判断定时器超时时间 */
            if (bsp_CheckTimer(1))    
            {
                /* 每隔500ms 进来一次 */ 
                bsp_LedToggle(2);            
                bsp_LedToggle(3);            
                bsp_LedToggle(4);
            }
        }
    }

    18.8 实验例程说明(IAR)

    配套例子:

    V6-002_跑马灯

    实验目的:

    1. 学习F429平台的跑马灯实现。

    实验内容:

    1. 启动一个自动重装软件定时器,每100ms翻转一次LED1和LED2。
    2. 再启动一个自动重装软件定时器,每500ms翻转一次LED3和LED4。

    上电后串口打印的信息:

    波特率 115200,数据位 8,奇偶校验位无,停止位 1

    程序设计:

      系统栈大小分配:

      硬件外设初始化

    硬件外设的初始化是在 bsp.c 文件实现:

    /*
    *********************************************************************************************************
    *    函 数 名: bsp_Init
    *    功能说明: 初始化所有的硬件设备。该函数配置CPU寄存器和外设的寄存器并初始化一些全局变量。只需要调用一次
    *    形    参:无
    *    返 回 值: 无
    *********************************************************************************************************
    */
    void bsp_Init(void)
    {
          /* 
           STM32H429 HAL 库初始化,此时系统用的还是F429自带的16MHz,HSI时钟:
           - 调用函数HAL_InitTick,初始化滴答时钟中断1ms。
           - 设置NVIV优先级分组为4。
         */
        HAL_Init();
    
        /* 
           配置系统时钟到168MHz
           - 切换使用HSE。
           - 此函数会更新全局变量SystemCoreClock,并重新配置HAL_InitTick。
        */
        SystemClock_Config();
    
        /* 
           Event Recorder:
           - 可用于代码执行时间测量,MDK5.25及其以上版本才支持,IAR不支持。
           - 默认不开启,如果要使能此选项,务必看V5开发板用户手册第8章
        */    
    #if Enable_EventRecorder == 1  
        /* 初始化EventRecorder并开启 */
        EventRecorderInitialize(EventRecordAll, 1U);
        EventRecorderStart();
    #endif
        
        bsp_InitKey();        /* 按键初始化,要放在滴答定时器之前,因为按钮检测是通过滴答定时器扫描 */
        bsp_InitTimer();      /* 初始化滴答定时器 */
        bsp_InitUart();    /* 初始化串口 */
        bsp_InitExtIO();   /* 初始化扩展IO */
        bsp_InitLed();        /* 初始化LED */    
        
    }

      主功能:

    主功能的实现主要分为两部分:

    •   启动一个自动重装软件定时器,每100ms翻转一次LED1和LED2。
    •   再启动一个自动重装软件定时器,每500ms翻转一次LED3和LED4。
    /*
    *********************************************************************************************************
    *    函 数 名: main
    *    功能说明: c程序入口
    *    形    参: 无
    *    返 回 值: 错误代码(无需处理)
    *********************************************************************************************************
    */
    int main(void)
    {
    
        bsp_Init();        /* 硬件初始化 */
        
        PrintfLogo();    /* 打印例程名称和版本等信息 */
        PrintfHelp();    /* 打印操作提示 */
    
        /* 先做个LED1的亮灭显示 */
        bsp_LedOn(1);
        bsp_DelayMS(100);
        bsp_LedOff(1);
        bsp_DelayMS(100);
        
        bsp_StartAutoTimer(0, 100); /* 启动1个100ms的自动重装的定时器 */
        bsp_StartAutoTimer(1, 500);    /* 启动1个500ms的自动重装的定时器 */
        
        /* 进入主程序循环体 */
        while (1)
        {
            bsp_Idle();        /* 这个函数在bsp.c文件。用户可以修改这个函数实现CPU休眠和喂狗 */
    
            /* 判断定时器超时时间 */
            if (bsp_CheckTimer(0))    
            {
                /* 每隔100ms 进来一次 */  
                bsp_LedToggle(1);            
            }
            
            /* 判断定时器超时时间 */
            if (bsp_CheckTimer(1))    
            {
                /* 每隔500ms 进来一次 */ 
                bsp_LedToggle(2);            
                bsp_LedToggle(3);            
                bsp_LedToggle(4);
            }
        }
    }

    18.9 总结

    虽然是跑马灯的初级例程,但有必要掌握程序的基本设计框架,后面的例子都是建立在这个框架的基础上。建议初学者掌握好。

     

    展开全文
  • 第28章 STM32F429的系统bootloader基础知识 本章为大家介绍STM32F429内置的系统bootloader的基础知识。 目录 第28章 STM32F429的系统bootloader基础知识 28.1 初学者重要提示 28.2 系统bootLoader基础知识 ...

    最新教程下载:http://www.armbbs.cn/forum.php?mod=viewthread&tid=93255

    第28章       STM32F429的系统bootloader基础知识

    本章为大家介绍STM32F429内置的系统bootloader的基础知识。

    目录

    第28章       STM32F429的系统bootloader基础知识

    28.1 初学者重要提示

    28.2 系统bootLoader基础知识

    28.2.1 系统bootLoader执行流程

    28.2.2 系统bootLoader使用的引脚

    28.3 进入系统bootLoader的方法

    28.3.1 设置硬件boot引脚进入系统bootLoader

    28.3.2 用户应用程序跳转到系统bootLoader

    28.4 退出系统bootLoader的方法

    28.5 系统bootLoader的擦写管理

    28.6 总结


    28.1 初学者重要提示

    1.   本章主要为大家介绍系统bootloader的理论知识,下个章节为大家实战。
    2.   更多系统bootloader的基础知识看本帖的AN2606应用笔记:http://www.armbbs.cn/forum.php?mod=viewthread&tid=96573

    28.2 系统bootLoader基础知识

    STM32的系统存储区自带bootloader,此程序是ST在芯片出厂时烧录进去的,主要用于将用户应用程序下载到芯片内部Flash。支持USB,SPI,I2C,CAN,UART等接口方式下载。如果大家的应用程序打算采用这种接口方式进行升级,可以考虑采用系统bootloader,简单易用,无需用户自己写bootLoader了。

    更重要的是,使用系统bootLoader可以不依赖硬件boot引脚,可以直接从应用程序跳转到系统bootLoader,这样灵活性就很大了。

    28.2.1 系统bootLoader执行流程

    下面是STM32F429的bootLoader程序执行流程,简单了解下即可:

    关于这个执行流程,要特别注意一点:如果在进入系统bootLoader前就插入了USB线,会导致进入系统bootLoader后优先执行USB DFU,其它的接口方式将没有机会执行。

    28.2.2 系统bootLoader使用的引脚

    STM32F4的bootloader使用到的引脚分配如下:

    28.3 进入系统bootLoader的方法

    STM32进入系统bootLoader主要有两种方法,一种是设置boot引脚,另一种是应用程序直接跳转到系统bootLoader。

    28.3.1 设置硬件boot引脚进入系统bootLoader

    STM32F429支持的启动方式如下:

     

    •   从Flash启动(正常运行时选择这种模式)。
    •   从系统存储器启动(做ISP下载时用)。
    •   从内嵌SRAM启动(调试用,一般很少使用)。

    具体到原理图上的设计如下:

     

    •   如果仅作从Flash驱动,可以将BOOT0和BOOT1直接接地,不需要电阻。
    •   从SRAM启动,BOOT1固定取低电平,BOOT0可以取高电平或者低电平。注意硬件上不支持从SRAM启动。因为掉电后,SRAM中的数据消失。

    28.3.2 用户应用程序跳转到系统bootLoader

    除了使用boot引脚控制运行系统bootLoader,也可以上电后跳转,跳转前注意以下问题:

    •   禁止所有外设时钟。
    •   禁止使用的PLL。
    •   禁止所有中断。
    •   清除所有中断挂起标志。
    •   如果使用Go命令,对于bootLoader中使用的硬件外设寄存器,跳转前是不会设置到复位值的,如果用户代码中恰好也用到这些寄存器,需要重新配置。这里要特别注意的是BootLoader会用到看门狗,并且喂狗时间设为最长了,如果用户代码里面要用到看门狗请根据需要重新配置,并且看门狗一旦开启是无法关闭的。
    •   对于具有双bank特性的STM32,为了能够从用户代码跳转到系统boot,需要将系统boot代码区使用寄存器SYSCFG重映射到0x0000 0000(除了F7和H7系列)。对于STM32F7系列,需要禁止nDBOOT / nDBANK 特性,然后跳转到系统boot区。
    •   如果用到系统bootloader的DFU/CAN接口,需要用到HSE时钟,这个时钟的频率是通过内部HSI/MSI检测出具体频率。因此,由于外部温度等各种情况,内部HSI的精度会受到影响,从而影响检测出来的HSE时钟有较大误差,最终导致DFU/CAN运行失败。

     

    具体实现会在下一章节为大家讲解。

    28.4 退出系统bootLoader的方法

    当前主要研究了USB DFU和串口IAP退出bootLoader。

    •   USB DFU

    当芯片工作在系统bootLoader的USB DFU模式,更新完毕程序后,不会自动退出USB DFU,需要重新复位芯片后才会退出。由于DFU模式会用到USB线,插拔USB线是难以避免的,所以是否支持自动退出,并不影响。

    •   串口IAP

    当芯片工作在系统bootLoader的串口升级模式,更新完毕程序后,可以自动退出。所以基于串口的组网设备,使用系统bootloader非常方便。

    28.5 系统bootLoader的擦写管理

    注:这部分知识点有个了解即可。

    使用bootloader命令进行的所有写操作都只能字对齐(地址应该是4的倍数)。要写入的数据数量也必须是4的倍数(接受未对齐的半页写地址)。

    •   有些产品不支持批量擦除操作。使用BootLoader进行批量擦除时,有两种方法可用:
      •   使用扇区擦除命令一个一个删除。
      •   将保护级别设置为1,然后设置为0(使用读保护命令,然后使用读非保护命令),将导致大批量擦除操作。
    •   STM32 L1和L0系列的Bootloader除了支持操作内部Flash,内部SRAM,可选字节等,还支持操作Data Memeory(数据存储区,貌似是指的EEPROM)。数据存储区支持读写操作,而不支持擦除命令,如果要擦除,写0即可。另外对此存储区的写操作必须是4字节对齐(写地址),并且写入的数据也是4的倍数。
    •   F2, F4, F7 和 L4除了支持操作内部Flash,内部SRAM,可选字节等,还支持操作OTP存储区。仅支持读写操作,不支持擦除命令。
    •   F2, F4 和 F7系列的内部Flash写格式依赖于供电电压范围,默认的写操作只支持字节(半字,字和双字是不支持的),为了增加写操作速度,用户施加足够的电压范围以允许写操作按半字,字或双字,并通过虚拟内存位置的boot程序更新此配置。该内存位置不是物理地址,但可以根据协议使用常规的BootLoader读写操作。该存储位置包含4个字节,分别为如下表所述:

    28.6 总结

    本章节就为大家讲解这么多,更新相关的知识看ST的应用笔记AN2606。

     

    展开全文
  • stm32f429相关资料

    2021-03-26 13:42:37
    stm32f429相关资料
  • HAL库stm32F429IGADC DMA

    2017-09-23 14:38:05
    HAL库stm32F429IGADC DMAHAL库stm32F429IGADC DMAHAL库stm32F429IGADC DMAHAL库stm32F429IGADC DMAHAL库stm32F429IGADC DMAHAL库stm32F429IGADC DMA
  • 本章教程为大家介绍STM32F429的GPIO应用之无源蜂鸣器,蜂鸣器也是GPIO控制的经典测试例程,可以让大家对STM32F429应用有个简单的整体认识。 目录 第20章 STM32F429的GPIO应用之无源蜂鸣器 20.1 初学者重要提示 ...
  • STM32F429xx_EN英文

    2017-09-01 10:14:30
    STM32F429xx_EN英文STM32F429xx_EN英文STM32F429xx_EN英文STM32F429xx_EN英文STM32F429xx_EN英文STM32F429xx_EN英文STM32F429xx_EN英文
  • STM32F429数据手册.pdf

    2019-12-09 09:19:36
    STM32F429数据手册;数据手册;英文手册;STM32F429数据手册;STM32F429数据手册
  • STM32F767IGT6-STM32F429IGT6-STM32H743IIT6开发板原理图.pdf
  • 第19章 STM32F429的GPIO应用之按键FIFO 本章教程为大家介绍STM32F429的GPIO应用之按键FIFO,这个方案已经在实际项目中千锤百炼,比较实用。 目录 第19章 STM32F429的GPIO应用之按键FIFO 19.1 初学者重要提示 ...
  • 前段时间意外获得论坛送的一块STM32F429探索套件,初步了解了一下STM32F429这个芯片,感觉ST的MCU终于向高端MCU迈出了一步:STM32F429可以支持SDRAM和LCD控制器了,主频最高180MHz,这在高端MCU中还是比较少见的...
  • STM32F427xx/STM32F429xx

    2015-09-15 11:06:34
    STM32F427xx/STM32F429xx二合一数据手册 英文版和中文版两个pdf文件,皆为高清
  • 本章教程主要跟大家讲STM32F429的启动过程,这里的启动过程是指从CPU上电复位执行第1条指令开始(汇编文件)到进入C程序main()函数入口之间的部分。启动过程相对来说还是比较重要的,理解了这个过程,对于以后分析...
  • STM32F429I-Discovery BSP 示例(按钮、LCD、TS、陀螺……) 这只是来自 STM32CubeF4 (STM32Cube_FW_F4_V1.4.0/Projects/STM32F429I-Discovery/Examples/BSP) 的带有 linux makefile 的 STM32F429I-Discovery 的 ...
  • 第6章 ThreadX NetXDUO网络协议栈移植到STM32F429 本章教程为大家讲解NetXDUO的移植。 目录 第6章 ThreadX NetXDUO网络协议栈移植到STM32F429 6.1 初学者重要提示 6.2 第1步,准备一个工程模板 6.3 第2步,...
  • 第2章 STM32F429的开发环境搭建 本章主要为大家讲解V6开发板的开发板环境搭建,涉及IDE,下载器和相关小软件的驱动安装。 目录 第2章 STM32F429的开发环境搭建 2.1 初学者重要提示 2.2 常用的开发工具 2.3 MDK...
  • 第14章 STM32F429的电源,复位和时钟系统 本章教程继续为大家讲解学习STM32F429的必备知识点电源,复位和时钟系统。掌握这三方面的知识点对后面的学习大有裨益。 目录 第14章 STM32F429的电源,复位和时钟系统 ...
  • 第4章 ThreadX GUIX上手之STM32F429 LTDC基础知识 本章教程为大家讲解LTDC应用中最基本的汉字显示和2D图形显示功能实现。 目录 第4章 ThreadX GUIX上手之STM32F429 LTDC基础知识 4.1 初学者重要提示 4.2 LCD...
  • 第6章 ThreadX GUIX上手之STM32F429 DMA2D加速 本章节为大家讲解DMA2D应用中经常用到的刷色块,刷位图,Alpha混合和图片混合的实现。 目录 第6章 ThreadX GUIX上手之STM32F429 DMA2D加速 6.1 初学者重要提示 ...
  • stm32f429

    千次阅读 2019-06-18 15:38:21
    高级控制 通用定时器 TIM1 TIM8 TIM2 TIM5 TIM3 TIM4 TIM9 TIM10 TIM11 TIM12 TIM13 TIM14 CH1 PA8/PE9/PC9 PC6/PI5 PA0/PA5/PA15 ... PA6/P...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,251
精华内容 1,300
关键字:

stm32f429