MindSDK

引言

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

样例工程

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

  • adc_basic

  • adc_interrupt

  • adc_dma

  • adc_seq

  • adc_fixed_seq

  • adc_ext_seq

  • adc_awdg

  • adc_oversample

  • adc_sw_write_calib

其中, adc_baic 、 adc_interrupt 、 adc_dma 分别演示了ADC最典型的功能,包括通过轮询、中断、DMA来获取一个ADC转换通道的转换结果。adc_awdg 来展现ADC模拟看门狗的功能, adc_seq 、 adc_fixed_seq 、 adc_ext_seq 则展现ADC按照不同的转换序列来进行转换。还有一些用于特殊场景的功能,例如通过软件写入校准值,以及硬件实现的多次采样取平均值、基本滤波等。

adc_basic

adc_basic 描述了使用ADC模块最基本的方式,通过轮询方式对一个通道进行转换,并获取通道的转换值。在样例工程中,通过 ADC_Init() 函数,配置ADC数据有效数据位 ADC_Resolution_Alt0 ,ADC的转换模式为单通道单次转换模式 ADC_ConvMode_SingleSlot 、转换数据对其方式为右对齐 ADC_Align_Right 、通道转化结果通过单端转换方式,将通道与ADC内部参考电压VREF的差数字量化后输出 ADC_SingleDiffConvMode_SingleEnd 、配置单端转换方式的参考电压为内部参考电压 ADC_SingleConvVref_Internal ,配置待转换通道的序列和每个转换通道的采样周期。之后,每次通过 ADC_DoSwTrigger() 函数,使用软件触发的方式启动ADC转换。

实际运行程序时,用户在串口调试终端中每次输入任意字符,改变转换通道的输入电压,会看到串口终端界面对应数值的变化。

adc_interrupt

adc_interrupt 相对于 adc_basic 样例工程,实现了ADC转换完成后触发中断服务,在中断服务中获取转换值的用法。

其实现原理,是在 adc_basic 的配置的基础上,通过 ADC_EnableInterrupts() 函数和 NVIC_EnableIRQ()函数 开启ADC的中断。当ADC转换通道完成转换后,就进入中断服务函数。

实际运行程序时,用户在串口调试终端每次输入任意字符,改变转换通道的输入电压,会看到串口终端界面对应数值的变化。

adc_dma

adc_dma 在 adc_basic 的基础上增加对DMA外设模块的使用。在应用层 app_adc_init() 函数中添加对DMA通道的配置,通过 DMA_InitChannel() 函数, DMA_XferMode_PeriphToMemory 配置传输方向为外设到内存、 MemAddr 和 PeriphAddr 配置内存和外设地址、 MemAddrIncMode 和 PeriphAddrIncMode 配置内存和外设的增量模式、 XferCount 传输的数据量、 DMA_ReloadMode_AutoReloadContinuous 自动重载传输量、 DMA_XferWidth_32b 以32位的数据进行传输。外设映射的DMA通道初始配置完成后,通过 DMA_EnableChannel() 函数使能DMA通道,通过 NVIC_EnableIRQ() 和 DMA_EnableChannelInterrupts() 函数开启DMA中断。之后,每次通过 ADC_DoSwTrigger() 函数触发ADC开始转换,当转换完成后DMA开始搬运,当DMA搬运完成后进入中断服务函数,以此循环往复。

实际运行程序时,用户在串口调试终端中每次输入任意字符,改变转换通道的输入电压,会看到串口终端界面对应数值的变化。

adc_fixed_seq

adc_fixed_seq 在 adc_dma 样例的基础上,将转换的ADC通道由一个通道,设置为多个通道形成一个序列来进行转换,当序列转换完成后,就停止转换。通过 ADC_EnableSeqSlotFixed() 函数来配置转换序列的顺序为有低到高的顺序进行转换。DMA将ADC每个通道数据搬运到指定内存。通过在循环中调用 ADC_DoSwTrigger() 函数来进行一个序列的多次转换。或者通过 ADC_ConvMode_SeqContinues 启用序列的连续转换模式。通过 ADC_DoSwTrigger() 函数可以停止序列转换。

实际运行程序时,用户在串口调试终端中每次输入任意字符,改变配置的转换序列中每个通道的输入电压值,会看到串口调试终端界面对应数值变化。

adc_seq

adc_seq 与 adc_fixed_seq 样例的不同之处在于, adc_fixed_seq 样例只能实现一个由高到低或者由低到的通道转换序列进行转换,例如ch0-ch1-ch3或者ch3-ch1-ch0的转换顺序。adc_seq 样例则实现任意通道序列的转换,例如ch3-ch0-ch5,任意的序列。通过ADC_EnableSeqSlot () 函数配置具体的转换序列。ADC根据配置的转换序列开始进行转换。当序列转换完成后,停止转换。可以重复的调用 ADC_DoSwTrigger() 开启下一个序列的转换,一次循环往复。或者通过 ADC_ConvMode_SeqContinues 启用序列的连续转换模式。通过 ADC_DoSwTrigger() 函数可以停止序列转换。

实际运行程序时,用户在串口调试终端中每次输入任意字符,改变转换通道的输入电压,会看到串口终端界面对应数值的变化。

adc_ext_seq

adc_ext_seq 实现在当前任意序列转换过程中插入额外的序列,当插入额外的序列时,当前任意序列中正在转换的通道完成,将切换到插入的序列中进行转换,当转换完成后在继续之前任意序列中剩余通道的转换。通过 ADC_EnableExtSeqSlot() 函数配置额外的序列。例如当前任意序列为ch3-ch0-ch5,额外的序列为ch1-ch4。ADC_EnableAutoExtSeqSlot() 函数开启自动注入模式,即任意序列转换完成后,开启注入通道的转换,转换额外的序列。这种注入模式增加了整个序列的长度。当一个完整序列转换完成后,停止转换,调用 ADC_DoSwTrigger() 函数来进行一个序列的多次转换。或者通过 ADC_ConvMode_SeqContinues 启用序列的连续转换模式。通过 ADC_DoSwTrigger() 函数可以停止序列转换。

实际运行时,用户在串口调试终端中每次输入任意字符,改变转换通道的输入电压,会看到串口终端界面对应数值的变化。

adc_awdg

adc_awdg 在 adc_basic 的基础上增加对转换结果进行监控,通过 ADC_EnableHwComp() 函数配置需要监控的转换通道 ChnNum 、设置的上限值 HighLimit 和下限值 LowLimit ,可以根据上限值和下限值的大小关系设置监控范围,当上限值大于或等于下限值时,监控通道的转换值在两个阈值之外的数值,若开启中断则会进入中断服务函数;同理,当上限值小于下限值时,监控通道转换值在两个阈值之间的数值,若开启中断则会进入中断服务函数。之后,每次通过 ADC_DoSwTrigger() 函数,使用软件触发的方式启动ADC转换。

实际运行时,用户在串口调试终端中每次输入任意字符,改变转换通道的输入电压,当电压值满足监控区间时,会看到串口终端界面当前转换数据。

adc_oversample

adc_oversample 在 adc_seq 的基础上通过 ADC_SetOverSample()`函数启动硬件的过采样模式, ADC_OverSampleRatio_256 配置过采样率为256, ADC_OverSampleDataDiv_8 配置数据右移8位, ADC_OverSampleTriggerMode_Multi 配置为所有通道的过采样转换只需要进行一次触发。injectOverSampleMode 配置是否开启注入通道的过采样模式。之后,每次通过 ADC_DoSwTrigger() 函数,使用软件触发的方式启动ADC转换。

adc_sw_write_calib

adc_sw_write_calib 在 adc_basic 的基础上实现使用软件保存ADC的校准值,然后通过软件将校准值写入寄存器中。通过 ADC_GetCalibFactor() 函数获取校准值,通过 ADC_SetCalibFactor() 来写入校准值。

来源:灵动MM32MCU

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

围观 22

引言

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

引言

Keil或者IAR为嵌入式开发者提供了非常方便的可视化开发环境,但Keil或者IAR是商业软件,需要购买并注册License才能正常使用(Arm提供的社区版License可以供用户免费使用1年)。另外,仍有用户希望使用命令行的方式编译微控制器工程,这些用户可能来自于Linux用户,也可能是某些定制工具开发包的用户,或者搭建自动化持续集成平台的系统维护工程师。此时,搭建开源的 armgcc 工具集,也是微控制器开发者常用的编译工具解决方案。命令行方式使用的工具,在Linux操作系统中较为常用,但在Windows操作系统中,可以基于 MSYS2 作为模拟命令行工作环境的虚拟终端,配合 armgcc 工具集,搭建微控制器开发环境。

本文讲述基于Windows操作系统,搭建 armgcc 编译环境,并支持编译MindSDK样例工程。

安装 MSYS2 环境

MSYS2 是一系列软件工具和软件库,可用于在Windows操作系统上模拟类似于Linux操作系统的命令行运行环境,并且可以使用部分Linux操作系统的部分命令,用以方便地构建、安装和运行本地的应用程序。

在 MSYS2 的官网(http://www.msys2.org/)上,可下载当前最新的安装包。如图1所示。

1.png

图1 在MSYS2官网下载MSYS2安装包

如图1所示,下载 msys-x86_64-20220904.exe 安装文件后,即可启动安装过程。安装完成后,启动 MSYS2 程序,可以看到MSYS2的命令行交互终端界面,如图2所示。

2.png

图2 运行MSYS的终端界面

安装完之后,可在 MSYS2 环境的终端下,试用Linux下的文件夹查看命令 ls 和显示工作目录命令 pwd,确认 MSYS2 环境可以正常工作。

MindMotion@DESKTOP-MCR7G5A MSYS ~
$ ls
MindMotion@DESKTOP-MCR7G5A MSYS ~
$ pwd
/home/MindMotion

在 MSYS2 环境中安装工具

这里使用 make 作为基本的构建系统工具,但为了便于用户编写构建工程文件 makefile ,选用 cmake 作为创建 makefile 文件的工具。MSYS2 环境中的的包管理器已经提供了可用的 make 和 cmake 工具,可用于安装。

在 MSYS2 环境中安装 make 工具

使用 pacman -Ss 命令,在 MSYS2 中查找可用的 make 工具的安装包:

MindMotion@DESKTOP-MCR7G5A MSYS ~
$ pacman -Ss make
...
msys/make 4.3-3 (base-devel)
    GNU make utility to maintain groups of programs
...

使用 pacman -S 命令,在 MSYS2 环境中安装 make 工具:

MindMotion@DESKTOP-MCR7G5A MSYS ~
$ pacman -S msys/make
resolving dependencies...
looking for conflicting packages...

Packages (1) make-4.3-3

Total Download Size:   0.46 MiB
Total Installed Size:  1.48 MiB

:: Proceed with installation? [Y/n] Y
:: Retrieving packages...
 make-4.3-3-x86_64               466.2 KiB   538 KiB/s 00:01 [###############################] 100%
(1/1) checking keys in keyring                               [###############################] 100%
(1/1) checking package integrity                             [###############################] 100%
(1/1) loading package files                                  [###############################] 100%
(1/1) checking for file conflicts                            [###############################] 100%
(1/1) checking available disk space                          [###############################] 100%
:: Processing package changes...
(1/1) installing make                                        [###############################] 100%
:: Running post-transaction hooks...
(1/1) Updating the info directory file...

运行命令查看版本号,可以确认 make 工具已经安装完成,可以正常使用。

MindMotion@DESKTOP-MCR7G5A MSYS ~
$ make --version
GNU Make 4.3
Built for x86_64-pc-msys
Copyright (C) 1988-2020 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

在 MSYS2 中安装 CMake 工具

使用 pacman -Ss 命令,在 MSYS2 环境中查找 cmake 工具的安装包。

MindMotion@DESKTOP-MCR7G5A MSYS ~
$ pacman -Ss cmake
...
msys/cmake 3.21.0-1
    A cross-platform open-source make system
...

使用 pacman -S 命令,在 MSYS2 环境中安装 cmake 工具

MindMotion@DESKTOP-MCR7G5A MSYS ~
$ pacman -S msys/cmake
resolving dependencies...
looking for conflicting packages...

Packages (6) jsoncpp-1.9.5-1  libarchive-3.6.1-2  librhash-1.4.2-1  libuv-1.42.0-1  pkgconf-1.8.0-1
             cmake-3.23.2-1

Total Download Size:    7.80 MiB
Total Installed Size:  41.22 MiB

:: Proceed with installation? [Y/n] Y
:: Retrieving packages...
 jsoncpp-1.9.5-1-any             101.2 KiB   116 KiB/s 00:01 [###############################] 100%
 libuv-1.42.0-1-x86_64           113.1 KiB  79.1 KiB/s 00:01 [###############################] 100%
 pkgconf-1.8.0-1-x86_64           58.4 KiB  83.0 KiB/s 00:01 [###############################] 100%
 librhash-1.4.2-1-x86_64         116.5 KiB  47.8 KiB/s 00:02 [###############################] 100%
 libarchive-3.6.1-2-x86_64      1138.4 KiB   353 KiB/s 00:03 [###############################] 100%
 cmake-3.23.2-1-x86_64             6.3 MiB  1738 KiB/s 00:04 [###############################] 100%
 Total (6/6)                       7.8 MiB  1965 KiB/s 00:04 [###############################] 100%
(6/6) checking keys in keyring                               [###############################] 100%
(6/6) checking package integrity                             [###############################] 100%
(6/6) loading package files                                  [###############################] 100%
(6/6) checking for file conflicts                            [###############################] 100%
(6/6) checking available disk space                          [###############################] 100%
:: Processing package changes...
(1/6) installing jsoncpp                                     [###############################] 100%
JsonCpp headers and build libraries are now in jsoncpp-devel.
(2/6) installing libarchive                                  [###############################] 100%
(3/6) installing librhash                                    [###############################] 100%
(4/6) installing libuv                                       [###############################] 100%
(5/6) installing pkgconf                                     [###############################] 100%
(6/6) installing cmake                                       [###############################] 100%

尝试查看版本号,可以确认 CMake 工具已经安装完成并可正常使用。

MindMotion@DESKTOP-MCR7G5A MSYS ~
$ cmake --version
cmake version 3.23.2  
  
CMake suite maintained and supported by Kitware (kitware.com/cmake).

 在 MSYS2 环境中安装 armgcc 工具集

MSYS2 的包管理器中也包含了 armgcc 的工具集,可以使用pacman搜索 arm-none-eabi-gcc ,找到对应的软件包。

MindMotion@DESKTOP-MCR7G5A MSYS ~
$ pacman -Ss arm-none-eabi-gcc
mingw32/mingw-w64-i686-arm-none-eabi-gcc 10.1.0-2 (mingw-w64-i686-arm-none-eabi-toolchain)
    GNU Tools for ARM Embedded Processors - GCC (mingw-w64)
mingw64/mingw-w64-x86_64-arm-none-eabi-gcc 10.1.0-2 (mingw-w64-x86_64-arm-none-eabi-toolchain)
    GNU Tools for ARM Embedded Processors - GCC (mingw-w64)

3.png

图3 在SYS2环境中使用pacman检索 armgcc 工具集

但实际上, armgcc 工具集也提供了Windows操作系统下的可执行文件,因此,这里推荐的做法是,直接下载并解压Windows操作系统的 armgcc 工具集的压缩包,然后在 MSYS2 中引用。这个过程展现了另一种在 MSYS2 环境中集成工具软件的方法,但更重要的是,在Windows操作系统中安装的 armgcc 工具集,同时还可以被其它可用的集成开发环境引用,例如VS Code,这样可以避免重复安装同一个软件包,确保在同一台开发主机上编译器行为的一致性。 

在Arm的官网(https://developer.arm.com/downloads/-/gnu-rm)上,可下载Windows操作系统版本对应的 armgcc 编译器工具包。如图4所示。

4.png

图4 在MSYS2官网下载MSYS2安装包

如图4所示页面中,下载 gcc-arm-none-eabi-10.3-2021.10-win32.zip 文件,解压至Windows文件系统的目录中,例如 C:\gcc-arm-none-eabi-xxxx 目录。然后,在MSYS2的安装目录下的etc目录下,例如 C:/msys64/etc ,在其中profile文件末尾处添加对gcc-arm-none-eabi工具集的引用路径。另外,可在MSYS2运行环境中创建 `armgcc`_DIR`环境变量,后续编译MindSDK的`armgcc`工程时,将会使用 `armgcc`_DIR`环境变量检索`armgcc`编译工具集的路径。

...
  echo "###################################################################"
  echo "#                                                                 #"
  echo "#                                                                 #"
  echo "#                   C   A   U   T   I   O   N                     #"
  echo "#                                                                 #"
  echo "#                  This is first start of MSYS2.                  #"
  echo "#       You MUST restart shell to apply necessary actions.        #"
  echo "#                                                                 #"
  echo "#                                                                 #"
  echo "###################################################################"
  echo
  echo
fi
unset MAYBE_FIRST_START
export PATH="/c/gcc-arm-none-eabi-10.3-2021.10/bin:$PATH"
export `armgcc`_DIR="/c/gcc-arm-none-eabi-10.3-2021.10"

保存更改过的文件后,使用 source 命令,激活对 profile 文件的更新,让更新的内容在 MSYS2 环境中生效。

MindMotion@DESKTOP-MCR7G5A MSYS ~
$ source /etc/profile

可查看 PATH 变量的最新值,若添加成功,则可观察到已包含 arm-gcc-none-eabi 的引用路径。

MindMotion@DESKTOP-MCR7G5A MSYS ~
$ echo $PATH
/c/gcc-arm-none-eabi-10.3-2021.10/bin:/usr/local/bin:/usr/bin:/bin:/opt/bin:/c/Windows/System32:/c/Windows:/c/Windows/System32/Wbem:/c/Windows/System32/WindowsPowerShell/v1.0/:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl

可试着查看 arm-gcc-none-eabi 工具的版本号,验证 armgcc 可在 MSYS2 中被正常调用。

MindMotion@DESKTOP-MCR7G5A MSYS ~
$ arm-none-eabi-gcc --version
arm-none-eabi-gcc.exe (GNU Arm Embedded Toolchain 10.3-2021.10) 10.3.1 20210824 (release)
Copyright (C) 2020 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

至此,基于Windows操作系统,在 MSYS2 环境中安装 armgcc 工具链完成。

编译MindSDK样例工程

用户可以在MindSDK的网站上下载适用于 armgcc 工具链创建的工程,即可在 MSYS2 环境中执行编译创建可执行文件。这里以 plus-f5270 开发板上的 hello_world 工程为例。

MindMotion@PF2LD92H MSYS /d/_git_repos/mm32-mcu-sdk/boards/plus-f5270/demo_apps/basic/hello_world/build/armgcc
$ ls
CMakeLists.txt  armgcc.cmake  build.sh  clean.sh

MindMotion@PF2LD92H MSYS /d/_git_repos/mm32-mcu-sdk/boards/plus-f5270/demo_apps/basic/hello_world/build/armgcc
$ ./build.sh
-- TOOLCHAIN_DIR: /usr/gcc-arm-none-eabi-10-2020-q4-major
-- BUILD_TYPE: debug
-- TOOLCHAIN_DIR: /usr/gcc-arm-none-eabi-10-2020-q4-major
-- BUILD_TYPE: debug
-- The C compiler identification is GNU 10.2.1
-- The CXX compiler identification is GNU 10.2.1
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/gcc-arm-none-eabi-10-2020-q4-major/bin/arm-none-eabi-gcc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/gcc-arm-none-eabi-10-2020-q4-major/bin/arm-none-eabi-g++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- The ASM compiler identification is GNU
-- Found assembler: /usr/gcc-arm-none-eabi-10-2020-q4-major/bin/arm-none-eabi-gcc
-- Configuring done
-- Generating done
-- Build files have been written to: /d/_git_repos/mm32-mcu-sdk/boards/plus-f5270/demo_apps/basic/hello_world/build/armgcc
Scanning dependencies of target my_project.elf
[  2%] Building C object CMakeFiles/my_project.elf.dir/d/_git_repos/mm32-mcu-sdk/applications/demo_apps/basic/hello_world/main.c.obj
[  5%] Building C object CMakeFiles/my_project.elf.dir/d/_git_repos/mm32-mcu-sdk/boards/plus-f5270/demo_apps/basic/hello_world/board_init.c.obj
[  8%] Building C object CMakeFiles/my_project.elf.dir/d/_git_repos/mm32-mcu-sdk/boards/plus-f5270/demo_apps/basic/hello_world/clock_init.c.obj
[ 11%] Building C object CMakeFiles/my_project.elf.dir/d/_git_repos/mm32-mcu-sdk/boards/plus-f5270/demo_apps/basic/hello_world/pin_init.c.obj
[ 14%] Building C object CMakeFiles/my_project.elf.dir/d/_git_repos/mm32-mcu-sdk/devices/MM32F5277E/drivers/hal_power.c.obj
[ 17%] Building C object CMakeFiles/my_project.elf.dir/d/_git_repos/mm32-mcu-sdk/devices/MM32F5277E/drivers/hal_pwr.c.obj
[ 20%] Building C object CMakeFiles/my_project.elf.dir/d/_git_repos/mm32-mcu-sdk/devices/MM32F5277E/drivers/hal_rcc.c.obj
[ 23%] Building C object CMakeFiles/my_project.elf.dir/d/_git_repos/mm32-mcu-sdk/devices/MM32F5277E/drivers/hal_syscfg.c.obj
[ 26%] Building C object CMakeFiles/my_project.elf.dir/d/_git_repos/mm32-mcu-sdk/drivers/adc_1/hal_adc.c.obj
[ 29%] Building C object CMakeFiles/my_project.elf.dir/d/_git_repos/mm32-mcu-sdk/drivers/comp_1/hal_comp.c.obj
[ 32%] Building C object CMakeFiles/my_project.elf.dir/d/_git_repos/mm32-mcu-sdk/drivers/cordic_0/hal_cordic.c.obj
[ 35%] Building C object CMakeFiles/my_project.elf.dir/d/_git_repos/mm32-mcu-sdk/drivers/crc_0/hal_crc.c.obj
[ 38%] Building C object CMakeFiles/my_project.elf.dir/d/_git_repos/mm32-mcu-sdk/drivers/dac_1/hal_dac.c.obj
[ 41%] Building C object CMakeFiles/my_project.elf.dir/d/_git_repos/mm32-mcu-sdk/drivers/dma_1/hal_dma.c.obj
[ 44%] Building C object CMakeFiles/my_project.elf.dir/d/_git_repos/mm32-mcu-sdk/drivers/exti_0/hal_exti.c.obj
[ 47%] Building C object CMakeFiles/my_project.elf.dir/d/_git_repos/mm32-mcu-sdk/drivers/flexcan_0/hal_flexcan.c.obj
[ 50%] Building C object CMakeFiles/my_project.elf.dir/d/_git_repos/mm32-mcu-sdk/drivers/fsmc_0/hal_fsmc.c.obj
[ 52%] Building C object CMakeFiles/my_project.elf.dir/d/_git_repos/mm32-mcu-sdk/drivers/gpio_0/hal_gpio.c.obj
[ 55%] Building C object CMakeFiles/my_project.elf.dir/d/_git_repos/mm32-mcu-sdk/drivers/i2c_0/hal_i2c.c.obj
[ 58%] Building C object CMakeFiles/my_project.elf.dir/d/_git_repos/mm32-mcu-sdk/drivers/i2s_0/hal_i2s.c.obj
[ 61%] Building C object CMakeFiles/my_project.elf.dir/d/_git_repos/mm32-mcu-sdk/drivers/iwdg_0/hal_iwdg.c.obj
[ 64%] Building C object CMakeFiles/my_project.elf.dir/d/_git_repos/mm32-mcu-sdk/drivers/lptim_0/hal_lptim.c.obj
[ 67%] Building C object CMakeFiles/my_project.elf.dir/d/_git_repos/mm32-mcu-sdk/drivers/lpuart_0/hal_lpuart.c.obj
[ 70%] Building C object CMakeFiles/my_project.elf.dir/d/_git_repos/mm32-mcu-sdk/drivers/mds_0/hal_mds.c.obj
[ 73%] Building C object CMakeFiles/my_project.elf.dir/d/_git_repos/mm32-mcu-sdk/drivers/rtc_0/hal_rtc.c.obj
[ 76%] Building C object CMakeFiles/my_project.elf.dir/d/_git_repos/mm32-mcu-sdk/drivers/qspi_0/hal_qspi.c.obj
[ 79%] Building C object CMakeFiles/my_project.elf.dir/d/_git_repos/mm32-mcu-sdk/drivers/spi_0/hal_spi.c.obj
[ 82%] Building C object CMakeFiles/my_project.elf.dir/d/_git_repos/mm32-mcu-sdk/drivers/tim_1/hal_tim.c.obj
[ 85%] Building C object CMakeFiles/my_project.elf.dir/d/_git_repos/mm32-mcu-sdk/drivers/uart_0/hal_uart.c.obj
[ 88%] Building C object CMakeFiles/my_project.elf.dir/d/_git_repos/mm32-mcu-sdk/drivers/usb_0/hal_usb.c.obj
[ 91%] Building C object CMakeFiles/my_project.elf.dir/d/_git_repos/mm32-mcu-sdk/drivers/wwdg_0/hal_wwdg.c.obj
[ 94%] Building C object CMakeFiles/my_project.elf.dir/d/_git_repos/mm32-mcu-sdk/devices/MM32F5277E/system_mm32f5277e.c.obj
[ 97%] Building ASM object CMakeFiles/my_project.elf.dir/d/_git_repos/mm32-mcu-sdk/devices/MM32F5277E/armgcc/startup_mm32f5277e.S.obj
[100%] Linking C executable debug/my_project.elf
[100%] Built target my_project.elf

编译成功,创建了 my_project.elf 文件。

来源:灵动MM32MCU

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

围观 182

MindSDK是由灵动官方的软件与系统工程团队(Software & System Engineering Team)开发和维护的基于灵动微控制器的软件开发平台。

  • MindSDK包含灵动微控制器所必须的芯片头文件、启动程序、链接命令脚本等源码,以及灵动微控制器外设模块的驱动程序源码,以及大量便于用户使用的软件组件源码和开发工具。

  • MindSDK提供了丰富的样例工程和综合演示工程,便于用户在具体的应用场景中了解驱动程序和软件组件的API的用法,并且可以直接在MindSDK支持的硬件开发板上运行,演示实际的工作情况。

  • MindSDK在灵动主流的微控制器系列间实现了跨平台兼容,同一份样例工程,可以在不同平台之间无缝移植,方便用户在产品选型阶段快速完成评估,选择合适的微控制器。

1.png

在MindSDK的站点:

https://mindsdk.mindmotion.com.cn/

可以下载到目前已经支持的所有搭载灵动微控制器开发板的代码包。

2.png

release-0.7.1, 2023-03-22

在这版发布中,新增了一些支持的硬件设备,并修复了在开发过程中发现的问题。

  • 新增了对MM32A0140系列微控制器的支持(使用MINI-A0140开发板)。

  • 新增了MINI-F0140和MINI-F0040的开发板的支持。

  • 修复了flexcan_1驱动中FLEXCAN_WriteFdTxMb()驱动函数在之前使用了不合适的状态机,可能在某些特殊情况下发送失败的问题。

  • 在uart_0驱动中为UART_Init()函数添加了 XferSignal和EnableSwapTxRxXferSignal两个配置字段,以支持UART外设模块硬件上交换Tx和Rx信号线的问题。

  • 修复了PLUS-F3270开发板上dma_interrupt样例工程中未启动DMA外设时钟的问题。

  • 修复了POKT-F0040, POKT-F0140, PLUS-F3270开发板上iwdg_0样例工程中使用过小的超时时间而导致复位频繁的问题。

release-0.7.1, 2023-03-22

The release 0.7.1 added more hardware devices. It also fixed some issues.

  • Added the new NPI of MM32A0140 (within MINI-A0140 board).

  • Added the new boards of MINI-F0140 & MINI-F0040.

  • Fixed flexcan_1 driver of FLEXCAN_WriteFdTxMb() API issue that using incorrect statement for MB[CODE] register field.

  • Improved the uart driver by adding the new configuration fields of XferSignal and EnableSwapTxRxXferSignal in the API of UART_Init(), to support exchanging the signal of Tx and Rx line of UART module.

  • Fixed the dma_interrupt example issue that the DMA clock was not enabled on PLUS-F3270 board.

  • Fixed iwdg_0 driver examples issue that the period of cycles is too small causing by the improper reload values on POKT-F0040 & POKT-F0140 & PLUS-F3270 boards.

MindSDK完整的changelog,可参见:

https://mindsdk.mindmotion.com.cn/release/changelog

来源:灵动MM32MCU

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

围观 82

1、MindSDK概述

MindSDK(mm32-mcu-sdk)是由灵动官方的软件团队开发和维护的基于灵动微控制器的软件开发平台。

● MindSDK包含灵动微控制器所必须的芯片头文件、启动程序、连接命令脚本等源码,以及灵动微控制器外设模块的驱动程序源码,以及大量便于用户使用的软件组件源码和开发工具。

● MindSDK提供了丰富的样例工程和综合演示工程,便于用户在具体的应用场景中了解驱动程序和软件组件的API的用法,并且可以直接在MindSDK支持的硬件开发板上运行,演示实际的工作情况。

● MindSDK在灵动主流的微控制器系列间实现了跨平台兼容,同一份样例工程,可以在不同平台之间无缝移植,方便用户在产品选型阶段快速完成评估,选择最具性价比型号的微控制器。

● MindSDK的驱动代码经过充分的测试,稳定可靠的软件支持。(这里留个彩蛋,后续文章中也会介绍到灵动软件研发的先进测试框架)

MindSDK使用层次模型组织架构和实现内容,如图1所示。

“图1
图1 MindSDK系统框图

目前,MindSDK已经支持的众多的主流开发工具:

● 支持开发主机操作系统:Windows、Linux

● 支持编译工具链:Keil MDK、IAR for Arm和ARMGCC

● 支持主流的调试器:Segger JLink和DAPLink

2、MindSDK官方支持的开发板

MindSDK已经支持灵动官方发布的开发板,包括PLUS-F3270、PLUS-F5270、EVB-L0130等,还有众多正在支持的开发板将在不断更新的版本中陆续开放。有部分支持的开发板,如下图所示。

图2
图2 MindSDK支持PLUS-F3270开发板

“图3
图3 MindSDK支持的PLUS-F5270开发板

“图4
图4 MindSDK支持的EVB-L0130开发板

3、获取和使用MindSDK

MindSDK通过专门的SDK在线发布平台发布最新的MindSDK代码包:

https://mindsdksdk.mindmotion.com.cn

从MindSDK网站上打包下载专属软件包的步骤非常简单,从登录到下载到需要的代码包,最多使用4步。如图5所示。

“图5
图5 MindSDK获取软件包

这里还可以通过浏览一小段demo,了解订制MindSDK软件包、编译工程创建可执行文件、下载可执行文件到开发板并运行的全过程。如视频所示。

“”
演示使用MindSDK

4、MindSDK的组件与样例工程

从MindSDK的目录结构中可以看到已经支持的驱动组件、功能组件、应用样例工程和驱动样例工程。如图6所示。

“图6
图6 在MindSDK目录结构中查看已支持的组件

MindSDK的绝大多数代码存放在二级目录下,层级简单,整齐。如图7所示。

“图7
图7 MindSDK单个工程的文件组织

展示在Keil中打开MindSDK样例工程。如图8所示。

“图8
图8 在Keil中打开MindSDK样例工程

5、MindSDK的应用案例

使用MindSDK的两种典型用法。以MindSDK作为框架搭建应用程序,或者以MindSDK作为BSP包支持大软件平台。

MindSDK作为主要工程框架,包含其他组件:

● 适合新项目,以MindSDK的工程作为基础,逐步添加新功能。

● 在MindSDK框架下进行开发,可以借鉴MindSDK的编码和文件组织规范

MindSDK作为组件,融入其他工程框架:

● 集成至大型软件、开发平台、开源项目当中,例如:MicroPython、RTOS、Zephyr …

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

围观 90
订阅 RSS - MindSDK