【.Net Micro Framework PortingKit - 02】STM3210E平台构建

简介: 在上一篇《移植初步:环境搭建》文章中,我们介绍了环境搭建的相关工作,下一步我们将要为STM3210E开发板构建平台代码。

在上一篇《移植初步:环境搭建》文章中,我们介绍了环境搭建的相关工作,下一步我们将要为STM3210E开发板构建平台代码。

打开./tools/bin/SolutionWizard/SolutionWizard.exe,我们用平台向导来搭建我们的项目(具体的图文步骤请参见:.Net Micro Framework平台移植初步),详细的步骤如下:

1、  选择任务(Choose a Task

     由于在.Net Micro Framework源码中已经存在CortexM3_sample平台,所以我们选择克隆一个已存在的平台(Clone an Existing Solution)。

2、  选择存在的平台(Clone an Existing Solution

我们选择:CORTEXM3_SAMPLE

3、  平台属性设置(Solution Properties

名字(name):STM3210E  注:这个名称很重要,所以一定要慎重填写。

开发者(Author):你的名字。

描述(Description):平台说明。

4、  开发平台基本参数设置(Processor Properties

    

 

     内存模式我们选择:Small

     其它相关参数,我们从EM-STM3210E开发板的用户手册中就可以查得到。

5、  项目选择(Project Selection

我们选择如下三个项目:

1)、tinyclr

2)、NativeSample

3)、Tinybooter

6、  功能选择(Feature Selection

由于STM3210E开发板内存较小,所以我们选择几个比较基本的核心功能,我们选择暂且如下(以后可以根据需要酌情添加即可):

1)、BlockStorage

2)、DataStorage

3)、Debugger

4)、Diagnostics

5)、I2C

6)、InterruptHandler

7)、Serialization

8)、SerialPort

9)、SPI

10)、Stream

11)、TinyCore

7、  支持库选择(Unresolved Library Selection

     该部分的选择和上一步骤的选择紧密相关,如果选择不当,则在编译时,会出现很多错误,所以一定要深入了解后再进行选择,我们目前的选择如下:

    (1)asyncproccanll_pal

(2)backlight_hal_stubs

(3)batterycharger_hal_stubs

(4)batterymeasurement_hal_stubs

(5)BlockStorageDriver_stubs

(6)blockstorage_pal

(7)blockstorage_pal

(8)cpu_bootstrap_stubs

(9)Buttons_pal

(10)cpu_cache_stubs

(11)COM_pal

(12)config_pal_Stubs

(13)CRC

(14)Crypto_stub

(15)Debugger

(16)Debugger_full

(17)Diagnostics

(18)diagnostics_pal

(19)cpu_ebiu_stubs

(20)events_pal

(21)FS_Config_stubs

(22)Gesture_pal_stubs

(23)GlobalLock_hal

(24)cpu_gpio_stubs

(25)Graphics_stub

(26)Hardware

(27)heap_pal

(28)HeapPersistence

(29)I2C

(30)cpu_i2c_stubs

(31)i2c_pal

(32)system_initialization_hal

(33)Ink_pal_stubs

(34)cpu_intc_stubs

(35)InterruptHandler_stub

(36)LargeBuffer_hal_stubs

(37)lcd_hal_stubs

(38)cpu_LCD_stubs

(39)Messaging

(40)cpu_mmu_stubs

(41)IOPort

(42)palevent_pal

(43)cpu_performancecounter_stubs

(44)piezo_pal_stubs

(45)cpu_prestackinit_stubs

(46)RPC_stub

(47)Serialization

(48)SimpleHeap_config

(49)SimpleHeap

(50)sockets_pal_stubs

(51)cpu_spi_stubs

(52)SPOT_Crypto_stub

(53)SPOT_Graphics_stub

(54)SPOT_Hardware

(55)SPOT_Hardware_SerialPort

(56)SPOT_IO

(57)SPOT_Messaging_stub

(58)SPOT_Serialization

(59)Stream

(60)cpu_time_stubs

(61)Time_pal

(62)TimeService_pal_stubs

(63)tinycrt_pal_stubs

(64)TinyHal

(65)usart_pal

(66)cpu_usb_stubs

(67)usb_pal_stubs

(68)virtualkey_hal_stubs

(69)cpu_watchdog_stubs

(70)Watchdog_pal_stubs

(71)WireProtocol

 

做完以上几步,我们便完成了最基本的平台代码构建工作,这时我们可以查看./MicroFramework_3_0/Solutions目录,就会发现已经存在一个STM3210E的目录了。

移植.Net Micro Framework一般先调试NativeSample项目,等NativeSample调试成功后,才进行tinyclr的调试工作。一般来说如果NativeSample调试成功,那么.Net Micro Framework的移植工作也就完成了一大半。

下面我们对NativeSample项目进行scatterfile的配置,由于我们采用MDK工具进行编译,所以我们打开./Solutions/STM3210E/NativeSample/scatterfile_tools_mdk.xml文件(当然,如果你选用的工具是RVDS,那么你得打开scatterfile_tools_rvds.xml文件),

为了便于调试,我们把程序放到RAM中运行(主要是因为NativeSample项目比较小,如果我们是在调试TinyClr,那么代码就得放到Nor Flash中去了)。

查看EM-STM3210E开发板的用户手册,我们知道片内SRAM 64k,片外扩展SRAM128K,所以我们把片外SRAM一份为二,分别分配给堆和栈。片内SRAM我们存放代码,不过不要从0x20000000开始的地址分配,我们今后还要把中断向量表放到从0x20000000开始的地址上去。

根据以上信息,我们对scatterfile_tools_mdk.xml文件作如下修改:

<Set Name="Heap_Begin"          Value="0x68000000"/>

 <Set Name="Heap_End"            Value="0x6800FFFC"/>

 <Set Name="Stack_Bottom"        Value="+0"/>

 <Set Name="Stack_Top"           Value="0x6801FFFC"/>

 <If Name="TARGETLOCATION" Value="RAM">

     <Set Name="Code_BaseAddress" Value="0x20001000"/>

     <Set Name="Code_Size"        Value="0x0000F000"/>

     <Set Name="Valid"            Value="true"/>

</If>

 

最后我们还得对./ DeviceCode/Initialization/tinyhal.cpp文件做一些小小的改动,我们把下面的代码先做一下屏蔽,否则程序运行于此便会当机。

348 //Buttons_Initialize();

480 //g_Boot_RAMConstants_CRC = Checksum_RAMConstants();

好了,我们打开命令行,输入如下编译命令并运行:

Msbuild ./Solutions/ STM3210E /dotNetMF.proj /t:build /p:flavor=debug;memory=ram

如果在以上步骤中你没有出过什么差错,我想你一定会编译成功的。

OK,一切顺利,编译成功。但是我们先不要着急用MDK进行调试,因为我们的程序用到了片外SRAM(把它分配给堆和栈),而我们以上的代码中并没有写对其初始化的代码,所以要想使程序正常工作,我们必须首先要初始化片外SRAM。简单期间,我们先编写一个MDK的脚本来完成这个初始化工作。

好了,这一步的工作就暂告一个段落,下篇文章我便介绍MDK脚本的编写,及在NativeSample.cpp中编写一个控制LED灯闪烁的代码,以期来证明我们的EM-STM3210E已经可以初步工作了。

相关实践学习
块存储快速入门
块存储是阿里云为云服务器ECS提供的块设备产品。通过体验挂载数据盘、分区格式化数据盘(Linux)、创建云盘快照、重新初始化数据盘、使用快照回滚云盘和卸载数据盘等功能,带您快速入门块存储。
相关文章
.Net Micro Framework研究—Digi开发板初探
写的比较基础全面,由于我们北航的研发团队先研究了Digi的开发板,所以直到今天Digi开发板才到我的手上,我的《Micro Framework研究》系列文章以后也会陆续推出
740 0
|
内存技术 移动开发
【.Net Micro Framework PortingKit–11】NandFlash驱动开发
对.Net Micro Framework系统来说,正常情况下Flash(包括NandFlash和NORFlash)分为六个区
649 0
【.Net Micro Framework PortingKit – 13】LCD驱动开发
LCD的驱动开发还是比较繁琐一些的,因为LCD的驱动代码分散在三个目录中(题外话,我觉得针对.Net Micro Framework来说,最难的驱动是网卡驱动(特别是wifi驱动)、其次是USB驱动,和它们相比,LCD驱动就是小菜了)
764 0
|
Windows
在Corex-M3开发板上移植.Net Micro Framework系列文章
.NET Micro Framework 将 .NET 的可靠性和效率与 Visual Studio&reg; 的高生产率结合起来,以针对价格较低、资源受限的小型设备开发应用程序,可帮助人们使用熟悉的 Visual Studio 工具来构建托管的嵌入式应用程序。
652 0
|
.NET 开发框架 内存技术
【.Net Micro Framework PortingKit – 14】TinyCLR编译与测试
由于TinyCLR的相关代码与硬件无关,我们所做的就是根据实际需要,添加不同的Feature,此外就是合理配置堆栈和代码存储位置。
1850 0
.Net Micro Framework研究—串口操作
试验平台:Digi MF开发板,Digi提供的示例中包含了串口的示例程序
583 0
【.Net Micro Framework PortingKit – 12】SysTick驱动开发
SysTick驱动有三个功用,一是我们上面所说的多任务和多线程支持;二是获得系统当前Tick,以此实现延时等待
639 0
|
物联网 芯片
Zigbee在.Net Micro Framework系统中的应用
Zigbee是IEEE 802.15.4协议的代名词。根据这个协议规定的技术是一种短距离、低功耗的无线通信技术。这一名称来源于蜜蜂的八字舞,由于蜜蜂(bee)是靠飞翔和“嗡嗡”(zig)地抖动翅膀的“舞蹈”来与同伴传递花粉所在方位信息,也就是说蜜蜂依靠这样的方式构成了群体中的通信网络。
817 0
【.Net Micro Framework PortingKit - 08】GPIO驱动
要点亮LED灯或获得输入IO的状态应该是比较容易的,打开端口时钟,然后读写相关的GPIO寄存器就可以了,但是要实现一个输入中断,就要费些周折了
496 0
【.Net Micro Framework PortingKit – 09】串口驱动
虽然在PC机中,串口渐行渐远,但是在嵌入式领域,串口仍可以说是如日中天,因为它造价低廉、并且编程也比较方便,在没有显示屏或输入设备的系统上,串口更是不可或缺,和超级终端一道,共同解决了信息显示和输入问题。
560 0