2012.01.31 11:09 创建。
MDK版本:MDK-ARM Professional Version: 4.23
处理器:STM32F10x
目标:最小系统
配置Keil项目
在Targer Option的Operating system里面选上RTX Kernel:
![](http://pubimage.360doc.com/wz/default.gif)
复制配置文件RTX_Conf_CM.c
从Keil的安装目录中的\Keil\ARM\Startup\里面找到RTX_Conf_CM.c,将其复制出来并添加到项目里。对于STM32F10x最小系统,可以不改这个文件。也可以修改#define OS_CLOCK这句,以获得正确的系统时钟。
复制启动文件STM32F10x.s
裸奔的时候我使用的是文件版本号为V2.0.3的stm32f10x_vector.s,跑不起来。采用Keil安装目录自带的STM32F10x.s文件,位置在\Keil\ARM\Startup\ST\,将其复制出来添加到项目,并去掉stm32f10x_vector.s。
修改stm32f10x_it.c文件
RTX内核重新实现了SVC调用,如果编译时出现SVC_Handler重复定义的错误,要将stm32f10x_it.c中的SVC_Handler注掉:
#if 0void SVC_Handler(void){}#endif |
复制并修改retarget.c文件
位置在\Keil\ARM\Startup\。将所有外部调用去掉,修改后的3个函数变为:
int fputc(int ch, FILE *f) { //return (sendchar(ch)); return 0;} int fgetc(FILE *f) { //return (sendchar(getkey())); return 0;} void _ttywrch(int ch) { //sendchar (ch);} |
如果不作这些修改的话,系统可能会挂掉。
编写main.c文件
以下是简单的示例:
#include <rtl.h> __task void task1 (void) { while (1) { // LED闪灯/灭灯等操作 os_dly_wait(50); }} int main(void) { // 基本的初始化 // ... os_sys_init (task1); while (1) { }} |
参考资料
Getting Started: Building Applications with RL-ARM
ARM Real-Time Library Training(中文)
RL-ARM User's Guide
RL-RTX_ARM,RTX操作系统
关于STM32的systick定时器的详细说明
STM32 Systick 编程及应用
STM32中文参考手册
Cortex-M3技术参考手册