这里会显示出您选择的修订版和当前版本之间的差别。
后一修订版 | 前一修订版 | ||
icore4t_19 [2020/03/03 11:58] zgf 创建 |
icore4t_19 [2022/03/22 10:42] (当前版本) sean |
||
---|---|---|---|
行 1: | 行 1: | ||
+ | | **银杏科技有限公司旗下技术文档发布平台** |||| | ||
+ | |技术支持电话|**0379-69926675-801**||| | ||
+ | |技术支持邮件|Gingko@vip.163.com||| | ||
+ | ^ 版本 ^ 日期 ^ 作者 ^ 修改内容 ^ | ||
+ | | V1.0 | 2020-03-03 | gingko | 初次建立 | | ||
+ | \\ | ||
+ | \\ | ||
+ | \\ | ||
===== STM32CubeMX教程十九——SD_IAP_FPGA实验 ===== | ===== STM32CubeMX教程十九——SD_IAP_FPGA实验 ===== | ||
+ | \\ | ||
- | 1.在主界面选择File-->New Project 或者直接点击ACCEE TO MCU SELECTOR | + | 1.在主界面选择File-->New Project 或者直接点击ACCEE TO MCU SELECTOR。 |
{{ :icore4t:icore4t_cube_19_1.png?direct |}} | {{ :icore4t:icore4t_cube_19_1.png?direct |}} | ||
- | 2.出现芯片型号选择,搜索自己芯片的型号,双击型号,或者点击Start Project进入配置 | + | 2.出现芯片型号选择,搜索自己芯片的型号,双击型号,或者点击Start Project进入配置。 |
在搜索栏的下面,提供的各 种查找方式,可以选择芯片内核,型号,等等,可以帮助你查找芯片。本实验选取的芯片型号为:STM32H750IBKx。 | 在搜索栏的下面,提供的各 种查找方式,可以选择芯片内核,型号,等等,可以帮助你查找芯片。本实验选取的芯片型号为:STM32H750IBKx。 | ||
{{ :icore4t:icore4t_cube_19_2.png?direct |}} | {{ :icore4t:icore4t_cube_19_2.png?direct |}} | ||
- | 3.配置RCC,使用外部时钟源 | + | 3.配置RCC,使用外部时钟源。 |
{{ :icore4t:icore4t_cube_19_3.png?direct |}} | {{ :icore4t:icore4t_cube_19_3.png?direct |}} | ||
- | 4.时基源选择SysTick | + | 4.时基源选择SysTick。 |
{{ :icore4t:icore4t_cube_19_4.png?direct |}} | {{ :icore4t:icore4t_cube_19_4.png?direct |}} | ||
- | 5.将PA10,PB7,PB8设置为GPIO_Output | + | 5.将PA10,PB7,PB8设置为GPIO_Output。 |
{{ :icore4t:icore4t_cube_19_5.png?direct |}} | {{ :icore4t:icore4t_cube_19_5.png?direct |}} | ||
- | 6.引脚模式配置 | + | 6.引脚模式配置。 |
{{ :icore4t:icore4t_cube_19_6.png?direct |}} | {{ :icore4t:icore4t_cube_19_6.png?direct |}} | ||
{{ :icore4t:icore4t_cube_19_7.png?direct |}} | {{ :icore4t:icore4t_cube_19_7.png?direct |}} | ||
- | 7.设置串口 | + | 7.设置串口。 |
{{ :icore4t:icore4t_cube_19_8.png?direct |}} | {{ :icore4t:icore4t_cube_19_8.png?direct |}} | ||
- | 8.在NVIC Settings一栏使能接收中断 | + | 8.在NVIC Settings一栏使能接收中断。 |
{{ :icore4t:icore4t_cube_19_9.png?direct |}} | {{ :icore4t:icore4t_cube_19_9.png?direct |}} | ||
- | 9.配置SDMMC1 | + | 9.配置SDMMC1。 |
{{ :icore4t:icore4t_cube_19_10.png?direct |}} | {{ :icore4t:icore4t_cube_19_10.png?direct |}} | ||
- | 10.配置FATFS | + | 10.配置FATFS。 |
{{ :icore4t:icore4t_cube_19_11.png?direct |}} | {{ :icore4t:icore4t_cube_19_11.png?direct |}} | ||
{{ :icore4t:icore4t_cube_19_12.png?direct |}} | {{ :icore4t:icore4t_cube_19_12.png?direct |}} | ||
- | 11.时钟源设置,选择外部高速时钟源,配置为最大主频 | + | 11.时钟源设置,选择外部高速时钟源,配置为最大主频。 |
{{ :icore4t:icore4t_cube_19_13.png?direct |}} | {{ :icore4t:icore4t_cube_19_13.png?direct |}} | ||
{{ :icore4t:icore4t_cube_19_14.png?direct |}} | {{ :icore4t:icore4t_cube_19_14.png?direct |}} | ||
- | 12.工程文件的设置, 这里就是工程的各种配置 我们只用到有限几个,其他的默认即可 IDE我们使用的是 MDK V5.27 | + | 12.工程文件的设置, 这里就是工程的各种配置 我们只用到有限几个,其他的默认即可 IDE我们使用的是 MDK V5.27。 |
{{ :icore4t:icore4t_cube_19_15.png?direct |}} | {{ :icore4t:icore4t_cube_19_15.png?direct |}} | ||
- | 13.点击Code Generator,进行进一步配置 | + | 13.点击Code Generator,进行进一步配置。 |
{{ :icore4t:icore4t_cube_19_16.png?direct |}} | {{ :icore4t:icore4t_cube_19_16.png?direct |}} | ||
* **Copy all used libraries into the project folder** | * **Copy all used libraries into the project folder** | ||
* **将HAL库的所有.C和.H都复制到所建工程中** | * **将HAL库的所有.C和.H都复制到所建工程中** | ||
- | * 优点:这样如果后续需要新增其他外设又可能不再用STM32CubeMX的时候便会很方便 | + | * 优点:这样如果后续需要新增其他外设又可能不再用STM32CubeMX的时候便会很方便。 |
- | * 缺点:体积大,编译时间很长 | + | * 缺点:体积大,编译时间很长。 |
* **Copy only the necessary library files** | * **Copy only the necessary library files** | ||
* **只复制所需要的.C和.H(推荐)** | * **只复制所需要的.C和.H(推荐)** | ||
- | * 优点:体积相对小,编译时间短,并且工程可复制拷贝 | + | * 优点:体积相对小,编译时间短,并且工程可复制拷贝。 |
- | * 缺点:新增外设时需要重新用STM32CubeMX导入 | + | * 缺点:新增外设时需要重新用STM32CubeMX导入。 |
* **Add necessary library files as reference in the toolchain project configuration file** | * **Add necessary library files as reference in the toolchain project configuration file** | ||
* **不复制文件,直接从软件包存放位置导入.C和.H** | * **不复制文件,直接从软件包存放位置导入.C和.H** | ||
- | * 优点:体积小,比较节约硬盘空间 | + | * 优点:体积小,比较节约硬盘空间。 |
- | * 缺点:复制到其他电脑上或者软件包位置改变,就需要修改相对应的路径 | + | * 缺点:复制到其他电脑上或者软件包位置改变,就需要修改相对应的路径。 |
- | * 自行选择方式即可 | + | * 自行选择方式即可。 |
- | 14.然后点击GENERATE CODE 创建工程 | + | 14.然后点击GENERATE CODE 创建工程。 |
{{ :icore4t:icore4t_cube_19_17.png?direct |}} | {{ :icore4t:icore4t_cube_19_17.png?direct |}} | ||
创建成功,打开工程。 | 创建成功,打开工程。 | ||
+ | \\ | ||
+ | \\ | ||
行 62: | 行 72: | ||
==== 二、 实验设备及平台 ==== | ==== 二、 实验设备及平台 ==== | ||
- | - iCore4T 双核心板。 | + | - iCore4T 双核心板。[[https://item.taobao.com/item.htm?spm=a1z10.1-c.w137644-251734891.3.5923532fDrMDOe&id=610595120319|点击购买]] |
- | - JLINK(或相同功能)仿真器。 | + | - JLINK(或相同功能)仿真器。[[https://item.taobao.com/item.htm?id=554869837940|点击购买]] |
- Micro USB线缆。 | - Micro USB线缆。 | ||
- SD卡。 | - SD卡。 | ||
行 75: | 行 85: | ||
* IAP是In Application Programming的首字母缩写,IAP是用户自己的程序在运行过程中对User Flash的部分区域进行烧写,目的是为了在产品发布后可以方便地通过预留的通信口对产品中的固件程序进行更新升级。 | * IAP是In Application Programming的首字母缩写,IAP是用户自己的程序在运行过程中对User Flash的部分区域进行烧写,目的是为了在产品发布后可以方便地通过预留的通信口对产品中的固件程序进行更新升级。 | ||
* 在应用编程IAP(In-Application Programming)是应用在Flash程序存储器的一种编程模式。它可以在应用程序正常运行的情况下,通过调用特定的IAP程序对另外一段程序Flash空间进行读/写操作,甚至可以控制对某段、某页甚至某个字节的读/写操作,这为数据存储和固件的现场升级带来了更大的灵活性。 | * 在应用编程IAP(In-Application Programming)是应用在Flash程序存储器的一种编程模式。它可以在应用程序正常运行的情况下,通过调用特定的IAP程序对另外一段程序Flash空间进行读/写操作,甚至可以控制对某段、某页甚至某个字节的读/写操作,这为数据存储和固件的现场升级带来了更大的灵活性。 | ||
- | * 通常在用户需要实现IAP功能时,即用户程序运行中作自身的更新操作,需要在设计固件程序时编写两个项目代码,第一个项目程序不执行正常的功能操作,而只是通过某种通信管道(如USB、USART)接收程序或数据,执行对第二部分代码的更新;第二个项目代码才是真正的功能代码。这两部分项目代码都同时烧录在User Flash中,当芯片上电后,首先是第一个项目代码开始运行,它作如下操作:1.检查是否需要对第二部分代码进行更新;2.如果不需要更新则转到4;3.执行更新操作;4.跳转到第二部分代码执行 | + | * 通常在用户需要实现IAP功能时,即用户程序运行中作自身的更新操作,需要在设计固件程序时编写两个项目代码,第一个项目程序不执行正常的功能操作,而只是通过某种通信管道(如USB、USART)接收程序或数据,执行对第二部分代码的更新;第二个项目代码才是真正的功能代码。这两部分项目代码都同时烧录在User Flash中,当芯片上电后,首先是第一个项目代码开始运行,它作如下操作: |
+ | * 1.检查是否需要对第二部分代码进行更新; | ||
+ | * 2.如果不需要更新则转到4; | ||
+ | * 3.执行更新操作; | ||
+ | * 4.跳转到第二部分代码执行 | ||
* 第一部分代码必须通过其它手段,如JTAG或ISP烧入;第二部分代码可以使用第一部分代码IAP功能烧入,也可以和第一部分代码一道烧入,以后需要程序更新是再通过第一部分IAP代码更新。 | * 第一部分代码必须通过其它手段,如JTAG或ISP烧入;第二部分代码可以使用第一部分代码IAP功能烧入,也可以和第一部分代码一道烧入,以后需要程序更新是再通过第一部分IAP代码更新。 | ||
行 83: | 行 97: | ||
* FPGA器件有三类配置下载方式:主动配置方式(AS)和被动配置方式(PS)和最常用的(JTAG)配置方式。 | * FPGA器件有三类配置下载方式:主动配置方式(AS)和被动配置方式(PS)和最常用的(JTAG)配置方式。 | ||
* AS模式(active serial configuration mode):FPGA器件每次上电时作为控制器,由FPGA器件引导配置操作过程,它控制着外部存储器和初始化过程,从配置器件EPCS主动发出读取数据信号,从而把EPCS的数据读入FPGA中,实现对FPGA的编程配置数据通过DATA0引脚送入 FPGA,配置数据被同步在DCLK输入上,1个时钟周期传送1位数据。 | * AS模式(active serial configuration mode):FPGA器件每次上电时作为控制器,由FPGA器件引导配置操作过程,它控制着外部存储器和初始化过程,从配置器件EPCS主动发出读取数据信号,从而把EPCS的数据读入FPGA中,实现对FPGA的编程配置数据通过DATA0引脚送入 FPGA,配置数据被同步在DCLK输入上,1个时钟周期传送1位数据。 | ||
- | * PS模式(passive serial configuration mode):则由外部计算机或控制器控制配置过程。通过加强型配置器件(EPC16,EPC8,EPC4)等配置器件来完成,EPCS作为控制器件,把FPGA当作存储器,把数据写人到FPGA中,实现对FPGA的编程。该模式可以实现对FPGA在线可编程。在下载配置的时候对于Cyclone II的器件,如EP2C8,在JTAG下载方式对应.sof,AS下载方式对应.pof。 | + | * PS模式(passive serial configuration mode):则由外部计算机或控制器控制配置过程。通过加强型配置器件(EPC16,EPC8,EPC4)等配置器件来完成,EPCS作为控制器件,把FPGA当作存储器,把数据写人到FPGA中,实现对FPGA的编程。该模式可以实现对FPGA在线可编程。对于FPGA器件来说,在下载配置的时候,不同的下载配置对应不同的文件格式;JTAG下载方式对应.sof,AS下载方式对应.jic。 |
- | * JTAG:JTAG是直接烧到FPGA里面的 由于是SRAM,断电后要重烧,AS是烧到FPGA的配置芯片里保存的 每次上电就写到FPGA里。 | + | * JTAG下载方式:JTAG是直接将编译文件烧录到FPGA里面的 由于是SRAM,断电后要重新烧录,AS是将文件下载到FPGA的配置芯片里保存的,每次上电就写到FPGA里。 |
* 在PS方式下,FPGA处于完全被动的地位。FPGA接收配置时钟、配置命令和配置数据,给出配置的状态信号以及配置完成指示信号等。PS配置可以使用altera的配置器件(EPC1、EPC4等),可以使用系统中的微处理器,也可以使用单板上的CPLD,或者altera的下载电缆,不管配置的数据源从哪里来,只要可以模拟出FPGA需要的配置时序来,将配置数据写入FPGA就可以。 | * 在PS方式下,FPGA处于完全被动的地位。FPGA接收配置时钟、配置命令和配置数据,给出配置的状态信号以及配置完成指示信号等。PS配置可以使用altera的配置器件(EPC1、EPC4等),可以使用系统中的微处理器,也可以使用单板上的CPLD,或者altera的下载电缆,不管配置的数据源从哪里来,只要可以模拟出FPGA需要的配置时序来,将配置数据写入FPGA就可以。 | ||
* 在上电以后,FPGA会在nCONFIG管脚上检测到一个从低到高的跳变沿,因此可以自动启动配置过程。 | * 在上电以后,FPGA会在nCONFIG管脚上检测到一个从低到高的跳变沿,因此可以自动启动配置过程。 |