1 准备好开发环境,Keil IDE
2 基于您的STM32F103芯片的开发板实现简单的工程,如串口打印和LED亮灯即可。
本经验使用的工程,加载的是STM32的库版本为V3.0.0。
3 下载rt-thread代码库
①正常情况下可以通过Keil的Pack Installer下载rt-thread代码库,但是由于国内网络原因,链接不了Keil的官网库。因此通过②方式下载更能理解创建工程的过程。
②进入https://www.rt-thread.org/page/download.html官网下载官方最新的库,此实验工程采用极简版硬实时内核即可
4 下载库rt-thread-3.1.3
注意阅读README.md,可以通过Notepad或记事本打开。
6 通过Keil的菜单,Manage Project Items加入如下图的代码。
7 通过工程配置,添加rt-thread-3.1.3的库代码的路径
8 配置rtconfig.h
/* RT-Thread config file */
#ifndef __RTTHREAD_CFG_H__
#define __RTTHREAD_CFG_H__
#define RT_USING_FINSH
// <<< Use Configuration Wizard in Context Menu >>>
// <h>Basic Configuration
// <o>Maximal level of thread priority <8-256>
...........
#define __FINSH_THREAD_PRIORITY 1
#define FINSH_THREAD_PRIORITY 2
...........
// <<< end of configuration section >>>
#endif
9 修改board.c
...........
#include "stm32f10x.h"
#if 0
#define _SCB_BASE (0xE000E010UL)
#define _SYSTICK_CTRL (*(rt_uint32_t *)(_SCB_BASE + 0x0))
#define _SYSTICK_LOAD (*(rt_uint32_t *)(_SCB_BASE + 0x4))
#define _SYSTICK_VAL (*(rt_uint32_t *)(_SCB_BASE + 0x8))
#define _SYSTICK_CALIB (*(rt_uint32_t *)(_SCB_BASE + 0xC))
#define _SYSTICK_PRI (*(rt_uint8_t *)(0xE000ED23UL))
...........
#endif
...........
void rt_hw_board_init()
{
uint32_t SystemCoreClock = 72000000;
#if 0
/* System Clock Update */
SystemCoreClockUpdate();
/* System Tick Configuration */
_SysTick_Config(SystemCoreClock / RT_TICK_PER_SECOND);
#endif
SysTick_Config(SystemCoreClock / RT_TICK_PER_SECOND);
/* Call components board initial (use INIT_BOARD_EXPORT()) */
#ifdef RT_USING_COMPONENTS_INIT
rt_components_board_init();
#endif
#if defined(RT_USING_USER_MAIN) && defined(RT_USING_HEAP)
rt_system_heap_init(rt_heap_begin_get(), rt_heap_end_get());
#endif
}
void SysTick_Handler(void)
{
...........
}
10 在board.c添加rt_hw_console_output和rt_hw_console_getchar函数,即重定义rt_kprintf函数以及数据接收。
目的是以串口 UART 作为 FinSH组件 的输入输出端口与 PC 进行通信。
void rt_hw_console_output(const char *str)
{
/* 进入临界区 */
rt_enter_critical();
/* 直到字符串结束 */
while (*str!='\0')
{
if (*str=='\n')
{
USART_SendData(USART1, '\r');
while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
}
USART_SendData(USART1, *str++);
while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
}
/* 退出临界区 */
rt_exit_critical();
}
char rt_hw_console_getchar(void)
{
int ch = -1;
ch = USART_ReceiveData(USART1);
return ch;
}
11 编译和链接工程,成功后,下载HEX或BIN文件到开发板的STM32芯片
12 与PC连接好串口,打开串口工具SSCOM,开启开发板电源。
13 串口工具SSCOM内容显示如下
14 进行串口的Finsh Shell操作
至此RT-Thread系统运行。
创建任务,实现其他功能。