STM32系列MCU不同型号的移植
- 格式:pdf
- 大小:134.93 KB
- 文档页数:5
mcu移植流程范文MCU(Microcontroller Unit)是一种微型计算机系统,包含了CPU、存储器、输入输出接口和定时器等部件,广泛应用于各种嵌入式系统中。
MCU移植指的是将相同或不同架构的MCU芯片上的软件移植到另一种MCU芯片上的过程,以便在新的硬件平台上运行软件。
这篇文章将详细介绍MCU移植的流程。
1.硬件平台选型:首先需要选择目标MCU芯片,确保该芯片具备满足项目需求的功能特性。
考虑芯片的处理能力、存储容量、外设接口、功耗等因素。
同时,要注意MCU是否支持所需的移植操作系统或开发环境。
2.准备开发环境:根据目标MCU芯片的选择,安装相应的集成开发环境(IDE)和编译器。
这些开发工具通常由MCU芯片厂商提供,用于编写、编译和调试软件。
3.移植操作系统:如果移植的软件涉及到操作系统,需要进行操作系统的移植。
首先,要了解目标MCU芯片支持的操作系统类型,比如RTOS(实时操作系统)或者Linux,然后将操作系统的源代码和配置文件导入到开发环境中,并进行编译和调试。
4.移植设备驱动程序:设备驱动程序是控制外围设备的软件模块,如串口、GPIO、ADC等。
将原有设备驱动程序的源代码导入到开发环境中,并进行适配和调试,确保其与目标MCU芯片的硬件接口兼容。
5.移植应用程序:将原有应用程序的源代码导入到开发环境中,并进行编译和调试。
由于不同MCU芯片的指令集、存储器布局等可能有所差异,需根据目标MCU 的特性进行相应的修改和优化。
6.端口移植:一些软件可能依赖于特定的硬件平台或外部库,需要进行端口移植。
比如,涉及具体的硬件操作的代码或与外部库的接口等,需根据目标MCU 的硬件平台特点进行修改。
7.调试和测试:完成移植后,需要进行软件的调试和测试,确保软件在目标MCU芯片上能够正常工作。
可以使用调试工具和仿真器对程序进行单步执行和观察内部状态,以及通过外设接口验证软件功能。
8.性能优化:在软件运行过程中,可能会出现性能瓶颈或资源浪费的问题。
stm32f103移植到GD32修改内容及注意事项在国内芯片紧张的情况下,目前如果项目没有成型可以安装官方提供的GD32的pack,选择相关的pack即可正常编程。
若程序已经成型,需要移植,首先就要考虑芯片类型(stm32系列)的选择。
选择过程中首先要根据已用stm32单片机的封装和引脚定义去对应相关的gd32芯片类型。
这里我选用的是GD32f305芯片替换stm32f103rc,所作设置如下:1.点击魔术棒选择stm32f103芯片2.根据晶振设置晶振,这里设置72MHz3.根据芯片flash大小设置STM32F10X_LD、STM32F10X_MD、STM32F10X_HD,不知道的可以查手册,实在不行就一个一个去试。
4.Debug中设置,如果用的是jlink仿真器就选择jlink仿真器,其他的就选用其他的,这里选择SW方式。
另外注意:如果右边框读取不到单片机信息,或者下载不了程序可以把速度降低一些,设置10k或者5k基本可以解决!Device芯片选型C++内容设置Debug内容设置1.软件移植注意事项1.1系统方面的注意事项stm32移植到GD32上芯片选择上的问题:1.1.1 HSE相关内容修改在V3.x的库,启动时间宏定义在xxx32f10x.h头文件中;在V3.0以前的库,其启动时间宏定义在xxx32f10x.h中(HSEStartUp_Ti meOut);修改前:#define HSE_STARTUP_TIMEOUT ((uint16_t)0x0500) /*!< Time out for HSE start up */修改后:#define HSE_STARTUP_TIMEOUT ((uint16_t)0xFFFF) /*!< Time out for HSE start up */这里我使用的库是stm32f10x.h里面,位置如图所示。
修改原因:GD和STM32的晶振部分电路设计有一定的差异,两者对外部高速晶振的参数要求也不一样,修改HSE_STARTUP_TIMEOUT宏定义可以保证晶振正常起振。
第6期2020年12月机电元件ELECTROMECHANICALCOMPONENTSVol 40No 6Dec 2020收稿日期:2020-10-20基于STM32单片机的uC/OS-II操作系统移植张中前(贵州航天电器股份有限公司,贵州贵阳,550009) 摘要:网络技术和信息技术的发展,嵌入式系统应用越来越普及,嵌入式设备的应用也越来越多。
uC/OS-II广泛应用于路由器、飞行器及工业控制等。
uC/OS-II操作系统执行效率高,占用存储空间少,具有实时性及可扩展性等优点,在小型嵌入式设备中具有广泛应用。
本文介绍了基于ARMCORTEXM3系列单片机上的uC/OS-II移植,对电子控制组件的设计具有参考作用。
关键词:实时操作系统;uC/OS-II;内存管理;任务管理;STM32;移植Doi:10.3969/j.issn.1000-6133.2020.06.015中图分类号:TN784 文献标识码:A 文章编号:1000-6133(2020)06-0057-051 引言操作系统是裸机的第一层软件,操作系统直接运行在硬件上,上层软件通过提供应用程序接口(API函数),实现对底层硬件的访问,同时,通过操作系统实现对多个上层应用软件(任务)管理,实现对硬件CPU管理、存储管理、I/O接口管理及文件管理,如图1所示。
图1 操作系统功能组成示意图 STM32系列单片机以其优良的价格,大容量的FLASH及RAM存储空间,极易用于较为复杂的控制系统;在STM32单片机上进行uC/OS-II实时操作系统的移植,提高了产品的设计灵活性,实现较为复杂的系统功能;通过将开源的uC/OS-II移植在STM32单片机上,以其较为低廉的硬件成本获得较高的使用性能,具有良好的应用前景。
2 uC/OS-II操作系统2.1 uC/OS-II操作系统的基本特征uC/OS-II是一个完整的、可移植、可固化、可剪裁的基于优先级调度的抢占式实时多任务操作系统;它能够在外界事件或数据产生时,能够接收图2 uC/OS-II文件结构示意图并以足够快的速度响应,其处理的结果又能够在规定的时间内输出,并控制所有实时任务协调、一致运行。
STM32移植到GD32(以32的工程为模板简单三步完成移植)移植STM32工程到GD32平台是一项相对简单的任务,因为两者的硬件架构和内核类似。
在进行移植时,我们只需要对一些寄存器和外设的名称进行适当的更改即可完成移植。
以下是一个简单的三步骤指南,来帮助您完成STM32工程到GD32平台的移植。
第一步:更改寄存器和外设名称在STM32工程中,我们需要对寄存器和外设的名称进行更改,以适应GD32平台。
GD32平台使用了类似的寄存器和外设,但它们的名称可能有所不同。
您需要查阅GD32的参考手册,找到对应的寄存器和外设名称,并在STM32代码中进行相应的更改。
例如,在STM32中,GPIO外设的寄存器名称可能为GPIOA、GPIOB等,但在GD32中,GPIO外设的寄存器名称可能为GPIO0、GPIO1等。
您需要查找GD32的参考手册,找到正确的寄存器名称,并将其替换为相应的STM32代码中的寄存器名称。
第二步:调整时钟和中断配置在STM32和GD32平台上,时钟和中断配置可能略有不同。
在进行移植时,您需要检查和调整代码中的时钟和中断配置,以适应GD32平台的要求。
例如,在STM32中,我们可能使用RCC_PLLConfig函数来配置PLL,但在GD32中,我们可能需要使用零延迟锁相环(ZZPLL)来配置PLL。
您需要查找GD32的参考手册,找到正确的时钟配置函数,并将其替换为相应的STM32代码中的时钟配置函数。
同样地,在移植中,您还需要检查和调整代码中的中断配置,以确保它们与GD32平台兼容。
第三步:验证和调试完成以上两个步骤后,您可以编译和烧录移植后的代码到GD32开发板上进行验证和调试。
您可能需要对一些功能进行逐个测试,以确保它们在GD32平台上正常工作。
在调试过程中,您可能会遇到一些问题和错误。
这是正常现象,您需要逐一解决这些问题,直到移植后的代码在GD32平台上完全正常运行。
总结这是一个简单的三步指南,帮助您将STM32工程移植到GD32平台。
STM32F05X移植GD32F1X0注意事项1、安装GD_MDK补丁到MDK的安装目录下2、FLASH算法文件在“GD32F10xxx Keil IDE Config”文件夹中,算法文件需要复拷贝到“ D:\Keil\ARM\Flash ”中;3、选择算法文件(xxx.FLM)For GD32F10xx4,GD32F10xx6,GD32F10xX8,GD32F10xxB, Please select GD32F10xx468B.FLM as Flash programming algorithm.For GD32F10xxC,GD32F10xxD,GD32F10xxE,GD32F10xxF,GD32F10xxG, Please select GD32F10xxCDEFGIK.FLM as Flash programming algorithm.For GD32F10xxI,GD32F10xxK, Pls select the relevant P/N of "32F10xxG" firstly and then select GD32F10xxCDEFGIK.FLM as Flash programming algorithm.For GD32F1x0x4,GD32F1x0x6,GD32F1x0x8 value line series of MCU, Please select the relevant P/N of "32F103xx" firstly and then selectGD32F1x0468.FLM as Flash programming algorithm.4、使用GD 150的demo程序中的外设库替换F030工程中的外设固件,同时替换掉F030工程中的启动文件,并正确选择GD32驱动芯片类型5、修改中断向量设置,因为GD使用的是M3内核所以中断分成抢占优先级和子优先级,程序中需要进行中断分组和中断向量的重新配置,程序中的几个中断向量都需要调整。
前段时间做项目用到百兆网通信,用到了LWIP,一开始是参照原子的例程做移植,因为原子的例程中使用的是LAN8720,为了改成DP83848,改寄存器地址,改位定义,改速度计算公式,折腾了好多天也没成功,最后只好听从网友的建议,修改ST 官方的一个例程,几天下来,竟然成功了,现在将步骤分享给大家,感觉实际工程中用DP83848的还是大多数..其实本文并不是移植LWIP,只是将ST官方的例程改成我们项目所需要的,然后我们再在这个基础上完成自己的项目即可,这对新接触LWIP又急着做项目的人比较适合,没必要去了解LWIP的具体实现,会用就行了..本文作者:武汉普创科技--易宇--转载请注明出处本人的项目配置:STM32F407VET6 + DP83848C1、从官方网站/document/list/index/category-523下面向STM32F4x7微控制器的LwIP TCP/IP协议栈的演示代码的英文STM32F4x7微控制器的LwIP TCP/IP协议栈的基于官方EVAL开发板的演示代码,显然,我们直接修改这个演示代码要比我们去移植LWIP简单得多。
DM00036052.pdf是演示代码的说明文档。
2、将stsw-stm32070.zip解压得到STM32F4x7_ETH_LwIP_V1.1.0文件夹,下面是STM32F4x7_ETH_LwIP_V1.1.0文件夹架构3、删除_htmresc文件夹,这个文件夹是ST及CMSIS公司logo,没什么用。
4、打开project文件夹,这个文件夹包括两个文件夹:FreeRTOS和Standalone。
FreeRTOS文件夹里的程序示例是基于FreeRTOS系统的LWIP移植示例,这里我们不需要,直接删除。
Standalone文件夹里是一些无操作系统LWIP移植示例程序,在这里我们工程需要的是普通的数据传输,所以只使用到UDP,所以我们只保留udp_echo_client文件夹,其他的都删除掉。
ST中stsw-stm32070的网络例子——将DP83848CVV修改为LAN8720A 在main.h中将LCD注释掉//#define USE_LCD /* enable LCD */Stm32f4的时钟配置首先在startup_stm32f40xx.s中找到芯片上电复位之后做的动作,将进行SystemInitSystemInit()函数在system_stm32f4xx.c中进行了编写同时SystemInit()调用SetSysClock(),也在system_stm32f4xx.c中SetSysClock()配置了PLL的时钟频率,一般都配置为168M,晶振不同的时候只要配置PLL_M的值即可,8MHz晶振就将PLL_M定义为8,25MHz的时候定义为25;当然,SetSysClock()中还进行了时钟源的选择,HSE还是HIS什么的,还有HCLK、PCLK2、PCLK1等,可以查看具体的代码。
时钟配置完成之后,进入main()函数,如前面所介绍,进入main()之前,时钟已经配置为168MHz了。
这里有 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);这个函数,看上去是中断优先级的设置,暂且没有去管它,有兴趣的时候可以看下,应该不难;因为这里只是单纯的设置LAN8720A来替代开发板上原先的DP83848CVV,所以主要设置都在ETH_BSP_Config()中,这里设置LAN8720A成功之后,就会去设置LwIP,就不是物理层上的工作了,都是IOS其它传输层、应用层等层的工作。
我们先看看ETH_BSP_Config()中是做了什么工作,这个函数的内容在stm32f4x7_eth_bsp.c中,看文件名bsp就是和最底层外设相关的。
函数首先进行了系统的一个定时器的滴答设置,这个定时器一般给操作系统使用。
这里单纯做为网络设置时候的一些延时使用,和delay差不多,只是使用的是系统定时器这个特殊定时器。
如何从STM32F030C8移植到GD32F130C8
最近公司一个项目要从STM32F030C8移植到GD32F130C8。
第一次做项目的移植,对GD的单片机也不是很了解,写下这篇博客记录我的移植过程。
正在移植的过程中,每天更新,希望自己进步的同时可以给别人一些参考。
这两款单片机的pin脚基本兼容,属于pin对pin。
下面是我的移植路程,(我可能要开始走弯路了,看到这篇文章的大侠少侠们如果有更好的方法请指正)
一、添加芯片类型判断程序:
在库中的启动代码前面加一段,读一下ID code,自动区分一下芯片的厂商和类型,这样就一劳永逸了。
按照ARM 和JEDEC-106 标准,执行下面这个函数
这个程序可以让程序知道当前的芯片是ST的还是GD的。
uint16_t Get_JTAG_ID()
{
if(*(uint8_t *)(0xE00FFFE8 )">{
return ((*(uint8_t *)(0xE00FFFD0 )">((*(uint8_t *)(0xE00FFFE4 )">((*(uint8_t *)(0xE00FFFE8 )
}
return 0;
}
MCUid = Get_JTAG_ID();//启动芯片之前判断芯片是
返回0x041 是ST(ST手册Doc ID 13902 Rev 14 的1055页31.6.2 和31.6.4 ),
返回0x7A3 是GD 。
从STM32F10x系列移植到GD32F10x系列目录目录 (1)1.前言 (3)2.硬件差异 (3)3.内部资源对比 (3)4.软件环境设置 (4)4.1.使用Keil开发GD32F10x (4)4.1.1. 在Keil4中添加GD32F10x MCU Device (4)4.1.2. 在Keil5中添加GD32F10x MCU Device (6)4.2.使用GD-Link开发GD32F10x (8)4.3.使用J-Link开发GD32F10x (10)4.4.使用IAR开发GD32F10x (12)4.4.1. 在IAR中添加GD32F10x MCU Device (12)4.4.2.在IAR中编译调试GD32F10x (13)5.0.外设移植 (16)5.1.System (16)5.1.1.HSE注意事项 (16)5.1.2.如何通过软件区分GD32和STM32 (16)5.1.3.GD32F10x Flash取指零等待,软件方面注意事项 (16)5.1.4.GD32F10x上电启动异常常见原因 (16)5.1.5.MCU无法正常使用SWD下载程序 (17)5.1.6.代码超过256K后执行速度慢 (17)5.2.GPIO方面问题 (17)5.2.1.EXTI中断相应异常(仅128K及以下产品适用) (17)5.2.2.PA8相关特性(仅128K及以下产品适用) (17)5.2.3.PB1和PB2特性(仅128K及以下产品适用) (18)5.2.4.GPIO上拉输入IO口电平只有2.6V (18)5.3.TIM注意事项 (18)5.3.1.TIM中断标志位清除问题 (18)5.3.2.TIM输入捕获或者正交编码配置问题 (18)5.4.CAN (18)5.4.1.CAN离线后无法自动恢复 (18)5.4.2.CAN接收异常,接收两帧数据会丢一包数据 (18)5.5.ADC (19)5.5.1.ADC采集数据异常问题分析 (19)5.5.2.ADC1和ADC2同步模式下,ADC2注入组无数据 (19)5.5.3.ADC 查询法采集数据,出现通道错乱的情况 (19)5.5.4.ADC工作在DMA模式下通道数据错乱 (19)5.5.5.ADC_CR2中的ADCON使用方法(仅128K及以下产品适用) (19)5.5.6.ADC_SR中的EOC标志位使用(仅128K及以下产品适用) (19)5.6.SPI (20)5.6.1.CLK管脚重复配置问题 (20)5.6.2.SPI主机模式,数据收发异常 (20)5.6.3.SPI通信BSY标志位 (20)5.6.4.SPI从机模式管脚模式 (21)ART (21)ART连续发送数据问题 (21)ART停止位问题 (21)5.8.Flash方面问题 (21)5.8.1.Flash函数修改要点 (21)5.8.2.Flash操作地址问题 (22)B方面问题 (22)B 注意事项 (22)1.前言GD32F10x是兆易创新于2013年推出的Cortex M3系列产品,该系列瞄准市场上最热的STM32F10x系列大蛋糕,与STM32F10x做硬件兼容,自推出以来在市场上获得强烈反响。
说明:将V2.92移植到STM32F107ZET6和STM32F107VCT6.关于uCOS的移植,其实要说难也难,要说简单也简单。
简单的是现在官方都已经移植好了,难的是自己写那个汇编的移植代码。
废话不多说,直接上移植步骤和注意事项。
第一步:到官网下载最新版本的uCOS-II V2.92,在uCOS-II的文件夹下有三个这样的文件主要有这两个移植的文件,在DOC文件夹下主要是移植的说明和性能的测试结果,其中uCOS-II-RefMan和uCOS-II-CfgMan比较有参考价值,第一个文件对每个函数进行了说明,重要的是给出了大部分函数的应用实例。
第二个就是我们移植好后的配置文件了。
还有一个重要的文件就是很重要的文件就是AN-1018,这个是官方的移植说明(针对的Cortex-M3处理器)。
第二步:Source文件夹下面都是源代码,不用管他们,Ports文件夹下面就是我们移植的时候需要弄的文件了,有以下几个文件,os_cpu.h,os_cpu_c.c,os_cpu_a.asm这三个文件在移植过程中最重要。
os_cpu.h:定义数据类型,处理器相关代码和声明函数原型。
#ifndef OS_CPU_H#define OS_CPU_H#ifdef OS_CPU_GLOBALS#define OS_CPU_EXT#else#define OS_CPU_EXT extern#endif#ifndef OS_CPU_EXCEPT_STK_SIZE#define OS_CPU_EXCEPT_STK_SIZE 128u //默认的异常堆栈大小#endiftypedef unsigned char BOOLEAN; //数据类型的说明typedef unsigned char INT8U;typedef signed char INT8S;typedef unsigned short INT16U;typedef signed short INT16S;typedef unsigned int INT32U;typedef signed int INT32S;typedef float FP32;typedef double FP64;typedef unsigned int OS_STK;typedef unsigned int OS_CPU_SR;临界代码和其它内核一样,μC/OS-Ⅱ为了处理临界段代码需要关中断,处理完毕后再开中断。