中级会员
- 积分
- 275
- 金钱
- 275
- 注册时间
- 2012-6-19
- 在线时间
- 37 小时
|
本帖最后由 bxl131 于 2018-5-29 10:17 编辑
正点原子寄存版例程移植 RT-Thread 操作系统
其实官方网站上也都有教程,我也是参照官方文档操作的,不敢私藏,整理一下拿出来分享
给有须要的朋友。
首先装 keil5 版本号 5.25 ,在网上自己下载就可以了。我原来装的是 keil5.10 ,移植不成功。
然后打开一个工程,点下图标识的地方
安装 rt-thread ,现在最新版本是 3.03 ,如果安装成功后 Install 会变成 up to date
然后点下图标识的地方
下一步:按下图标注的勾选好,点 OK
这样,操作系统就加载到工程里面来了
下面就开始进行代码的修改,要修改的地方有以下几点:
打开 sys.c ,添加以下几行代码:
uint32_t SystemCoreClock=72000000;
void SystemCoreClockUpdate(void)
{
Stm32_Clock_Init(9);
}
注意千万别拼写错误,变量名和函数名不要胡乱定义。
打开 rtconfig.h 文件,找到下面的宏定义,把数值改成 1000 ,
#define RT_TICK_PER_SECOND 1000
打开 test.c 文件,添加 #include <rtthread.h>
然后修改 test.c 文件代码,编译后就可以下载到板子上运行了
附:
Test.c 文件代码
#include <rtthread.h>
#include "sys.h"
#include "usart.h"
#include "delay.h"
#include "led.h"
//ALIENTEK Mini STM32 开发板范例代码 1
// 跑马灯实验
// 技术支持: www.openedv.com
// 广州市星翼电子科技有限公司
static struct rt_thread tid1;
ALIGN(RT_ALIGN_SIZE)
static rt_uint8_t entry1_stack[256];
static struct rt_thread tid2;
ALIGN(RT_ALIGN_SIZE)
static rt_uint8_t entry2_stack[512];
void thread_entry1(void* parameter);
void thread_entry2(void* parameter);
int main(void)
{
rt_err_t result;
LED_Init();
uart_init(72,115200); // 串口初始化为 115200
result = rt_thread_init(&tid1, "thread_entry1", thread_entry1, (void*)1,
&entry1_stack[0],
sizeof(entry1_stack), 6, 10);
if(result==RT_EOK) /* 如果返回正确,启动线程 1 */
rt_thread_startup(&tid1);
result = rt_thread_init(&tid2, "thread_entry2", thread_entry2, (void*)2,
&entry2_stack[0],
sizeof(entry2_stack), 5, 10);
if(result==RT_EOK) /* 如果返回正确,启动线程 2 */
rt_thread_startup(&tid2);
return 0;
}
void thread_entry1(void* parameter)
{
rt_thread_delay(100);
while(1)
{
LED0=0;
rt_thread_delay(100);
LED0=1;
rt_thread_delay(900);
//printf("This is thread 1!");
}
}
void thread_entry2(void* parameter)
{
rt_thread_delay(100);
while(1)
{
LED1=1;
rt_thread_delay(100);
LED1=0;
rt_thread_delay(900);
printf("This is thread 2!");
}
}
|
|