0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

移植RT-Thread到靈動(dòng)微MM32F5265開(kāi)發(fā)板教程

安芯教育科技 ? 來(lái)源:極術(shù)社區(qū) ? 2025-03-17 10:16 ? 次閱讀

本文轉(zhuǎn)載于極術(shù)社區(qū)

作者:曾是一顆薏米

前言

近期,筆者有幸獲得靈動(dòng)微 MM32F5265 開(kāi)發(fā)板的體驗(yàn)資格。MM32F5260 搭載了 arm china "Star-MC1 內(nèi)核"處理器,擁有高性能,主打家電和工業(yè)等高可靠性應(yīng)用領(lǐng)域。 總結(jié)一下,有以下亮點(diǎn):

本土團(tuán)隊(duì)打造,完全自主可控,采用全國(guó)產(chǎn)化供應(yīng)鏈;

基于 Armv8-M 架構(gòu),帶有 L1 I-Cache & D-Cache,對(duì)比市面主流的 M3/M4,有 20%性能提升;

通過(guò) I-Cache 實(shí)現(xiàn)對(duì) flash 的零延遲訪問(wèn),擁有零延遲 AHB 總線矩陣,支持多并發(fā)總線;

擁有信號(hào)間互聯(lián)矩陣,可對(duì)多個(gè)事件進(jìn)行邏輯組合,可實(shí)現(xiàn)較為復(fù)雜的功能;

移植

本次 rt-thread 的移植參考了 “Rice 我叫加飯?” 的博文:https://aijishu.com/a/1060000000347637 參考代碼: https://gitee.com/RiceChen0/mm32f5270_rtt(感謝原作者的付出) 這里我重點(diǎn)說(shuō)一下不一樣的地方:

1.打印重定向到虛擬串口

雖然 Mini-F5265-OB 開(kāi)發(fā)板上沒(méi)有板載 CH340,但這也不影響交互功能,官方提供了一種新的途徑:通過(guò)板載的 MM32-LINK-OB 的虛擬串口來(lái)實(shí)現(xiàn)串口的交互。 簡(jiǎn)述實(shí)現(xiàn)的流程:

PC 通過(guò) USB 連接板載的 MM32-LINK-OB;

板載的 MM32-LINK-OB 將 USB 數(shù)據(jù)轉(zhuǎn)發(fā)成 SWD 接口信號(hào)和串口的 tx/rx 信號(hào);

最終信號(hào)達(dá)到 Mini-F5265-OB 開(kāi)發(fā)板,實(shí)現(xiàn)串口的交互和程序的燒寫(xiě)功能;

板載的 MM32-LINK-OB,連接如下圖所示:

33704220-faea-11ef-9310-92fbcf53809c.png

Mini-F5265-OB 開(kāi)發(fā)板,連接如下圖所示:

33aad674-faea-11ef-9310-92fbcf53809c.png

因此,移植的第一步就是要用上虛擬串口。

通過(guò)查看上述的原理圖可知虛擬串口用到 uart3。

修改 drv_uart.h,添加 uart3 支持:

#if defined(BSP_USING_UART3)
#ifndef UART3_CONFIG
#define UART3_CONFIG                                
    {                                               
        .name           = "uart3",                  
        .rx_gpiox       = GPIOC,                    
        .rx_rcc_clock   = RCC_AHBPeriph_GPIOC,       
        .rx_pin         = GPIO_Pin_11,              
        .rx_gpio_af     = GPIO_AF_7,                
        .tx_gpiox       = GPIOB,                    
        .tx_rcc_clock   = RCC_AHBPeriph_GPIOC,      
        .tx_pin         = GPIO_Pin_10,              
        .tx_gpio_af     = GPIO_AF_7,                
        .uart_rcc_clock = RCC_APB1Periph_UART3,     
        .uartx          = UART3,                    
        .irq_type       = UART3_IRQn,               
    }
#endif /* UART3_CONFIG */
#endif /* BSP_USING_UART3 */

修改 drv_uart.c,uart3 使用的 PC10 和 PC11 需要初始化:

static int rt_hw_uart_gpio_init(struct mm32_uart_config *cfg)
{
    GPIO_InitTypeDef GPIO_InitStruct;


    RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART3, ENABLE);
    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC, ENABLE);


    GPIO_PinAFConfig(GPIOC, GPIO_PinSource10, GPIO_AF_7);
    GPIO_PinAFConfig(GPIOC, GPIO_PinSource11, GPIO_AF_7);


    GPIO_StructInit(&GPIO_InitStruct);
    GPIO_InitStruct.GPIO_Pin   = GPIO_Pin_10;
    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_High;
    GPIO_InitStruct.GPIO_Mode  = GPIO_Mode_AF_PP;
    GPIO_Init(GPIOC, &GPIO_InitStruct);


    GPIO_StructInit(&GPIO_InitStruct);
    GPIO_InitStruct.GPIO_Pin  = GPIO_Pin_11;
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU;
    GPIO_Init(GPIOC, &GPIO_InitStruct);


    return RT_EOK;
}
修改 drv_uart.c,實(shí)現(xiàn) mm32_uart_ops(由于篇幅原因,這里僅截取關(guān)鍵部分)
static rt_err_t mm32_control(struct rt_serial_device *serial,
                            int                      cmd,
                            void                     *arg)
{
    struct mm32_uart *uart;
    rt_ubase_t ctrl_arg = (rt_ubase_t)arg;


    RT_ASSERT(serial != RT_NULL);


    uart = rt_container_of(serial, struct mm32_uart, serial);


    switch (cmd)
    {
        case RT_DEVICE_CTRL_SET_INT:
        {
            UART_ITConfig(uart->config->uartx, UART_IT_RX, ENABLE);
            NVIC_EnableIRQ(uart->config->irq_type);


            break;
        }
        case RT_DEVICE_CTRL_CLR_INT:
        {
            UART_ITConfig(uart->config->uartx, UART_IT_RX, DISABLE);
            NVIC_DisableIRQ(uart->config->irq_type);
            break;
        }


    }
    return 0;
}


static int mm32_putc(struct rt_serial_device *serial, char c)
{
    struct mm32_uart *uart;


    RT_ASSERT(serial != RT_NULL);


    uart = rt_container_of(serial, struct mm32_uart, serial);


    UART_SendData(uart->config->uartx, (uint8_t)(c));
    while (RESET == UART_GetFlagStatus(uart->config->uartx, UART_FLAG_TXC)) {};


    return 1;
}


static int mm32_getc(struct rt_serial_device *serial)
{
    struct mm32_uart *uart;
    int ch = -1;


    RT_ASSERT(serial != RT_NULL);


    uart = rt_container_of(serial, struct mm32_uart, serial);


    if(UART_GetFlagStatus(uart->config->uartx, UART_FLAG_RXAVL))
    {
        ch = UART_ReceiveData(uart->config->uartx);
        return ch;
    }


    return -1;
}


static void uart_isr(struct rt_serial_device *serial)
{
    struct mm32_uart *uart;


    RT_ASSERT(serial != RT_NULL);


    uart = rt_container_of(serial, struct mm32_uart, serial);


    if(SET == UART_GetFlagStatus(uart->config->uartx, UART_IT_RX))
    {
        rt_hw_serial_isr(serial, RT_SERIAL_EVENT_RX_IND);
    }
}


void UART3_IRQHandler(void)
{
    rt_interrupt_enter();


    uart_isr(&(uart_obj[UART3_INDEX].serial));


    rt_interrupt_leave();
}

2.添加 hal 庫(kù)等文件

從官方的提供的例程資料中找到 HAL_Lib 文件夾,將里面的頭文件和源文件拷貝工程的 libraries/drivers 目錄里面。

修改 libraries/drivers 的 mm32f5260.h,定義“USE_STDPERIPH_DRIVER”的宏。(注意官方提供的默認(rèn)沒(méi)有定義該宏,需要定義后才會(huì)編譯標(biāo)準(zhǔn)外設(shè)驅(qū)動(dòng)庫(kù))

在 libraries/drivers 目錄創(chuàng)建 hal_common.h,并在里面包含"hal_conf.h",目的是在外面可以調(diào)到 hal 層的函數(shù)接口。

將官方提供的 core_starmc1.h 拷貝到工程的 libraries/libraries/CMSIS/Include 目錄下,替換原來(lái)的 core_star.h。

將官方提供的 source 文件夾里面的文件整理到 libraries 和 mdk 目錄。

注:以上僅列出關(guān)鍵部分,其余詳見(jiàn)代碼倉(cāng)庫(kù)。

3.實(shí)現(xiàn) systisk

跟以往不同的是:本次使用的 SDK 里面已經(jīng)實(shí)現(xiàn)了對(duì)系統(tǒng)時(shí)鐘的初始化(system_mm32f5260.c),我們僅需實(shí)現(xiàn) systisk 即可,代碼如下:

void SysTick_Init(void)
{
    uint32_t reload = 0;


    SysTick->CTRL &= (uint32_t)0xFFFFFFFB;


    reload = CLOCK_SYSTICK_FREQ/RT_TICK_PER_SECOND;
    reload--;


    SysTick->CTRL |= SysTick_CTRL_TICKINT_Msk;
    SysTick->LOAD = reload;
    SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;
}


void SysTick_Handler(void)
{
    /* enter interrupt */
    rt_interrupt_enter();


    rt_tick_increase();


    /* leave interrupt */
    rt_interrupt_leave();
}


void rt_hw_board_init()
{
    SysTick_Init();
    SystemClock_Config();


#if defined(RT_USING_HEAP)
    rt_system_heap_init(HEAP_BEGIN, (void *)HEAP_END);
#endif


#ifdef RT_USING_SERIAL
    extern int rt_hw_uart_init(void);
    rt_hw_uart_init();
#endif


#if defined(RT_USING_CONSOLE) && defined(RT_USING_DEVICE)
   rt_console_set_device(RT_CONSOLE_DEVICE_NAME);
#endif


#ifdef RT_USING_COMPONENTS_INIT
    rt_components_board_init();
#endif
}

移植效果

到此為止,基本上已經(jīng)完成了移植工作。

編譯,燒寫(xiě),可以到 rt-thread 的打印:

33ef86d4-faea-11ef-9310-92fbcf53809c.png

查看開(kāi)發(fā)板可看到 LED2 隔 500ms 閃爍一次。

總結(jié)

本次移植過(guò)程修改的地方不多,主要是因?yàn)?SDK 變動(dòng)而做的修改。在此,可以看到靈動(dòng)微在維護(hù) hal 庫(kù)做出的努力。畢竟 hal 層兼容性越強(qiáng),可以吸收更多潛在用戶,節(jié)省用戶熟悉 SDK 的時(shí)間,這也是國(guó)產(chǎn)芯片替代的必經(jīng)之路。

最后,感謝靈動(dòng)微和極術(shù)社區(qū)提供的平臺(tái),也祝愿國(guó)產(chǎn)芯片越來(lái)越好。

倉(cāng)庫(kù)代碼: https://gitee.com/sakura96888/mm32f5260_rtt

轉(zhuǎn)自 | 極術(shù)社區(qū)

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 處理器
    +關(guān)注

    關(guān)注

    68

    文章

    19553

    瀏覽量

    231904
  • 移植
    +關(guān)注

    關(guān)注

    1

    文章

    388

    瀏覽量

    28321
  • 串口
    +關(guān)注

    關(guān)注

    14

    文章

    1573

    瀏覽量

    77744
  • 開(kāi)發(fā)板
    +關(guān)注

    關(guān)注

    25

    文章

    5227

    瀏覽量

    99292
  • RT-Thread
    +關(guān)注

    關(guān)注

    31

    文章

    1324

    瀏覽量

    40873
  • 靈動(dòng)微
    +關(guān)注

    關(guān)注

    4

    文章

    176

    瀏覽量

    22797
  • MM32
    +關(guān)注

    關(guān)注

    1

    文章

    107

    瀏覽量

    870

原文標(biāo)題:開(kāi)發(fā)板測(cè)評(píng)|移植 RT-Thread 到 MM32F5265,含調(diào)通串口+LED

文章出處:【微信號(hào):Ithingedu,微信公眾號(hào):安芯教育科技】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 0人收藏

    評(píng)論

    相關(guān)推薦

    如何將RT-Thread移植NXP MCUXPressoIDE上

    RT-Thread默認(rèn)支持的IDE只有IAR 和 Keil, 那如何將RT-Thread移植NXP MCUXPressoIDE上呢?本文內(nèi)容比較簡(jiǎn)單但稍有瑣碎,希望對(duì)有需要的小伙伴有
    的頭像 發(fā)表于 02-13 10:37 ?1319次閱讀
    如何將<b class='flag-5'>RT-Thread</b><b class='flag-5'>移植</b><b class='flag-5'>到</b>NXP MCUXPressoIDE上

    RT-Thread上CAN實(shí)踐

    開(kāi)箱測(cè)試RT-Thread官方已完成了對(duì)英飛凌XMC7200EVK的移植,通過(guò)shell可以看到做好了uart3的console。本文將介紹如何進(jìn)行RT-ThreadCan移植。接下來(lái)
    的頭像 發(fā)表于 11-13 01:03 ?1587次閱讀
    <b class='flag-5'>RT-Thread</b>上CAN實(shí)踐

    基于恩智浦FRDM-MCXA153開(kāi)發(fā)板實(shí)現(xiàn)RT-Thread的ADC驅(qū)動(dòng)

    數(shù)轉(zhuǎn)換器(ADC)是現(xiàn)代嵌入式系統(tǒng)中不可或缺的組件,它能將連續(xù)的模擬信號(hào)轉(zhuǎn)換為離散的數(shù)字信號(hào)。本文將深入探討如何在NXP的FRDM-MCXA153開(kāi)發(fā)板上實(shí)現(xiàn)和使用RT-Thread的ADC驅(qū)動(dòng),為開(kāi)發(fā)者提供一個(gè)全面而實(shí)用的指南
    的頭像 發(fā)表于 11-01 12:29 ?643次閱讀
    基于恩智浦FRDM-MCXA153<b class='flag-5'>開(kāi)發(fā)板</b>實(shí)現(xiàn)<b class='flag-5'>RT-Thread</b>的ADC驅(qū)動(dòng)

    開(kāi)源共生 商業(yè)共贏 | RT-Thread 2024開(kāi)發(fā)者大會(huì)報(bào)名啟動(dòng)!

    親愛(ài)的RT-Thread開(kāi)發(fā)者我們很高興地宣布,一年一度的RDC(RT-ThreadDeveloperConference,RT-Thread開(kāi)發(fā)
    的頭像 發(fā)表于 10-29 08:06 ?657次閱讀
    開(kāi)源共生 商業(yè)共贏 | <b class='flag-5'>RT-Thread</b> 2024<b class='flag-5'>開(kāi)發(fā)</b>者大會(huì)報(bào)名啟動(dòng)!

    NXP FRDM-MCXC444開(kāi)發(fā)板RT-Thread環(huán)境下的上手過(guò)程

    NXP FRDM-MCXC444開(kāi)發(fā)板是一款基于MCX C444 MCU的高性能開(kāi)發(fā)板,它集成了豐富的硬件資源和接口,支持快速原型設(shè)計(jì)。本文將為讀者提供一份詳細(xì)的RT-Thread上手指南,幫助大家輕松玩轉(zhuǎn)這款
    的頭像 發(fā)表于 10-12 11:51 ?584次閱讀
    NXP FRDM-MCXC444<b class='flag-5'>開(kāi)發(fā)板</b>在<b class='flag-5'>RT-Thread</b>環(huán)境下的上手過(guò)程

    rt-thread bsp里esp32c3里編譯出的bin文件燒esp32的開(kāi)發(fā)板上運(yùn)行提示chipid不對(duì),為什么?

    rt-thread bsp里esp32c3里編譯出的bin文件燒esp32的開(kāi)發(fā)板上 運(yùn)行提示chipid不對(duì),是否有方法修改能支持esp32 系列的開(kāi)發(fā)板
    發(fā)表于 09-27 10:01

    【QEMU系列】不用開(kāi)發(fā)板運(yùn)行RT-Thread指南-ARM架構(gòu)

    簡(jiǎn)介在物聯(lián)網(wǎng)和嵌入式系統(tǒng)的開(kāi)發(fā)中,RT-Thread操作系統(tǒng)憑借其小巧、高效和靈活的特點(diǎn),受到了越來(lái)越多開(kāi)發(fā)者的青睞。然而,對(duì)于很多剛剛接觸RT-Thread
    的頭像 發(fā)表于 08-09 08:35 ?1162次閱讀
    【QEMU系列】不用<b class='flag-5'>開(kāi)發(fā)板</b>運(yùn)行<b class='flag-5'>RT-Thread</b>指南-ARM架構(gòu)

    2024 RT-Thread全球巡回 線下培訓(xùn)火熱來(lái)襲!

    親愛(ài)的RT-Thread社區(qū)成員們:我們非常高興地宣布,2024年RT-Thread全球開(kāi)發(fā)者線下培訓(xùn)即將拉開(kāi)帷幕!24年全球巡回培訓(xùn)將覆蓋超10座城市及國(guó)家,為開(kāi)發(fā)者提供一個(gè)深入學(xué)習(xí)
    的頭像 發(fā)表于 08-07 08:35 ?1866次閱讀
    2024 <b class='flag-5'>RT-Thread</b>全球巡回 線下培訓(xùn)火熱來(lái)襲!

    【好書(shū)推薦】RT-Thread設(shè)備驅(qū)動(dòng)開(kāi)發(fā)指南

    近年來(lái)國(guó)內(nèi)芯片產(chǎn)業(yè)和物聯(lián)網(wǎng)產(chǎn)業(yè)的快速崛起,行業(yè)發(fā)展迫切需要更多人才,尤其需要掌握嵌入式操作系統(tǒng)等底層技術(shù)的人才。隨著RT-Thread被更廣泛地應(yīng)用于行業(yè)中,開(kāi)發(fā)者對(duì)嵌入式驅(qū)動(dòng)開(kāi)發(fā)的需求越來(lái)越
    的頭像 發(fā)表于 08-01 08:35 ?863次閱讀
    【好書(shū)推薦】<b class='flag-5'>RT-Thread</b>設(shè)備驅(qū)動(dòng)<b class='flag-5'>開(kāi)發(fā)</b>指南

    開(kāi)發(fā)者分享 | 基于先楫RT-Thread BSP,使用CLion開(kāi)發(fā)應(yīng)用

    本期開(kāi)發(fā)者:朱彥祖RT-Thread資深工程師,HPM6700/6400元老級(jí)開(kāi)發(fā)者及骨灰級(jí)用戶,先輯生態(tài)社區(qū)常駐優(yōu)秀開(kāi)發(fā)者,江湖人稱杭州吳彥祖。背景最近在使用先輯HPM6750
    的頭像 發(fā)表于 06-07 08:17 ?3196次閱讀
    <b class='flag-5'>開(kāi)發(fā)</b>者分享 | 基于先楫<b class='flag-5'>RT-Thread</b> BSP,使用CLion<b class='flag-5'>開(kāi)發(fā)</b>應(yīng)用

    先楫半導(dǎo)體所有開(kāi)發(fā)板已上RT-Thread主線啦

    目前,先楫半導(dǎo)體在RT-Thread主線支持的開(kāi)發(fā)板包含以下這些
    的頭像 發(fā)表于 06-05 08:17 ?708次閱讀
    先楫半導(dǎo)體所有<b class='flag-5'>開(kāi)發(fā)板</b>已上<b class='flag-5'>RT-Thread</b>主線啦

    6月6日杭州站RT-Thread線下workshop,探索RT-Thread混合部署新模式!

    6月6日下午我們將在杭州舉辦RT-Thread混合部署線下workshop,在瑞芯RK3568平臺(tái)上實(shí)現(xiàn)同時(shí)運(yùn)行RT-Thread和linux,本次workshop邀請(qǐng)到RT-Thread
    的頭像 發(fā)表于 05-28 08:35 ?532次閱讀
    6月6日杭州站<b class='flag-5'>RT-Thread</b>線下workshop,探索<b class='flag-5'>RT-Thread</b>混合部署新模式!

    4月25日北京站RT-Thread線下workshop,探索RT-Thread混合部署新模式

    4月25日,下午我們將在北京舉辦RT-Thread混合部署線下workshop,在瑞芯RK3568平臺(tái)上實(shí)現(xiàn)同時(shí)運(yùn)行RT-Thread和linux,本次workshop邀請(qǐng)到RT-Threa
    的頭像 發(fā)表于 04-16 08:35 ?512次閱讀
    4月25日北京站<b class='flag-5'>RT-Thread</b>線下workshop,探索<b class='flag-5'>RT-Thread</b>混合部署新模式

    4月10日深圳場(chǎng)RT-Thread線下workshop,探索RT-Thread混合部署新模式!

    4月10日我們將在深圳福田舉辦RT-Thread混合部署線下workshop,在瑞芯RK3568平臺(tái)上實(shí)現(xiàn)同時(shí)運(yùn)行RT-Thread和linux,本次workshop邀請(qǐng)到RT-Thread
    的頭像 發(fā)表于 03-27 11:36 ?960次閱讀
    4月10日深圳場(chǎng)<b class='flag-5'>RT-Thread</b>線下workshop,探索<b class='flag-5'>RT-Thread</b>混合部署新模式!

    4月10日深圳場(chǎng)RT-Thread線下workshop,探索RT-Thread混合部署新模式!

    4月10日我們將在深圳福田舉辦RT-Thread混合部署線下workshop,在瑞芯RK3568平臺(tái)上實(shí)現(xiàn)同時(shí)運(yùn)行RT-Thread和linux,本次workshop邀請(qǐng)到RT-Thread
    的頭像 發(fā)表于 03-27 08:34 ?633次閱讀
    4月10日深圳場(chǎng)<b class='flag-5'>RT-Thread</b>線下workshop,探索<b class='flag-5'>RT-Thread</b>混合部署新模式!

    電子發(fā)燒友

    中國(guó)電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會(huì)員交流學(xué)習(xí)
    • 獲取您個(gè)性化的科技前沿技術(shù)信息
    • 參加活動(dòng)獲取豐厚的禮品