STM8串口下载程序教程

一个很好的STM8串口下载程序教程。 从ourdev看到转过来的。

STM32启动代码概述

一般嵌入式开发流程就是先建立一个工程,再编写源文件,然后进行编译,把所有的*.s文件和*.c文件编译成一个*.o文件,再对目标文件进行链接和定位,编译成功后会生成一个*.hex文件和调试文件,接下来要进行调试,如果成功的话,就可以将它固化到flash里面去。 启动代码是用来初始化电路以及用来为高级语言写的软件作好运行前准备的一小段汇编语言,是任何处理器上电复位时的程序运行入口点。 比如,刚上电的过程中,PC机会对系统的一个运行频率进行锁定在一个固定的值,这个设计频率的过程就是在汇编源代码中进行的,也就是在启动代码中进行的。与此同时,设置完后,程序开始运行,注意,程序是在内存中运行的。这个时候,就需要把一些源文件从flash里面copy到内存中,又要对它们进行初始化读写,这又有频率的设置。这些都是初始化。 初始化完成后,我们又要设置一些堆栈,要跳到C语言的main函数里面运行。这就需要堆栈。对普通的ARM CPU有这样一个要求:在绝对地址为零的地方要放置一个异常向量表,但并不是所有的ARM CPU都留有这个一个空间,这就需要用到映射的功能。我们可以将其它地方的一些空间映射到绝对地址里面。当发生异常时,ARM核来读取异常中断表的时候,它会使用映射之后的那个表,这个就可以接着往下执行,否则在绝对地址零的地方找不到任何信息,程序就会死掉。这些运行的环境全部建立好后,程序就会跳转到我们的main函数里面。 总之,启动代码,就是对最小系统的初始化。包括晶振,CPU频率等。 启动代码的最小系统是:异常向量表的初始化–存储区分配–初始化堆栈–高级语言入口函数调用– main()函数。 程序的启动过程: 以下面这个例子为例,编译完后,DEBUG后,我们可以看到,光标指向绝对地址为零的地方,这里存放的就是一个异常向量表。 它对应在startup.s里的源文件如下: 单步运行后,马上跳转到初始化CPU的频率。即初始化锁相环,将其锁在一个固定的频率。具体代码如下: ; Setup PLL IF PLL_SETUP <> 0 LDR R0, =PLL_BASE MOV R1, #0xAA MOV R2, #0×55 ; Configure and Enable PLL MOV R3, #PLLCFG_Val STR R3, [R0, #PLLCFG_OFS] MOV R3, #PLLCON_PLLE STR R3, [R0, #PLLCON_OFS] STR R1, [R0, #PLLFEED_OFS] STR R2, [R0, [...]

如何在RVMDK上建立自己的STM32的工程

在网上找了很久,还是没有能找到一篇图文结合的介绍如何在RVMDK上建立自己的STM32的工程的好文章,于是下决心自己写一篇。 偶用的是RealView MDK 3.22评估版。可以在网上搜索一下,很容易就下载到了。 一、先新建一个工程项目文件夹。由于RV编译环境需要加入比较多的库文件,有用户自己写的代码,也有库文件,还有编译输出文件,还有新建的工程文件。所以我们最好在新建立的文件夹里再新建几个子文件夹,这样就不容易乱,我按照网上介绍的,建立的GPIO工程如下: 二、首先双击桌面上的Keil uVision3快捷方式,打开的是你上次打开过的一个RV工程。这个不用理它,你直接点击Project – New uVision Project,如下图: 会出现一个Creat New Project对话框,提示我们要将此工程保存到什么路径之下: 三、我们将工程保存到GPIO文件夹中的Obj子文件夹中,输入文件名(不用输后缀,因为后缀默认为*.uv2),点击“保存”,会自动弹出选择ARM器件对话框: 选择好目标ARM型号,单击“确定”,会弹出一个对话框,提示你是否要添加启动文件,点击“是”: 这样,工程就建立好了。 四、 管理建立好的工程。因为文件比较多,所以我们最好用几个文件夹来放不同类型的文件。注意,这些文件夹是虚的,实际中并不存在,只是方便管理而已。 如下图: 点击工具栏上的那个“品”字形按钮,或者右击Source Group1,选择Manage Components,出现以下对话框: 根据个人的习惯,建立几个文件夹,一般建立三个: 1)StartUp:用来存放STM32的启动文件; 2)在Project菜单下的用户写的源文件main.c,保存在User子文件夹下,把该文件添加到工程中(Add File to Group "User")并编写程序代码; 3)将所使用到的库函数加入工程(Add File to Group "Lib"),其中stm32f10x_lib.c文件是整个库的一些定义,是必须要的;在这里,如果不知道使用了哪些库函数,不知道应该添加哪 些库文件进入工程,就添加所有的固件库函数到工程,为了方便可以直接添加:C:\Keil\ARM\RV31\LIB\ST路径下的STM32F10xR.LIB文件进入工程; 设置好的界面如下: 我们在编译之前还应该对工程选项做些设置,这些设置也可以在建立工程后马上进行;在工程上单击右键,选择“Options for Target”,打开选项窗口: Device标签为器件选择,这在建立工程的时候就设置好了。 Target标签为目标设置; Output标签为输出设置,是输出信息的输出路径,点击“Select Folder for Objects”,一般偶选择输出文件存放路径为Out子文件夹; Debug标签为DEBUG调试设置,默认状态为软件调试,而也可以选择JLINK和ULINK或者ST LINK-II Debugger进行硬件调试,选择Run to main是为了进入调试状态后直接进入主函数; Utilities标签是程序下载设置。 这样,我们就可以进行程序的编写和编译了。比起CARM来,偶感觉有点点麻烦,呵呵。

Keil MDK工程管理图文详解

前几天有人问RVMDK下的工程管理,说前面的博文写的太简单了,希望能写个图文教程。今日得闲,写下此文送给大家。 好的代码管理方法能给人一种有条理的感觉,通过将不同功能的代码文件分门别类的组织起来,不仅可以理清整个项目的脉络,还可以非常方便的在各代码文件和函数间跳转,从而加快项目的开发速度。 RVMDK的工程管理在Project WorkSpace窗口中,上图是我建立好的一个STM32的工程目录,有三个Groups,分别用来存放STM32的启动文件、库文件和用户文件。 下面介绍进行工程管理的步骤: 第一步、在Project WorkSpace窗口中刚建好的工程上点击鼠标右键,在弹出的菜单中选择“Manage Components”,打开项目管理对话框; 第二步、在“Project Components”标签下根据需要建立目录,第一栏是工程的根目录,在这里可以修改目录名;第二栏是添加Groups,可以根据个人习惯建立不同的组来分别放置不同类型的文件;第三栏是为建立的组添加代码文件用的,点击“Add Files”添加。 这样就完成了工程管理目录的设置,除了用上面的方法添加代码文件外,还可以直接在Project WorkSpace窗口中用鼠标右键进行添加。在Project WorkSpace窗口中选择不同的标签还可以查看Regs、Books、Functions等信息,比较有用的是在Regs中查看通用寄存器的值,在Functions中进行不同代码文件和函数间的跳转。 个人认为Keil MDK的工程管理功能还是非常方便的,值得称道。