打印
[单片机芯片]

沁恒CH579移植RT-Thread

[复制链接]
6562|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tpgf|  楼主 | 2021-10-1 19:19 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
一、准备材料
1、CH579M或CH579F评估板
2、MDK5
3、南京沁恒官网下载例程(http://www.wch.cn/


二、打开工程文件
1、添加RT-Thread插件包


点击安装,等待安装完成保存退出
2、导入RT-Thread


3、根据需求更改rtconfig.h的文件


使用特权

评论回复
沙发
tpgf|  楼主 | 2021-10-1 19:20 | 只看该作者
三、最重要的是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();
}


使用特权

评论回复
板凳
uiint| | 2021-10-3 21:00 | 只看该作者
这个keil带的pack吗   

使用特权

评论回复
地板
hellosdc| | 2021-10-3 21:00 | 只看该作者
CH579F评估板是什么内核的   

使用特权

评论回复
5
mituzu| | 2021-10-3 21:01 | 只看该作者
使用的RT-Thread 哪个bsp?  

使用特权

评论回复
6
suzhanhua| | 2021-10-3 21:01 | 只看该作者
只能使用RT-Thread nano了吧   

使用特权

评论回复
7
xietingfeng| | 2021-10-3 21:01 | 只看该作者
tpgf 发表于 2021-10-1 19:20
三、最重要的是board.c文件修改

RT-Thread 用的哪个汇编文件  

使用特权

评论回复
8
isseed| | 2021-10-3 21:02 | 只看该作者
tpgf 发表于 2021-10-1 19:20
三、最重要的是board.c文件修改

没有完整的工程文件吗   

使用特权

评论回复
9
wangdezhi| | 2021-10-3 21:02 | 只看该作者
楼主使用的是哪个版本的keil?   

使用特权

评论回复
10
biechedan| | 2021-10-3 21:02 | 只看该作者
CH579不是RISC-V芯片吗  

使用特权

评论回复
11
chenci2013| | 2021-10-3 21:02 | 只看该作者
不能使用mournriver studio开发吗  

使用特权

评论回复
12
gygp| | 2021-10-3 21:03 | 只看该作者
官网提供例程了吗   

使用特权

评论回复
13
zhaor| | 2021-10-4 21:23 | 只看该作者
这个好,有空试试!

使用特权

评论回复
14
onlycook| | 2021-10-5 10:31 | 只看该作者
例程哪里有了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2028

主题

15903

帖子

13

粉丝