MM32

1、Eclipse 软件和相关工具的下载和安装

1.1 软件下载

Eclipse软件:eclipse-inst-jre-win64.exe,  可以从官网下载:

https://www.eclipse.org/downloads/download.php?file=/oomph/epp/2023-09/R/eclipse-inst-jre-win64.exe

交叉编译工具链,gcc-arm-none-eabi-5_4-2016q2-20160622-win32, 可以从官网下载:

https://developer.arm.com/downloads/-/gnu-rm

1.2 安装选项

安装Eclipse IDE for Embedded C/C++ Developers。

1.png

1.3 安装交叉编译工具链

2.png

2、在Eclipse中开始MM32开发项目

2.1 创建

安装完成,启动 Eclipse,在菜单File->new -> project。

3.png

2.2 选择C Project

4.png

2.3 创建工程

在Project name填写项目名,选择Empty Project,Toolchains选择Arm Cross GCC 如下图:

5.png

2.4 选择Toolchain

点菜单Next,选择Toolchain 和路径(交叉编译工具链安装的位置),如下图:

6.png

2.5 添加路径

点击菜单Finish,可以看到Project Explorer有工具链的Incudes路径, 如下图:

7.png

2.6 添加工程目录

拷贝应用代码和MM32库函数到工程目录,在如下图:

8.png

也可以通过Import工程,在菜单File里子菜单Import,选择Existing Projects into Workspace,如下图:

9.png

在Browse选择工程目录,然后Finish,如下图:

10.png

3、配置编译环境和编译

3.1 配置编译环境

在菜单Project选择子菜单Properties,在Settings中选内Arm CPU。

11.png

配置Includes和连接文件.ld的路径。

12.png

3.2 配置Tool Chain

选择CDT Internal Builder。

13.png

3.3 编译

在Project菜单,选择Build Automatically,然后Build All开始编译,正确编译有如下log:

14.png

编译有如下log,在Project菜单,Properties ->C/C++ Build ->Setting ->GNU Arm Cross C Linker  ->Miscellaneous -> Other link flags增加--specs=nosys.specs

15.png

4、调试

4.1 选择debug工具

在菜单Run中打开子菜单Debug Configurations,在Debugger里指向J-Link GDB的路径和填写Device name,如下图:

16.png

4.2 进入调试模式

点击小甲虫17.png  ,正确进入调试模式,如下图:

18.png

4.3 设置断点

设置断点在259行,如下图:

19.png

4.4 运行

点击运行20.png ,然后程序跳到断点259行,程序可以正常调试了,如下图:

21.png

来源:灵动MM32MCU

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 57

引言

MindSDK为MM32主流的微控制器,实现了一系列SPI驱动的样例工程。本文通过讲解 SPI 模块的样例工程,介绍 SPI 模块的功能和用法。关于 SPI 模块对应的驱动程序,以及 SPI 外设模块硬件的实现细节,可具体查阅 MindSDK 工程的源文件,以及 MM32 微控制器(例如MM32F5270)的用户手册。

样例工程

MindSDK 中为 SPI 驱动设计的样例工程包括:

  • spi_master_basic

  • spi_master_tx_dma

  • spi_master_xfer_dma

  • spi_master_b2b_interrupt

  • spi_master_b2b_polling

  • spi_slave_b2b_interrupt

其中,spi_master_basic、spi_master_tx_dma 与 spi_master_xfer_dma 分别演示了 SPI 做主机的典型数据传输方式,包括:基础数据传输、SPI 使用 DMA 发送数据、SPI 使用 DMA 收发数据。另外,还有一些 SPI 板级通信的样例,通过将一块 SPI 做主机,另一块 SPI 做从机的方式进行一系列板对板的基础数据传输,主机样例与从机样例结合使用,包括:SPI做主机进行中断数据传输,SPI做主机进行轮询数据传输,SPI做从机进行中断数据传输(SPI从机引脚与SPI主机引脚相连进行数据传输)。

spi_master_basic

spi_master_basic 描述了 SPI 模块最基本的数据传输方式,轮询方式。在样例工程中,通过  SPI_InitMaster() 函数,配置 SPI 为主模式,选定一个 SPI 数据采样时序,为空闲时时钟线为低电平、下降沿时数据有效的 SPI_PolPha_Alt0 ,并指定传输数据宽度为 SPI_DataWidth_8b 、SPI 的波特率为 BOARD_LOOP_SPI_BAUDRATE ,选定 SPI 的传输方向为 SPI_XferMode_TxRx 。然后,通过 SPI_Enable() 函数启动 SPI,使 SPI 能够进行数据传输。

每当 SPI 发送缓冲区未满时,可进行数据发送,数据由 MOSI 引脚传出;当 SPI 接收缓冲区接收有效数据时,可读取有效的接收数据。

在最终运行程序时,需要将 SPI 的 MOSI 引脚与 MISO 引脚使用杜邦线相连,通过向 PC 机上的串口通信终端输入任意按键,使 SPI 进行 APP_SPI_BUFF_LEN 次数据发送并接收到数据,主循环对接收数据和发送数据进行验证,若存在验证失败数据,则可看到串口打印出错信息 spi loopback xfer error. app_spi_xfer_err_count =  ,若验证成功,则可看到串口打印 spi loopback xfer done. ,从而验证 SPI 做主机的数据轮询传输情况。

spi_master_tx_dma

spi_master_tx_dma 相较于 spi_master_basic 样例工程,实现通过 DMA 进行 SPI 的数据发送功能。

其实现原理,是在 spi_master_basic 的基础上,增加对于 DMA 的初始化,通过 DMA_InitChannel() 函数,选定所使用的 DMA 通道为 BOARD_SPI_TX_DMA_CHANNEL ,配置 DMA 数据搬运方向为存储器到外设 DMA_XferMode_MemoryToPeriph ,数据宽度为 DMA_XferWidth_8b ,通过 SPI_GetTxDataRegAddr() 函数获取外设地址并进行配置,设定存储器地址为 (uint32_t)app_spi_tx_buf ,外设地址自增模式为不自增 DMA_AddrIncMode_StayAfterXfer ,存储器地址自增模式为 DMA_AddrIncMode_IncAfterXfer。然后,启用选定 SPI 外设的 DMA 发送通道对应的 NVIC 中断。最后,通过 DMA_EnableChannelInterrupts() 函数,在 BOARD_SPI_TX_DMA_CHANNEL 通道使能 DMA_CHN_INT_XFER_DONE 中断,每次在 DMA_EnableChannel() 启动 DMA 数据传输后,DMA 传输完成时,会触发中断。

实际运行程序时,将 SPI 的 MOSI 引脚与 MISO 引脚使用杜邦线相连后,用户在串口调试终端中每次输入任意字符,程序均会调用一次 DMA_EnableChannel() 函数,启动 DMA 传输,在 SPI 进行一次 DMA 传输并完成后,DMA 输标志位`app_dma_xfer_done`将在中断处理函数中被设置为true,主程序循环等待,当标志位为 true 时,打印 spi tx dma xfer done. 到串口终端界面。

spi_master_xfer_dma

spi_master_xfer_dma 相较于 spi_master_tx_dma 样例工程,实现通过 DMA 进行 SPI 的数据收发功能。

其实现原理,是在 spi_master_tx_dma 的基础上,增加对于 SPI 使用 DMA 接收通道的初始化,选定使用的 SPI DMA 接收通道为 BOARD_SPI_RX_DMA_CHANNEL ,在初始化 DMA 发送通道后,继续使用 DMA_InitChannel() 函数初始化 DMA 接收通道,修改传输方向为 DMA_XferMode_PeriphToMemory ,设定存储器地址为 (uint32_t)app_spi_rx_buf ,通过 SPI_GetRxDataRegAddr() 函数获取外设地址并配置。然后启用选定 SPI 外设的 DMA 接收通道对应的 NVIC 中断。最后,在 BOARD_SPI_RX_DMA_CHANNEL 通道使能 DMA_CHN_INT_XFER_DONE 中断,每次在 DMA_EnableChannel() 启动 DMA 数据传输后,当 DMA 传输完成,会触发对应通道的中断。

实际运行时,将 SPI 的 MOSI 引脚与 MISO 引脚使用杜邦线相连后,用户在串口调试终端中每次输入任意字符,程序均会调用一次 DMA_EnableChannel() 函数,启动 DMA 的发送与接收通道,在 SPI 进行一次 DMA 发送并完成后,DMA 发送完成标志位 app_dma_tx_done 将在发送通道所对应的中断处理函数中被设置为 true,再进行 SPI 的 DMA 接收操作,DMA 接收数据完成后,DMA 接收完成标志位 app_dma_rx_done 将在接收通道所对应的中断处理函数中被设置为 true,主程序循环等待,当发送完成标志位为 true 时,打印 spi tx dma done. 到串口终端界面,当接收完成标志位未 true 时,打印 spi rx dma done with data: 以及接收数据到串口终端界面。

spi_master_b2b_interrupt

spi_master_b2b_interrupt 实现的是一个使用 SPI 主模式中断传输的样例工程,在主从机的从属关系中做主机,需与从机结合使用。

其实现原理,是在 spi_master_basic 的基础上,增加 SPI 传输所使用的结构体,通过 SPI_EnableInterrupts() 函数使能发送完成中断 SPI_INT_TX_DONE 与接收完成中断 SPI_INT_RX_DONE 中断,当发送或接收数据完成时,产生对应中断,在中断处理函数中,传输次数达到所设定的 rx_idx 或 tx_idx ,将通过 SPI_EnableInterrupts() 函数关闭对应的接收完成中断或发送完成中断,接收完成后调用 spi_rx_done_callback() 回调函数,并将全局标志位 app_spi_xfer_flag 置为true。

实际运行此程序时,需令一块开发板下载此样例工程,另一块开发板下载 spi_slave_b2b_interrupt 样例工程,使用杜邦线连接两开发板的 MOSI、MISO、NSS、SCK 引脚,通过串口终端界面输入任意按键,进行 SPI 的数据收发,串口终端打印发送数据与接收数据。

spi_master_b2b_polling

spi_master_b2b_polling 实现的是一个使用 SPI 主模式轮询传输的样例工程,在主从机的从属关系中做主机,需与从机结合使用。

该实现原理与 spi_master_basic 基本相同,通过 while 循环等待当前达到发送或接收数据所需的传输条件,达到后进行数据收发,设定发送 APP_SPI_BUF_LEN 个数据并接收。

实际运行此程序时,需令一块开发板下载此样例工程,另一块开发板下载 spi_slave_b2b_interrupt 样例工程,使用杜邦线连接两开发板的 MOSI、MISO、NSS、SCK 引脚,通过串口终端界面输入任意按键,进行 SPI 的数据收发,串口终端打印发送数据与接收数据。

spi_slave_b2b_interrupt

spi_slave_b2b_interrupt 实现的是一个使用 SPI 从模式中断的样例工程,在主从机的从属关系中做从机,需与主机结合使用。

在样例工程中,通过 SPI_InitSlave() 函数配置 SPI 为从模式,设置传输方向为 SPI_XferMode_TxRx ,SPI 从机的数据采样时序需要与主机的数据采样时序配置相同,为 SPI_PolPha_Alt0 ,设定数据宽度为 SPI_DataWidth_8b 。通过 SPI_EnableInterrupts() 函数使能 SPI_INT_RX_DONE 中断,并启用选定 SPI 外设对应的 NVIC 中断。最后,启动 SPI,SPI 作为从机,等待主机的命令。当 SPI 接收完成数据后,产生接收完成中断,并执行中断处理函数,在中断处理函数中将已接收的数据发送出去。

在最终运行程序时,需令一块开发板下载此样例工程,另一块开发板下载 spi_master_b2b_polling 样例工程或 spi_master_b2b_interrupt 样例工程,使用杜邦线连接两开发板的 MOSI、MISO、NSS、SCK 引脚,在 spi_master_b2b_xxx 工程中对应的串口终端界面下输入任何字符,在 spi_slave_b2b_interrupt 工程中对应的串口终端界面中可以看到对应的内容。

来源:灵动MM32MCU

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 29

引言

MindSDK为MM32使用星辰处理器内核的系列微控制器,实现了一组TIM样例工程,MindSDK中的TIM模块对应硬件定时器TIM外设。本文通过讲解TIM模块的样例工程,介绍TIM模块的功能和用法。关于TIM模块对应的驱动程序,以及TIM外设模块硬件的实现细节,可具体查阅MindSDK工程的源文件,以及MM32微控制器(例如MM32F5270)的用户手册。

样例工程

MindSDK中为TIM驱动设计的样例工程包括:

  • tim_basic

  • tim_one_time_run

  • tim_output_compare_pwm

  • tim_input_capture

  • tim_external_trigger_input

  • tim_slave_mode

  • tim_slave_mode_encoder

  • tim_comp_output_compare_pwm

其中,tim_basic、tim_one_time_run、tim_output_compare_pwm、tim_input_capture和tim_external_trigger_input 分别演示了定时器最典型的功能,包括定时、输出比较、输入捕捉,以及对外部脉冲进行计数等。另外,还有一些不大典型,用在特殊应用场景的功能,例如,使用“从机”模式干预常规的定时器计数,通过硬件实现互补的PWM输出(常用于电机控制应用中控制驱动桥)。

tim_basic

tim_basic 描述了使用TIM模块最基本的方式,周期定时器。在样例工程中,通过 TIM_Init() 函数,配置一个选定的TIM外设模块的计数引擎,为连续计数模式 TIM_PeriodMode_Continuous ,并指定计数周期为  APP_TIM_UPDATE_PERIOD 。然后,启用选定TIM外设模块对应的NVIC中断。最后,通过调用 TIM_Start() 驱动函数,启动定时器开始计数。

每当定时器计数到达预设的计数周期值后,计数值折返为0,重新开始计数。同时,TIM会触发NVIC中断, tim_basic 样例工程中为TIM中断实现的服务程序中,实现了通过串口发送字符 * 的操作。

最终程序运行时,可以在PC机上的串口通信终端看到以指定周期输出的字符 * ,验证定时器中断被周期触发。

tim_one_time_run

tim_one_time_run 相对于 tim_basic 样例工程实现周期触发定时器中断服务,实现了每次启动定时器后,仅触发一次中断的用法。

其实现原理,是在 tim_basic 配置定时器周期运行的基础之上,修改初始化配置 .PeriodMode 的值为 TIM_PeriodMode_OneTimeRun。之后,每次通过 TIM_Start() 函数启动定时器后,定时器仅计数一个周期后,触发中断,然后停止计数。

实际运行程序时,用户在串口调试终端中每次输入任意字符,程序均会调用一次 TIM_Start() 函数,延时指定计数周期后,在定时器中断服务程序中打印字符 * 到串口终端界面。

tim_output_compare_pwm

tim_output_compare_pwm 实现的是一个通过输出比较功能产生PWM输出信号的样例工程。

其实现原理,是在 tim_basic 基础之上,额外通过驱动函数 TIM_EnableOutputCompare(),启动并配置给定通道 BOARD_TIM_CHANNEL 为输出比较功能。其中,指定通道的配置属性 .PinPolarity 的值为 TIM_PinPolarity_Rising,.RefOutMode 值为 TIM_OutputCompareRefOut_FallingEdgeOnMatch,设定同通道绑定的硬件引脚信号在计数初始的阶段为高电平,当计数值达到通道数据寄存器中设定的匹配值时,输出下降沿信号,输出低电平。

实际运行程序时,用户通过 TIM_Init() 函数配置定时器的基本定时单元,对应的计数周期即为输出PWM信号波形的周期,启用输出比较的指定通道绑定的引脚即为输出PWM信号的引脚,通过 TIM_PutChannelValue() 函数设定输出波形在整个周期下降沿的位置,进而调整PWM输出信号波形的占空比。通道引脚在每次定时器周期的开始输出为高电平,在周期内设定的匹配值的位置产生下降沿,转而输出低电平,再计数周期结束折返为0时,恢复为高电平。如此周而复始,实现输出PWM信号波形。

tim_input_capture

tim_intput_capture 实现的是一个使用定时器为外部输入的触发信号记录时刻的样例工程。

其实现原理,是在 tim_basic 基础之上,额外通过驱动函数 TIM_EnableInputCapture(),启动并配置给定通道 BOARD_TIM_CHANNEL 为输入捕获功能。其中,指定给定通道的捕获输入信号极性 .PinPolarity 的值为 TIM_PinPolarity_Falling,表示在该给定通道绑定的引脚上出现下降沿信号时,触发捕获事件。此时,捕获计数器当前的计数值到给定通道的通道数据寄存器中,这个值就可以作为该捕获事件的时刻记录。

实际运行程序时,用户通过 TIM_Init() 函数配置定时器的基本定时单元,此时定时器的计数周期,就是可能捕获时刻值的有效范围。然后在电路上使用一个按键接入到指定通道绑定的引脚上,模拟产生下降沿触发信号。当按下按键时,触发信号到来,触发程序中的通道事件中断服务程序,在其中可以通过 TIM_GetChannelValue() 函数读取本次输入捕获事件发生时的计数时刻。

tim_external_trigger_input

相对于 tim_basic 中,使用芯片内部的时钟源脉冲进行计数,tim_external_trigger_input 样例工程可以对用户指定引脚上的脉冲进行计数,计数的脉冲来自于芯片外部的信号源。

其实现原理,是在 tim_basic 基础上,额外通过驱动函数 TIM_EnableExtTriggerIn(),配置启用外部对外部输入的脉冲信号进行计数的功能,固定从TIM外设模块的  ETR 引脚捕获来自外部的脉冲信号。每次捕获到一个脉冲信号,等同于使用芯片内部时钟源的脉冲,计数器自增计数。此时,还可以基于这个新的时钟源,使用周期计数中断等功能。

实际运行程序时,用户可以将一个按键接入到指定TIM外设模块的 ETR 引脚上,用手动按按键产生脉冲信号。在程序中指定定时器的计数周期 APP_TIM_UPDATE_PERIOD 值为2,意味着每输入两次脉冲,就会触发一次定时器周期中断。

tim_slave_mode

tim_slave_mode 实现的是一个使用从机TIM从机模式的样例工程。实际上,这里的“从机”同从属关系的的“从”是没关系的,而是可以理解为更丰富的可由用户控制的工作模式。

tim_slave_mode 工程,在 tim_basic 基础上,额外通过驱动函数 TIM_EnableSlaveMode(),配置了其中一种“从机”模式:使用 ETR 作为控制信号(下降沿)的引脚 TIM_SlaveIn_Alt7,当控制信号到来时,选择暂停计数  TIM_SlaveResp_Alt5。

实际运行程序时,用户可以将一个按键接入到指定TIM外设模块的 ETR 引脚上,用手动按按键产生电平控制信号。当按下按键时,控制定时器暂停计数,松开按键时,定时器恢复计数。正常计数到一整个周期时,会产生中断。如此,当按下按键时,会影响定时器中断的周期。

tim_slave_mode_encoder

tim_slave_mode_encoder 工程基于 tim_input_capture 工程,通过额外调用 TIM_EnableSlaveMode() 并传入一组特定的配置,启用了一种特殊的“从机”模式,从而实现了编码器的功能。

tim_comp_output_compare_pwm

tim_comp_output_compare_pwm 基于tim_output_compare_pwm 工程,通过额外的驱动函数 TIM_EnableCompOutput(),实现了PWM信号的互补输出,这意味着当使用正常的输出比较通道输出PWM信号时,还开启了硬件设计的,使用对应的另一个通道,输出电平极性刚好相反的PWM信号。

来源:灵动MM32MCU

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 44

1、引言

需求 

MM32F5 系列微控制器具备 QSPI 接口,可以外接 QSPI Flash,扩大可使用的 Flash 空间,从而满足那些需要大 Flash 空间应用的需求,让 Flash 空间的大小不再成为限制应用开发的瓶颈。

但使用 QSPI Flash 之前,还需要对 QSPI 接口进行配置,然后才能执行存储在 QSPI Flash 上的代码,这让应用程序的开发变得复杂。

因此,需要一些解决方案,能够让用户尽可能无感地使用 QSPI Flash 存储应用程序。

案例

以 MM32F5277E9PV 微控制器为例,这个微控制器搭载着 ArmChina STAR-MC1 内核,主频可达 120MHz,拥有 256KB Flash 和 128KB SRAM,使用这块芯片,可以实现一些 “复杂的应用”,例如,运行一个带有 GUI 功能的应用。

在编译这个 “复杂的应用” 时,编译器可能会报错,显示缺少足够 Flash 空间;这个应用可能包含了图片,字库,好几个协议栈,所需要的 Flash 空间非常大,一般微控制器不会拥有这么大的片内 Flash。因此,需要外接一个 QSPI Flash 来解决这个问题。

MM32F5270 系列微控制器带有 QSPI 接口,可以使用 QSPI Flash 来扩展微控制器可使用的 Flash 空间;如果担心外接 QSPI Flash 占据 PCB 空间,则可使用 MM32F5280 系列微控制器,该微控制器合封有一块 1MB ~ 2MB 的 QSPI Flash,无需考虑 QSPI Flash 的电路,节省 PCB 面积。

通过外接 QSPI Flash,就可以拥有足够的空间来实现这个 “复杂的应用”。但开发应用时,仍希望像使用片内 Flash 那样使用 QSPI Flash:下载程序的时候,直接点击 IDE 的下载按钮,就能下载程序;调试代码的时候,直接点击调试按钮,就能进行软件调试;只需少量修改代码,就能让应用程序保存在 QSPI Flash 中,让微控制器直接执行。

为了让 IDE 下载程序到 QSPI Flash 中,需要有一个合适的下载算法。为了让编译器知道应用程序要保存在 QSPI Flash 中,需要修改 Linker 文件,让编译器知道 QSPI Flash 的地址范围。为了让微控制器执行存储在 QSPI Flash 中的程序,还需要实现合适的 2nd Bootloader ,引导微控制器去执行 QSPI Flash 中的程序。

目标

在 MDK 平台上实现定制化的下载算法,可将应用程序下载到 QSPI Flash 中。

尽可能少地改动应用程序代码,使其能够存储在 QSPI Flash 中。

实现简单的 2nd Bootloader,使其能够引导微控制器执行存储在 QSPI Flash 中的应用程序。

在上述的 2nd Bootloader 的基础上,实现量产下载,更新应用程序等特殊功能。

2、配置硬件环境

硬件环境

QSPI Flash

工欲善其事,必先利其器,想在 QSPI Flash 上存储应用程序,就需要选择一款合适的 QSPI Flash 芯片。

选型时,需要重点关注工作电压的范围,部分 QSPI Flash 的工作电压在 1.8V 左右,如果使用 3.3V 供电,是没办法正常工作的,反之亦然。

除了电压范围外,部分 QSPI Flash 芯片在默认情况下,是不允许使用四线模式的,原本 QSPI 的 D2 & D3 引脚会被用于写保护使能(WP)和 HOLD 使能。让 QSPI Flash 允许使用四线模式的方法,需参照使用的 QSPI Flash 芯片手册进行操作。建议使用默认处于四线模式的 QSPI Flash,或者在设计 2nd Bootloader 时,能在跳转到应用程序之前,将四线模式打开。

MM32F5 系列的微控制器支持大多数常见的 QSPI Flash,表1中列举的 QSPI Flash 芯片为经过实际测试可用的 QSPI Flash 芯片:

表1 测试可用的 QSPI Flash 列表

1.png

MCU

硬件电路设计时,需要了解微控制器的哪些引脚可作为 QSPI 接口,表2 是 MM32F5270 系列微控制器的 QSPI 接口引脚:

表2 MM32F5270 系列微控制器 QSPI 接口引脚

2.png

其引脚配置如下:

  • 引脚模式:复用推挽输出。

  • 引脚速度:高速模式,QSPI 的 SCK 时钟最快可达 60MHz,因此应配置成高速模式。

  • 引脚复用功能号:巧合的是,当引脚作为 QSPI 接口时,复用功能号均为 AF10。

表3 为MM32F5280 系列微控制器的引脚:

表3 MM32F5280的QSPI引脚

3.png

可以发现,MM32F5280 系列微控制器只有一组引脚可作为 QSPI 接口,并且这些引脚并没有引出到芯片外部,这是由于 MM32F5280 系列微控制器内部合封了 QSPI Flash,其引脚已经在芯片内部与 QSPI Flash 相连,不需要再引出至芯片外部。

虽然 MM32F5280 片内合封了 QSPI Flash,对应的引脚也直接与其相连,但在使用这块 QSPI Flash 时,仍需配置相应的引脚,其配置方法与 MM32F5270 完全一致。

由于 MM32F5280 系列微控制器将其 QSPI Flash 合封在了芯片内部,因此在 PCB 设计时,可减少外围元件的数量,降低了产品成本。

当使用 MM32F5270 + QSPI Flash 的方案时,由于 QSPI 信号线暴露在微控制器外部,易受到外部电磁环境的干扰,可能无法以最快的速度(SCK 的频率为 60MHz)访问 QSPI Flash,但这个问题在 MM32F5280 上就不会出现。

当然,也正是由于 MM32F5280 系列微控制器的 QSPI Flash 合封在了芯片内部,如果想用使用更大的 Flash 时,还是需要使用 MM32F5270 + QSPI Flash 的方案。

Board

PLUS-F5270开发板,如图1所示:

4.png

图1 PLUS-F5270开发板

PLUS-F5270 板载华邦的 W25Q64JVSIQ,Flash 大小为 8MB (64Mb),3.3V 供电,默认情况下,四线模式处于打开状态。

MM32F5270 连接该 QSPI Flash 所使用的引脚号如图2所示:

5.png

图2 MM32F5270连接的QSPI Flash引脚

在PLUS-F5270开发板上,MM32F5270芯片与QSPI Flash W25Q64的引脚对应关系如表4所示。

表4 PLUS-F5270开发板上MM32F5270与QSPI Flash W25Q64的引脚对应关系

在设计 MM32F5270 + QSPI Flash 的应用时,建议优先采用 PF6(QSPI_CS)、PG7(QSPI_SCK)、PG6(QSPI_D0)、PF8(QSPI_D1)、PF10(QSPI_D2)、PG8(QSPI_D3) 引脚,从而可使用 MM32F5280 MCU 无缝替换 MM32F5270。

6.png

软件工具

在开发调试 MM32F5270 + QSPI Flash 这个 “复杂的应用” 时,需要一些软件工具:

开发平台

嵌入式软件的开发需要一个软件平台,这个软件平台可以是 MDK,IAR,ARMGCC 等,本文将以 MDK 为例,开发并调试所需要的软件。在官网(https://www.keil.com/download/product)页面上,可下载MDK-ARM的安装包并启动安装,使用 MDK 进行工程的调试与下载。

需要注意,MDK 的软件版本最低为 5.37,且需使用 AC6 编译器,旧版本 AC5 编译器不支持编译 STAR-MC1 平台的软件。

下载算法

不同于 SRAM,修改 Flash 中的内容时,需要先将 Flash 中的数据整块擦除,再通过特殊的方法将数据写入到 Flash 中,而不是直接往指定地址进行写操作。因此,需要有一段中间程序,能够帮助调试器将指定位置的数据,写入到 Flash 中。

这段中间程序就叫做下载算法,它运行在 SRAM 中,在修改 Flash 中的内容前,调试器会先将下载算法通过 SWD 或其他调试接口加载到 SRAM 中并执行,然后再加载存放到 Flash 中的数据,让存储在 SRAM 中的下载算法将数据写入到 Flash 中。

获取下载算法有三种方式:

1)从 MCU 厂商的官网中下载相应 MCU 的 PACK 包中获取。

2)从 MDK 的 Pack Installer 中获取。

3)使用开发平台提供的模板文件自行制作。

2nd Bootloader

2nd Bootloader 将会引导微控制器执行存放在 QSPI Flash 中的应用程序,之所以称为 2nd Bootloader,是为了区分固化在微控制器内部的 1st Bootloader。当然,2nd Bootloader 也可以固化到微控制器中,作为 1st Bootloader 来使用,但那样就失去了可定制化的意义。

2nd Bootloader 执行存储在 QSPI Flash 上的应用程序之前,会先初始化 QSPI 外设,以及所用到的 GPIO 引脚,让微控制器能够通过访问地址的形式访问 QSPI Flash,就像访问片内 Flash 那样。当然,这只是 2nd Bootloader 最基本的功能,在此基础上,还可以增加一些定制化的功能,例如为量产而准备的串口 + Ymodem 下载固件功能,或者增加 OTA 升级的方案。

来源:灵动MM32MCU

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 59

自12月国内最新防疫政策调整以来,抗疫三年终于要接近尾声了。小编自己和身边的亲友同事也都已经经历或正在经历着“喜羊羊”、“美羊羊”等各种状态。除了各类退烧药、口罩、黄桃罐头之外,血氧仪也成为异常火爆的特需品。

1.jpg

血氧仪示意图

下面,小编就血氧仪的工作原理和所用MCU给大家做个介绍。

血氧仪主要测量指标分别为脉率、血氧饱和度、灌注指数。血氧饱和度是临床医疗上重要的基础数据之一。对于新型冠状病毒感染患者而言,对血氧饱和度的测试,可有效监测呼吸系统异常状况。特别是肺部受到感染的患者,其血氧度会降低,易引发低氧血症。这类情况在体质虚弱,免疫功能缺陷,以及60岁以上老年人等有基础疾病的人身上尤其显著。这类人群随着机体机能的下降,对于疲惫、呼吸不畅等症状的敏感程度降低,以至于当发现病症时,已处于非常虚弱的状态,极易引发危及生命的其他症状。因此,作为有效的预测手段,血氧仪能及时地了解血氧饱和度的情况,若有明显的下降(如,血氧饱和度低于93%),则需及时就医。

以家用指压式血氧仪为例,一个血氧仪一般由MCU、存储芯片、两个控制LED的数模转换器、两个发光二极管驱动等组成。将发光二极管对准指尖被测部位,两个发光二极管释放波长为660纳米的红光和波长为940纳米的红外光,含氧的血红蛋白对这两种波长的吸收率和不含氧的差别很大。利用这个性质,可以计算出两种血红蛋白的比例。在血氧测量时,还原血红蛋白和有氧合血红蛋白,通过检测两种对不同波长的光吸收的区别,所测出来的数据差就是测量血氧饱和度基本的数据。通过增加不同波长的光谱分析,可以将测量的精度做得更好。

2.jpg

血氧仪应用框图

灵动的MM32 MCU产品已被广泛地应用在了一些主流的血氧仪产品中,在去年底香港疫情爆发阶段及最近国内疫情蔓延之际,MM32F0010/F0020和MM32F0140都是该应用的主力产品。

MM32F的100K次Flash擦除次数可以有效地作为用户数据存储,从而在系统BOM上节省EEPROM,高性能的1Msps 12b ADC能对光电采样结果进行大数据量的暂存和处理,提高采样的效率并有助于对结果做高精度的计算。

新晋推出的MM32L0130系列,集成了段码LCD控制器,且待机功耗可低至100nA,可进一步降低血氧仪的整体功耗,实现更长久和易用的用户体验。

3.jpg

更多有关灵动血氧仪的信息,请访问:

https://www.mindmotion.com.cn/applications/medical_and_healthcare/portable_oximeter/

来源:灵动MM32MCU

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 84

01、开发环境描述

Cortex-M0型号:MM32F0133C7P
下载器与调试接口:MM32 DAP-Link + SWD
操作系统:Ubuntu20.0.4
集成开发环境平台:eclipse IDE for C/C++ developers
交叉编译链:arm-none-eabi-gcc
调试服务器:JLink GDB Server

02、安装eclipse IDE for C/C++ developers

2.1、准备工作

需要下载两个软件包:

JDK:
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

JDK是Eclipse的必要运行环境,本次实验使用的是jdk-8u231-linux-x64.tar.gz。

Eclipse:

https://www.eclipse.org/downloads/packages/

Eclipses根据开发语言选择合适的安装包,我们主要用C/C++开发,使用的是
Eclipse IDE for C/C++ Developers linux 64-bit。

注:安装包版本可自行选择,但要注意一点,新版本的eclipse可能会与低版本的JDK不兼容。

2.2、JAVA环境

在/opt文件夹下新建一个jvm目录,将解压后得到的jdk1.8.0_231(取决于JDK版本)移动到新建的jvm目录下,添加java路径后,在终端中键入命令。

sudo mkdir /opt/jvm
sudo gedit .profile

在文件最后添加如下内容。(JDK版本号可能有所不同,文件夹的名称由实际的文件夹名称为准)

# java path
export JAVA_HOME=/opt/jvm/jdk1.8.0_231
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH

最后键入命令使得路径生效。

source .profile

此时,在终端中键入java版本查看命令。

java -version

如果出现如下信息,,则说明JAVA环境配置成功。

“”

2.3、安装Eclipse

解压eclipse的软件包会得到一个eclipse的文件夹,将其移动到/opt目录下,建立jre软连接。

sudo mkdir /opt/eclipse/jre
sudo ln -s /opt/jvm/jdk1.8.0_231/bin /opt/eclipse/jre/

添加eclipse的桌面图标。

sudo gedit /usr/share/applications/eclipse.desktop

在打开的文件中键入。(注意Exe和Icon路径是否正确)

[Desktop Entry]
Encoding=UTF-8
Name=Eclipse
Comment=Eclipse
Exec=/opt/eclipse/eclipse 
Icon=/opt/eclipse/icon.xpm
Terminal=false
StartupNotify=true
Type=Application
Categories=Application;Development;

接着ctrl+s保存文件,然后赋予可执行权限。

sudo chmod u+x /usr/share/applications/eclipse.desktop

最后将eclipse.desktop复制到桌面或者固定在dock上,后面就可以通过图标启动eclipse。

2.4、安装交叉编译链arm-none-eabi-gcc

我们从ARM官方选择合适的版本下载(此处选择了Linux64):

https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm/downloads

“”

下载的为tar.ba2格式压缩包,使用命令tar -jxf <要解压的文件>解压到我们要安装的目录:

“”

为了以后使用方便,将文件夹重命名:

“”

它下面的bin目录就是我们要使用的编译工具链:

“”

接下来我们要将bin目录添加到环境变量,这样可以直接在命令行输入要使用的工具名,然后系统就可以找到该工具,在此我们仅为当前用户添加环境变量,使用gedit ~/.bashrc编辑当前用户配置文件,在文件最后添加:

export PATH=$PATH:/home/neomissing/gcc-arm-none-eabi/bin

“”

然后使用命令source ~/.bashrc更新系统路径,使添加的环境变量立即生效:

“”

然后输入命令arm-none,然后按三下Tab(一定不要输入全部),检查系统是否可以自动补全。如果系统可以提示,说明环境变量配置成功,可以放心使用arm-none-eabi工具链。

2.5、安装GNU ARM Eclipse插件包

The recommended way to install these plug-ins is to use the Eclipse standard install/update mechanism: In the Eclipse menu: Help → Install New Software…
in the Install window, click the Add… button (on future updates, just select the URL in theWork with: combo)
fill in Name: with GNU ARM Eclipse Plug-ins
fill in Location:
with http://gnuarmeclipse.sourceforge.net/updates

“”

click the Add button
normally the main window should list a group named CDT GNU Cross Development Tools; expand it select all the plug-ins (the one marked End of life is needed only for compatibility with previous version, normally can be safely skipped)
click the Next button and follow the usual installation procedure

“”

Once you define the update site URL, further updates are greatly simplified (Help → Check For Updates)。

2.6、安装OpenOCD

安装openocd 打开Ubuntu终端(alt+ctrl+t)输入命令:

sudo apt install openocd

完成之后 输入openocd查看版本信息。

“”

目前默认安装的openocd芯片支持不全,找到openocd安装路径删除,复制替换MindMotion提供的openocd即可。

检查MM32 DAP-Link连接正常。

打开Ubuntu终端(alt+ctrl+t)输入lsusb,查看连接如下:

“”

03、创建MM32工程并配置、编译、调试

3.1、工程创建

打开eclipse,创建一个c工程,点击file,新建New Project,选择C Project。

“”

点击next,输入工程名字test,如下配置:

“”

连续点击next。

“”

选择选择工具链路径,这一路径就是我们第二步中arm-none-eabi-gdb的路径,需要匹配,点击finish。

“”

添加自己的工程文件,然后指定头文件路径以及配置路径,在工程浏览器中选中工程,右键单击选择Properties,再选择C/C++ Build-->Settings,跳出如下界面:

“”

配置汇编器Cross ARM GNU Assembler,主要是添加预处理宏:

“”

配置编译器Cross ARM C Compiler,添加预处理宏。

“”

添加头文件搜索目录。

“”

配置连接器 Cross ARM C Linker,主要是选择连接脚本文件。

“”

3.2、编译工程

选择Project-> Build Project选项来编译整个工程。

“”

3.3、连接目标板

在eclipse中配置openocd,连接目标板。点击External Tools Configurations,双击Program选项。

“”

然后打开终端输入如下命令 which openocd,找可执行文件openocd的路径,然后把路径复制到Location一栏,在Arguments一栏中输入如下配置信息:

-f /usr/share/openocd/scripts/interface/cmsis-dap.cfg
-f /usr/share/openocd/scripts/target/mm32f013x.cfg

其中的mm32f013x.cfg需要根据你的目标板上的MCU不同而会改变。

此配置文件路径是安装openocd通过命令sudo apt install openocd安装的,是系统默认路径。如果用户在此路径中找不到相关文件,那么请自行查找与修改路径。

“”

“”

然后点击Apply,Run后会在窗口出现信息,表示连接成功。

3.4、Debug调试

配置debug环境:点击Debug Configurations选项,双击GDB OpenOCD Debugging在窗口点击Debugger一栏。

“”

分别修改如下三个窗口的内容,第一个为可执行openocd命令所在路径,第二个为openocd连接DAP-Link与目标板的命令,第三个为工具链arm-none-eabi-gdb等所在的路径。

“”

点击Apply,Debug就可以开始调试。

来源:灵动微电子
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 135

在上周的《基于Embedded Studio搭建MM32开发环境》的章节中,我们使用了Ozone这款工具进行调试,今天我们来向大家详细地介绍如何使用Ozone调试MM32 MCU,以及Ozone能给大家带来哪些便利性,体验这款工具的强大之处。

01、Ozone简介

Ozone 是 SEGGER公司开发的一个调试工具,用于J-Link和J-Trace的跨平台调试器和性能分析器,具有所有常见的视图(源代码、内存、控制台/终端、寄存器、反汇编、调用堆栈等等)。

主要特点

- 独立图形调试器
- 调试任何工具链和IDE的输出
- C / C ++源代码级调试和汇编指令调试
- 用于任何目的的调试信息窗口:反汇编,内存,全局和本地,(实时)监视,CPU和外围设备寄存器
- 源代码编辑器可立即修复错误
- 将应用程序高速编程到目标中
- 直接使用J-Link内置功能(无限的Flash断点,Flash下载,实时终端,指令跟踪)
- 可编写脚本的项目文件可自动设置所有内容
- 新项目向导可简化新项目的基本配置
Ozone已支持的编译器:Embedded Studio,GCC,Clang,MDK,IAR。

02、Ozone环境搭建

2.1、软件下载

在SEGGER的官网(https://www.segger.com/)下载最新的Ozone软件。

“”

“”

2.2、软件安装

双击Ozone软件安装包进行安装,完成安装如下图所示,同时会在桌面生成快捷方式。

“”

03、工程创建及调试

Ozone调试的方式有两种:

1、 在集成IDE环境中直接调用Ozone来进行调试。

2、 通过创建Ozone工程来进行调试。

第一种方式可以参照《基于Embedded Studio搭建MM32开发环境》,在这里就不过多的讲解说明,下面对通过创建Ozone工程来进行MCU调试进行讲解说明。

3.1、Ozone工程创建

打开Ozone软件,如下图所示:

“”

点击菜单栏File->New->New Project Wizard..来新建工程。

“”

然后在弹出的New Project Wizard对话框中,Device选项根据芯片的具体型号来选择实际的内核版本,例如此次使用的芯片为MM2F013x,为Cortex-M0内核,因此在Device选项中选择M0,Register Set对话框中的型号在Device对话框选择完成以后会自动选择,在Peripheral对话框中选择芯片的svd文件(目前为止Ozone安装包中包含的svd很不全面,如果我们使用的芯片的svd文件在Ozone的Periphaeral文件夹中没有包含,我们可以到MDK-Keil的安装路径下面找到PACK文件夹,并在此文件夹中找到相应芯片的svd文件,并拷贝到Ozone安装路径下面的Peripheral文件夹中即可,然后并选择芯片的svd文件)。

“”

然后点击Next选项进入到Connection Settings选项卡来选择调试接口以及通讯速率。MM32F013x支持SWD接口,因此我们在Target Interface按钮中选择SWD接口,并在Target Interface Speed选项中选择通讯速率为4MHz。

“”

点击Next选项,然后进入到Program File选项卡来选择需要Debug的.elf文件。

“”

后面的配置选择默认即可。

3.2、下载并进行调试

选择Debug选项卡的Download & Reset Program选项来下载程序到MCU并进入到调试界面,用户可以在View选项卡中选择各种窗口来帮助调试。

“”

3.2.1 Memory窗口

Ozone可以直接通过在寄存器或者变量窗口直接右键Show Data就可以看到变量甚至寄存器的Memory状态。

“”

“”

在Memory中用户可以选择保存指定地址区间的数据。

“”

“”

3.2.2 Watch窗口

用户可以在View选项卡中选择Watch Data选项中的New Watch Data Window来调出Watch窗口显示变量的数值。

“”

“”

当用户需要查看某一个变量的数值的时候,直接选中此变量然后右击弹出相关的选项卡,然后选择Watch选项来将变量添加到Watch Data窗口。

“”

3.2.3 Disassembly窗口

用户可以在View选项卡中选择Disassembly选项来显示汇编窗口,熟悉汇编的用户可以在此窗口中查看汇编指令,指令跟踪显示已执行的指令,并且与源代码视图同步。

“”

3.2.4 Registers窗口

用户可以在View选项卡中选择Registers选项来查看寄存的数据,其中CPU为内核相关的寄存器,Peripheral为外设相关的寄存器。

“”

如果用户在创建工程的时候没有选择svd文件,那么在进行调试的时候将无法查看外设寄存的数据。

3.2.5 Source File窗口

用户可以在View选项卡中选择Source File选项来查看相关的源文件,包含被编译的c文件、头文件,其中有程序大小,指令数,位置和状态(编译、包含、外部调用)。

“”

3.2.6 Data Sampling窗口

选择Data Sampling选项来定时查看某一个变量的数据变化情况。如下图所示,Index为打印的序号,Times为打印的时间戳,sTimingDelay为变量名称。

“”

使用Timeline来查看变量的变化曲线:

“”

3.2.7 断点

用户可以在IDE中间源文件的左侧添加断点,并同步到Break & Tracepoints窗口,在Break & Tracepoints窗口展示了断点的数量,断点所在的文件以及所在的行等基本信息。

“”

视图可以移动和放在彼此以具有“标签”视图,可以将视图移出主窗口,例如放置在单独的监视器显示器上。

3.2.8 调用窗口

可以直观的看到编译后工程之间的函数调用关系,和调用深度等相关内容。这是一个静态的程序图框,用于描述函数、子函数之间的相互引用关系以及所占用的堆栈量、代码总量、调用深度等有点类似于keil中的htm(Obj过程文件中)文件的描述。

“”

3.2.9 脚本

Ozone有一个很好的脚本引擎,几乎一切都是可脚本的:

“”

实际上Ozone项目文件是用脚本语言编写的C文件,这样我可以很容易地更改调试环境,在脚本中我们只需要按照Ozone的Console的命令格式来编写脚本命令即可,比如我们需要打开Global Data窗口,在Console窗口输入命令Window.Show ("Global Data");即可调出Global Data窗口,如果关闭此窗口输入Window.Close ("Global Data");即可。

“”

来源:灵动微电子
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 498

mbedded Studio是用于嵌入式系统的多合一集成开发环境(IDE),用于管理,构建,测试和部署嵌入式应用程序。Embedded Studio还提供了功能强大的项目管理器和源代码编辑器,以及随附的C / C ++编译器和具有高级调试信息窗口的集成调试器,还提供用于自动部署应用程序的直接J-Link集成和版本控制功能,项目生成器支持常见的微控制器。

主要特点

  • 免费用于非商业用途,例如教育和评估目的,没有任何限制
  • 跨平台:可在Windows,macOS和Linux上运行
  • 多线程构建可最大程度地减少构建时间
  • 高度优化的运行时库,可实现最佳性能和最小代码量
  • 具有无缝J-Link集成的功能丰富的调试器
  • 强大的项目管理,能够处理非常大的项目
  • 基于软件包的项目生成器,适用于所有常见的微控制器
  • IAR,MDK(AC5),MDK(AC6)和Eclipse创建的工程都可以转换成到 Embedded Studio平台使用
  • 适用于嵌入式C / C ++编程的专业IDE解决方案,包括Clang / LLVM&GCC&SEGGER C / C ++工具链

MM32系列MCU也是早期就得到SEGGER官方支持的MCU厂商之一,因此MM32系列MCU也可以完美在Embedded Studio平台进行开发、调试,今天我们将介绍在Embedded Studio平台开发、调试MM32 MCU。

环境搭建

01、 软件下载

登录SEGGER的官网下载最新的Embedded Studio软件(https://www.segger.com/)。

根据电脑的不同版本选择不同版本的软件进行下载,由于本次教程使用的电脑是win10、64位的,因此选择64位win10版本的软件进行下载。

02、软件安装

软件安装可以一直Next,基本上选择默认的配置即可,操作比较简单。

“”

完成以后,双击打开Embedded Studio IDE,会弹出一个预警对话框,我们直接点击CONTINUE按钮跳过即可,然后会进入到系统默认的工程页面,则说明我们的环境配置成功。

“”

03、安装PACK

打开Embedded Studio上位机软件,打开选项卡Tools->Package Manager进入pack管理选项卡。

“”

在SearchPackages搜索框中输入MM32查找pack包进行安装,pack根据自己的工程需求来进行安装即可(MM32最新系列的MCU的pack正在得到SEGGER支持过程中,用户也可以选择相同的型号pack)。

点击我们选中的pack包我们就会看到IDE弹出Next按钮。

“”

点击Next按钮进入下载安装选项卡。

04、查看安装完成的pack包

点击Display Installed选项卡就会弹出已经安装完成的pack包,并可以查看已经安装完成pack包的相关信息。

“”

IAR,MDK(AC5),MDK(AC6)和Eclipse创建的工程都可以转换成到Embedded Studio平台使用,也可以基于Embedded Studio平台创建新的工程,本章将实验两种方式创建MM32F013X工程环境流程。

Embedded Studio创建MM32工程

具体的操作如下:

01、新建工程

选择File->New Project选项卡。

“”

选择MM32的芯片型号。

“”

并配置工程名,将默认的工程名修改为MM32。

“”

选择相关的工程配置,点击Target Processor来选择芯片的具体型号。

“”

02、加载文件

“”

移植MM32F013x的库到我们的工程,首先我们从MM32官网下载最新的MM32F013x的SDK包到我们的电脑并解压缩。

“”

并将Device下面的HAL_lib复制到我们的工程下面,并在工程中新建一个文件夹并将HAL_lib中的文件添加到工程。具体的操作如下:

“”

“”

并将MM32F013x工程中的IOtoggle的main.c替换工程中的main.c文件。

“”

添加led的驱动文件到工程中:在工程中新建BSP文件夹并将IOtoggle文件夹下面的HARDWARE文件夹下面的LED.c复制到BSP文件夹下面,并添加到工程中。

“”

工程中添加SYSTEM文件夹并添加文件,具体的操作就是将IOtoggle文件夹下面的SYSTEM文件夹复制到我们的工程中,并添加到工程项目中,具体的操作如下:

“”

在SYSTEM文件夹下面新建一个inc文件夹,并将从官方库SYSTEM移植过来的.h文件放在此文件夹下面。

“”

“”

添加.C文件到工程中。

“”

添加MM32F013x的库的头文件,具体的操作如下:

将Device文件夹下面CMSIS文件夹中的文件复制到工程文件夹下面的CMSIS_5->CMSIS文件夹下面的Include文件夹下面。

“”

03、添加路径

右击Project->Options。

“”

在Code目录下的Preprocessor中点击User Include Directories选中添加路径即可。

“”

04、 编译

“”

我们会发现很多的错误,在delay.c \ uart.c中都需要添加#include "HAL_conf.h"头文件,并在uart中屏蔽掉FILE __stdout这行代码。

出现Build complete则说明我们的文件编译成功了,接下来进行验证,我们将代码下载进我们的板子测试OK,说明我们工程搭建成功。

在debug的时候我们既可以选择软件自带的调试方式也可以选择Ozone进行调试。

将KEIL工程导入Embedded Studio编译器

01、导入MDK工程

将KEIL工程导入到SEGGER Embedded Studio编译器去编译文件具体的操作如下:

选择File->Import Project选项卡来添加MDK工程,并选择导入mdk工程类型,目前支持的类型有MDK、MDK-ARM6、IAR、GCC。

“”

选择MDK工程文件。

“”

选择内核型号:

“”

选择编译配置,则选择外部编译工具。

“”

“”

到此我们就可以看到我们文件导入成功了。

02、编译

“”

出现Build complete则说明我们的文件编译成功了。

03、下载调试

选择Debug->Debug with Ozone选项卡来进入Debug模式。

“”

下载并开始调试:

“”

今天主要讲解Embedded Studio的环境搭建及新建MM32F013x工程文件,在后续的教程中将继续讲解基于MM32F013x使用SEGGER相关工具的方法。

来源:灵动微电子
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 227

前面一章节介绍了在Windows下搭建Eclipse开发环境,本章节将介绍在Windows环境下基于Eclipse开发、调试MM32。

01、GCC创建工程

打开File->New->Project,选择C Project,然后点击NEXT,在Project name选项框中设置GCC工程的名字,在Project type选项框中选择Empty Project,在toolchains中选择Cross ARM GCC。

“图1"
图1

“图2"
图2

“图3"
图3

“图4"
图4

“图5"
图5

在Cross GNU ARM Toolchain界面用户需要选择GNU Tools for ARM Embedded Processors (arm-none-eabi-gcc)作为A工程的编译工具,并选择编译工具的路径。后面点击Finish按钮,至此工程模板的创建已经完成。

02、添加MM32相关库函数

在上面的模板中添加与MM32F013x相关的文件:Source文件夹中存放的为F013x的相关代码,在Source文件夹中Device文件夹中存放的是MM32F013x的Library以及启动文件。BSP文件夹中存放的为外设相关的驱动文件, SYS文件夹下面存放的为芯片UART,Delay的配置文件。APP中存放main.c文件。

“图6"
图6

“”

“
图7

在添加所要操作的文件以后,为了防止文件没有加载出来,需要刷新一下(直接按快捷键F5刷新工程)。

“图8"
图8

03、工程配置

在GCC中添加以上文件的头文件所在的路径,点击在工程浏览器中选中该工程,然后点击project->properties 选择项。

“图9"
图9

“图10"
图10

设置需要打开的宏定义:

“图11"
图11

给工程添加flash.ld文件。

“图12"
图12

如果在我们的工程中有lib文件,比如MM32的W系列使用eclipse编程的时候据需要向工程中添加lib库文件,在进行lib文件添加的时候要注意lib文件的格式,例如:蓝牙的lib文件为libmg_BLE-gcc.a,lib为lib文件前缀.a为文件的类型,添加名字的时候直接添加为mg_BLE-gcc即可。

“图13"
图13

04、编译工程

选择CDT编译。

“图14"
图14

然后选择Build Project进行工程的编译,看到有hex文件生成并且无错误、无警告,则说明我们的工程编译成功。

“图15"
图15

05、DEBUG配置

编译完成后, 我们就要进行下载和调试了,首先进行调试的配置。

“图16"
图16

在GDB SEGGER J-LINK Debugging上面双击创建debug工程,新建了一个选项卡,设置 debug 的名称,调试的工程和源文件。

“图17"
图17

选择相关的工程以及对应的elf文件。

“图18"
图18

由于debug依靠的GDB框架,所以选择JLinkGDBServerCL.exe来进行调试。

“图19"
图19

“图20"
图20

到此我们的GCC的debug已经配置完成了,打开Debug->MM32TEST DEBUG进入debug界面。点击 Debug 开始调试,我们就可以看到我们的软件进入了调试模式,并且停留在了main 函数的第一个有效行上面,点击RUN。

“图21"
图21

调试界面基本都是一样的,watch窗口也能调出来设置断点、全速运行等功能。

如果想结束调试,只需要点击上方的红色方块即可,此时 Jlink 的 GDB 会自动关闭,然后点击右侧的 C/C++选项卡即可回到工程的编辑视图了,到此debug配置验证完成。

本次实验参考代码:

https://github.com/Samplecode-MM32/MM32MCU_Code

来源:灵动微电子

围观 110

2020年的世界格局使得半导体电子行业受到疫情、中美贸易等外部环境等的影响深远、意义重大。虽然中国整体市场回暖,但处于产业核心竞争力的汽车电子主控芯片,仍然受到国外半导体公司的极大制衡,并随着近期的美国极端天气、日本地震及工厂失火等天灾人祸的影响,车规主控芯片的供应日益趋紧。

从下图可以看到,汽车电子市场在中国的发展迅猛,每年以17%的速度增长。但是汽车芯片的研发难度高、周期长,国产汽车芯片在短期内快速补足国外厂商的可能性并不大。随着新能源汽车的推广和全球“缺芯”形势的蔓延,此番缺“芯”让汽车全产业链意识到国产汽车芯片的重要性,国产芯片加速获得了验证和进入的机会。

“”

作为国内领先的 32位 Arm Cortex-M 的微控制器芯片和解决方案提供商,灵动微电子的MM32产品系列在经历了多年的发展和升级后,已被广泛使用在车体的次系统上,作为原先8位MCU的替代升级之用。

在过去几年,MM32系列MCU在这些应用的累计出货已经接近3000万颗,其中在OBD应用超过1000万颗,在两轮电动车电机应用超过1000万颗,在系统控制协处理器应用超过500万颗。

这些产品系列包括:

基于Arm Cortex-M0 的MM32F0010和MM32F003超值型MCU,主要用于车窗控制器、倒车雷达模块、转向灯和尾灯控制

内置CAN 控制器的MM32F0130、MM32L07x以及内置BLE功能的MM32W07x系列,用于汽车诊断设备 OBD或无线OBD

面向电机应用的MM32SPIN系列,如MM32SPIN25、MM32SPIN360等,用于汽车风机与水泵控制,以及电动车电机控制

基于高性能Arm Cortex-M3 内核的MM32F3270、MM32F103系列,用于彩显仪表盘,智能汽车充电桩系统主控,以及电动车控制系统的协处理器

“”

汽车电子MCU的应用场景

在汽车应用中,微控制器(MCU)提供着至关重要的性能。随着价格的降低及整体控制系统和计算系统在汽车电子中占比的增加,MCU也逐渐走向多样化。微控制器被广泛使用在从电机控制,车身控制到信息娱乐系统等越来越多的汽车子应用中,对于选择的不同MCU来说,仍存在很大的差异。因此,如何选择合适的MCU以降低成本而不影响所需的性能,甚至提高性价比变得尤为重要。车载MCU的市场主要集中在8、16和32位的微控器,可按汽车电子产品的不同需求用于不同性能的场景:

32位MCU主要应用包括仪表板控制、车身控制、多媒体信息系统、引擎控制,以及新兴的智能性和实时性的安全系统及动力系统,如ADAS、驾驶辅助系统、电子稳定程序等安全功能,以及复杂的传动功能或域控制。

16位MCU主要应用为动力传动系统,如引擎控制、齿轮与离合器控制,以及电子式涡轮系统等,也适合用于底盘机构上,如悬吊系统、电子式动力方向盘、扭力分散控制,电子刹车等。

8位MCU主要应用于车体的各个次系统,包括风扇控制、空调控制、雨刷、天窗、车窗升降、低阶仪表板、集线盒、座椅控制、门控模块等较低阶的控制功能,近年来不断被32位MCU替代。

随着新型域控制器架构在汽车电子行业的逐渐使用,灵动微电子也致力于在全新MM32 MCU平台上打造高性能产品。在优化处理性能、提高品质、降低成本等方面的基础上,与国内更多传感器和模拟器件合作伙伴一起,群策群力,通过全产业链的协作,为化解汽车芯片产业面临的问题做出努力。

“”

关于灵动

灵动成立于2011年,是中国本土领先的通用32位MCU产品及解决方案供应商。公司基于Arm Cortex-M系列内核开发的MM32 MCU产品拥有F/L/SPIN/W四大系列,200多个型号,累计交付超2亿颗,在本土通用32位MCU公司中位居前列。MM32 MCU被广泛应用于智能工业、汽车电子、通信基建、医疗健康、智慧家电、物联网、个人设备、手机与电脑等领域,每年都有数千万件配备了灵动MM32 MCU的优秀产品交付到客户手中。

“”

迄今为止,灵动是同时获得了 Arm-KEIL、IAR、SEGGER 等开发工具官方支持的本土 MCU 公司,是为数不多的建立了独立、完善的生态体系的通用MCU公司,致力于为客户提供从芯片硬件到软件算法、从参考方案到系统设计的全方位支持,真正为中国电子信息产业提供底层技术驱动和支持。

围观 73

页面

订阅 RSS - MM32