一、准备材料
1、CH579M或CH579F评估板
2、MDK5
3、南京沁恒官网下载例程(http://www.wch.cn/)
二、打开工程文件
1、添加RT-Thread插件包
点击安装,等待安装完成保存退出
2、导入RT-Thread
3、根据需求更改rtconfig.h的文件
三、最重要的是board.c文件修改
/* 开发板硬件相关头文件 */
#include "board.h"
/* RT-Thread相关头文件 */
#include <rthw.h>
#include <rtthread.h>
#if defined(RT_USING_USER_MAIN) && defined(RT_USING_HEAP)
#define RT_HEAP_SIZE 1024
#define CH579M_SRAM1_START (0x20000000)
#define CH579M_SRAM1_END (CH579M_SRAM1_START + 32 * 1024) // 结束地址 = 0x20000000(基址) + 32K(RAM大小)
#if defined(__CC_ARM) || defined(__CLANG_ARM)
extern int Image$$RW_IRAM1$$ZI$$Limit; // RW_IRAM1,需与链接脚本中运行时域名相对应
#define HEAP_BEGIN ((void *)&Image$$RW_IRAM1$$ZI$$Limit)
#endif
#define HEAP_END CH579M_SRAM1_END
/* 从内部SRAM里面分配一部分静态内存来作为rtt的堆空间,这里配置为4KB */
//static uint32_t rt_heap[RT_HEAP_SIZE];
RT_WEAK void *rt_heap_begin_get(void)
{
//return rt_heap;
return HEAP_BEGIN;
}
RT_WEAK void *rt_heap_end_get(void)
{
//return rt_heap + RT_HEAP_SIZE;
return (rt_uint32_t*)HEAP_END;
}
#endif
/**
* @brief 开发板硬件初始化函数
* @param 无
* @retval 无
*
* @attention
* RTT把开发板相关的初始化函数统一放到board.c文件中实现,
* 当然,你想把这些函数统一放到main.c文件也是可以的。
*/
void rt_hw_board_init()
{
/* 初始化SysTick */
SysTick_Config( FREQ_SYS / RT_TICK_PER_SECOND );
/* 硬件BSP初始化统统放在这里,比如LED,串口,LCD等 */
/* 初始化开发板的串口 */
/* 配置串口1:先配置IO口模式,再配置串口 */
GPIOB_SetBits(GPIO_Pin_23);
GPIOB_ModeCfg( GPIO_Pin_23, GPIO_ModeOut_PP_5mA );
GPIOB_ModeCfg( GPIO_Pin_22, GPIO_ModeOut_PP_5mA );
GPIOB_SetBits(GPIO_Pin_22);
/* 调用组件初始化函数 (use INIT_BOARD_EXPORT()) */
#ifdef RT_USING_COMPONENTS_INIT
rt_components_board_init();
#endif
#if defined(RT_USING_CONSOLE) && defined(RT_USING_DEVICE)
rt_console_set_device(RT_CONSOLE_DEVICE_NAME);
#endif
#if defined(RT_USING_USER_MAIN) && defined(RT_USING_HEAP)
rt_system_heap_init(rt_heap_begin_get(), rt_heap_end_get());
#endif
GPIOA_SetBits(GPIO_Pin_9);
GPIOA_ModeCfg(GPIO_Pin_8, GPIO_ModeIN_PU); // RXD-配置上拉输入
GPIOA_ModeCfg(GPIO_Pin_9, GPIO_ModeOut_PP_5mA); // TXD-配置推挽输出,注意先让IO口输出高电平
UART1_DefInit();
}
/**
* @brief SysTick中断服务函数
* @param 无
* @retval 无
*
* @attention
* SysTick中断服务函数在固件库文件stm32f10x_it.c中也定义了,而现在
* 在board.c中又定义一次,那么编译的时候会出现重复定义的错误,解决
* 方法是可以把stm32f10x_it.c中的注释或者删除即可。
*/
void SysTick_Handler(void)
{
/* 进入中断 */
rt_interrupt_enter();
/* 更新时基 */
rt_tick_increase();
/* 离开中断 */
rt_interrupt_leave();
}
/**
* @brief 重映射串口DEBUG_USARTx到rt_kprintf()函数
* Note:DEBUG_USARTx是在bsp_usart.h中定义的宏,默认使用串口1
* @param str:要输出到串口的字符串
* @retval 无
*
* @attention
*
*/
void rt_hw_console_output(const char *str)
{
/* 进入临界段 */
rt_enter_critical();
/* 直到字符串结束 */
while (*str!='\0')
{
/* 换行 */
if (*str=='\n')
{
UART1_SendByte('\r');
while (R8_UART1_TFC == UART_FIFO_SIZE);
}
UART1_SendByte( *str++);
while (R8_UART1_TFC == UART_FIFO_SIZE);
}
/* 退出临界段 */
rt_exit_critical();
}
编译,收工啦