沁恒CH579移植RT-Thread

一、准备材料
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();
}

编译,收工啦

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值