在上一篇文章《STM3210E平台构建》中,我们已经构建好了STM3210的基本平台,并且已经编译通过,所以我们下一步就要考虑用MDK进行下载调试了。
由于我们用到了片外SRAM,所以我们还得写一个MDK 脚本,实现三点功能,一是SRAM初始化,二是下载镜像文件,三是设置PC指针。
EM-STM3210E随机光盘中有一些开发板的测试工程,所以我们没必要先查看手册,我们先在代码中看看有没有收获,在测试工程的启动代码stm32f10x_vector.s中,我们可以找到了片外SRAM初始化代码,具体内容如下:
; FSMC Bank1 NOR/SRAM3 is used for the STM3210E-EVAL, if another Bank is
; required, then adjust the Register Addresses
; Enable FSMC clock
LDR R0,= 0x00000114
LDR R1,= 0x40021014
STR R0,[R1]
; Enable GPIOD, GPIOE, GPIOF and GPIOG clocks
LDR R0,= 0x000001E0
LDR R1,= 0x40021018
STR R0,[R1]
; SRAM Data lines, NOE and NWE configuration
; SRAM Address lines configuration
; NOE and NWE configuration
; NE3 configuration
; NBL0, NBL1 configuration
LDR R0,= 0x44BB44BB
LDR R1,= 0x40011400
STR R0,[R1]
LDR R0,= 0xBBBBBBBB
LDR R1,= 0x40011404
STR R0,[R1]
LDR R0,= 0xB44444BB
LDR R1,= 0x40011800
STR R0,[R1]
LDR R0,= 0xBBBBBBBB
LDR R1,= 0x40011804
STR R0,[R1]
LDR R0,= 0x44BBBBBB
LDR R1,= 0x40011C00
STR R0,[R1]
LDR R0,= 0xBBBB4444
LDR R1,= 0x40011C04
STR R0,[R1]
LDR R0,= 0x44BBBBBB
LDR R1,= 0x40012000
STR R0,[R1]
LDR R0,= 0x44444B44
LDR R1,= 0x40012004
STR R0,[R1]
; FSMC Configuration
; Enable FSMC Bank1_SRAM Bank
;LDR R0,= 0x00001011
;LDR R1,= 0xA0000010
;STR R0,[R1]
;LDR R0,= 0x00000200
;LDR R1,= 0xA0000014
;STR R0,[R1]
LDR R0,= 0x00001000
LDR R1,= 0xA0000010
STR R0,[R1]
LDR R0,= 0x00000200
LDR R1,= 0xA0000014
STR R0,[R1]
LDR R0,= 0x0FFFFFFF
LDR R1,= 0xA0000114
STR R0,[R1]
LDR R0,= 0x00001001
LDR R1,= 0xA0000010
STR R0,[R1]
好了,我们以此为样本,编写我们的脚本文件Config.ini,最终的内容如下:
//初始化SRAM3 0x68000000 - 0x68020000
FUNC void InitSRAM3(void)
{
//使能FSMC时钟
_WDWORD(0x40021014,0x00000114);
//使能FSMC相关的GPIO的时钟
_WDWORD(0x40021018,0x000001E0);
//配置SRAM数据线,NOE和NWE配置
//SRAM地址线配置
//NOE和NWE配置
//NE3配置
//NBL0,NBL1配置
_WDWORD(0x40011400,0x44BB44BB);
_WDWORD(0x40011404,0xBBBBBBBB);
_WDWORD(0x40011800,0xB44444BB);
_WDWORD(0x40011804,0xBBBBBBBB);
_WDWORD(0x40011C00,0x44BBBBBB);
_WDWORD(0x40011C04,0xBBBB4444);
_WDWORD(0x40012000,0x44BBBBBB);
_WDWORD(0x40012004,0x44444B44);
//FSMC配置
//使能 FSMC Bank1_SRAM Bank
_WDWORD(0xA0000010,0x00001000);
_WDWORD(0xA0000014,0x00000200);
_WDWORD(0xA0000114,0x0FFFFFFF);
_WDWORD(0xA0000010,0x00001001);
}
InitSRAM3();
exec("LOAD C://MicroFramework_CortexM3//BuildOutput//THUMB2//MDK3.1//le//RAM//debug//STM3210E//bin//NativeSample.axf INCREMENTAL");
PC = 0x20001000;
先不要忙下载,我们还要编写一个LED灯闪烁的代码。
我们在./Solutions/STM3210E/NativeSample/NativeSample.cpp文件中添加如下代码:
typedef volatile unsigned long vu32;
typedef unsigned long u32;
typedef unsigned short u16;
typedef struct
{
vu32 CRL;
vu32 CRH;
vu32 IDR;
vu32 ODR;
vu32 BSRR;
vu32 BRR;
vu32 LCKR;
} GPIO_TypeDef;
#define PERIPH_BASE ((u32)0x40000000)
#define APB2PERIPH_BASE (PERIPH_BASE + 0x10000)
#define GPIOF_BASE (APB2PERIPH_BASE + 0x1C00)
#define GPIOF ((GPIO_TypeDef *) GPIOF_BASE)
#define GPIO_Pin_6 ((u16)0x0040)
#define GPIO_Pin_7 ((u16)0x0080)
void ApplicationEntryPoint()
{
//..................
//初始化
u32 GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7;
u32 pinpos = 0x00,pos = 0x00,pinmask = 0x00;
u32 tmpreg = GPIOF->CRL;
for (int pinpos = 0x00; pinpos < 0x08; pinpos++)
{
pos = ((u32)0x01) << pinpos;
if ((GPIO_Pin & pos) == pos)
{
pos = pinpos << 2;
//Clear the corresponding low control register bits
pinmask = ((u32)0x0F) << pos;
tmpreg &= ~pinmask;
//Write the mode configuration in the corresponding bits
tmpreg |= ((u32)0x3) << pos;
}
}
GPIOF->CRL = tmpreg;
//设置
while(TRUE)
{
GPIOF->BSRR = GPIO_Pin_6;
GPIOF->BSRR = GPIO_Pin_7;
for(long i=0;i<1000000;i++);
GPIOF->BRR = GPIO_Pin_6;
GPIOF->BRR = GPIO_Pin_7;
for(long i=0;i<1000000;i++);
}
}
好了,在MDK中新建一个基于Cortex-M3的工程,并选择我们编写好ini文件,然后调试开始(MDK 详细的调试方式,请参见相关文档,由于MDK本地化很出色,所以很容易上手)。下面是调试过程中的MDK界面:
然后在看一下EM-STM3210E开发板,哈!你会发现D1和D2 LED灯正在闪烁。
不过不要高兴太早,我们现在完成的工作,恰是万里长征的第一步,更烦琐复杂的工作在后面呢。因为我们选用的是Cortex-M3架构的芯片,目前.Net Micro Framework并不支持。关键问题在于Cortex-M3的中断架构和ARM7和ARM9有了很大的不同,并且中断向量表的位置也不一定放在0地址起始处,而是通过NVIC来进行配置,并且该开发板内存较小,所以相关代码要放到Nor Flash中进行启动,这和.Net Micro Framework惯常的方式不同,所以我们需要自行重建和修改很多代码,方能使我们的开发板正常工作(不过.Net Micro Framework的初学者也不要为此过多的担忧,如果你选用的是基于ARM7或ARM9架构的芯片,那么你的工作就会容易的多)。
下面我们要做的工作依次为:编写中断向量表、修改启动代码、调整和原先中断相关的代码、时钟初始化、NVIC初始化、FMSC初始化、SRAM初始化、串口初始化、IO驱动开发、Nand Flash驱动开发、I2C驱动开发、SPI驱动开发、LED驱动开发、LCD驱动开发… …
路漫漫其修远兮,吾将上下而求索 -- 其实嵌入式开发是一个充满挑战和乐趣的事!
分享到:
相关推荐
《玩转.NET Micro Framework移植-基于STM32F10x处理器》源程序
《玩转.NET Micro Framework 移植-基于STM32F10x处理器》一书所有的源代码。其它更多的资源可以访问我的blog:http://blog.csdn.net/norains 谢谢!
The Microsoft .NET Micro Framework is a small and efficient .NET runtime environment used to run managed code on devices that are too small and resource constrained for Windows CE and the Compact ...
.NET Micro Framework 电子书
.net micro framework关于文件操作的例子,非常详细。还包括了点击等东西
expert .net micro frameworkexpert .net micro frameworkexpert .net micro framework
.NET Micro Framework自动化测试工具,需.NET Micro Framework3.0和.NET Micro Framework Test Kit支持...
Microsoft .NET Micro Framework 2.5 SDK。 这个我暂时没用,权当放在这里存放,需要的,自己动手。
近来有些刚入门的用户,不太了解.NET Micro Framework开发板的使用,所以写了这篇文档,以期缩短用户对开发板的熟悉时间。
micro framework 4.0 SDK,最新开发工具包
这是我自己改造的.Net Micro Framework模拟器,比windows自带的漂亮多了。 覆盖该目录下的同名文件(路径以实际开发包安装位置为准)即可。 C:\Program Files\Microsoft .NET Micro Framework\v2.0.3036\Tools 支持...
.NET Micro Framework 电子书
http://item.taobao.com/item.htm?id=7117999726 .NET Micro Framework开发板的Key文件的部署说明。
.NET Micro Framework开发板原理图(红牛开发板)
《精通.NET Micro Framework》 英文PDF + 源码
.NET Micro Framework开发板使用手册(红牛开发板)
如何顺利编译.Net Micro Framework Porting Kit 4.1 安装路径不能有空格
注:比上一个模拟器多了支持方向键控制 这是我自己改造的.Net Micro Framework模拟器,比windows自带的漂亮多了。 覆盖该目录下的同名文件(路径以实际开发包安装位置为准)即可。 C:\Program Files\...
.NET Micro Framework for Windows 7(X64) USB驱动安装说明,包含相应的驱动程序