在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

移植RT-Thread到靈動微MM32F5265開發板教程

安芯教育科技 ? 來源:極術社區 ? 2025-03-17 10:16 ? 次閱讀

本文轉載于極術社區

作者:曾是一顆薏米

前言

近期,筆者有幸獲得靈動微 MM32F5265 開發板的體驗資格。MM32F5260 搭載了 arm china "Star-MC1 內核"處理器,擁有高性能,主打家電和工業等高可靠性應用領域。 總結一下,有以下亮點:

本土團隊打造,完全自主可控,采用全國產化供應鏈;

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

通過 I-Cache 實現對 flash 的零延遲訪問,擁有零延遲 AHB 總線矩陣,支持多并發總線;

擁有信號間互聯矩陣,可對多個事件進行邏輯組合,可實現較為復雜的功能;

移植

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

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

雖然 Mini-F5265-OB 開發板上沒有板載 CH340,但這也不影響交互功能,官方提供了一種新的途徑:通過板載的 MM32-LINK-OB 的虛擬串口來實現串口的交互。 簡述實現的流程:

PC 通過 USB 連接板載的 MM32-LINK-OB;

板載的 MM32-LINK-OB 將 USB 數據轉發成 SWD 接口信號和串口的 tx/rx 信號;

最終信號達到 Mini-F5265-OB 開發板,實現串口的交互和程序的燒寫功能;

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

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

Mini-F5265-OB 開發板,連接如下圖所示:

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

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

通過查看上述的原理圖可知虛擬串口用到 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,實現 mm32_uart_ops(由于篇幅原因,這里僅截取關鍵部分)
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 庫等文件

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

修改 libraries/drivers 的 mm32f5260.h,定義“USE_STDPERIPH_DRIVER”的宏。(注意官方提供的默認沒有定義該宏,需要定義后才會編譯標準外設驅動庫)

在 libraries/drivers 目錄創建 hal_common.h,并在里面包含"hal_conf.h",目的是在外面可以調到 hal 層的函數接口。

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

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

注:以上僅列出關鍵部分,其余詳見代碼倉庫。

3.實現 systisk

跟以往不同的是:本次使用的 SDK 里面已經實現了對系統時鐘的初始化(system_mm32f5260.c),我們僅需實現 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
}

移植效果

到此為止,基本上已經完成了移植工作。

編譯,燒寫,可以到 rt-thread 的打印:

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

查看開發板可看到 LED2 隔 500ms 閃爍一次。

總結

本次移植過程修改的地方不多,主要是因為 SDK 變動而做的修改。在此,可以看到靈動微在維護 hal 庫做出的努力。畢竟 hal 層兼容性越強,可以吸收更多潛在用戶,節省用戶熟悉 SDK 的時間,這也是國產芯片替代的必經之路。

最后,感謝靈動微和極術社區提供的平臺,也祝愿國產芯片越來越好。

倉庫代碼: https://gitee.com/sakura96888/mm32f5260_rtt

轉自 | 極術社區

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 處理器
    +關注

    關注

    68

    文章

    19553

    瀏覽量

    231903
  • 移植
    +關注

    關注

    1

    文章

    388

    瀏覽量

    28321
  • 串口
    +關注

    關注

    14

    文章

    1573

    瀏覽量

    77743
  • 開發板
    +關注

    關注

    25

    文章

    5225

    瀏覽量

    99275
  • RT-Thread
    +關注

    關注

    31

    文章

    1323

    瀏覽量

    40873

原文標題:開發板測評|移植 RT-Thread 到 MM32F5265,含調通串口+LED

文章出處:【微信號:Ithingedu,微信公眾號:安芯教育科技】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    靈動】FTHR-G0140開發板移植RT-Thread驅動

    靈動G0140移植RT-Thread驅動。
    的頭像 發表于 06-05 13:45 ?21.7w次閱讀
    【<b class='flag-5'>靈動</b><b class='flag-5'>微</b>】FTHR-G0140<b class='flag-5'>開發板</b><b class='flag-5'>移植</b><b class='flag-5'>RT-Thread</b>驅動

    移植RT-Thread nanoCW32L083

    移植RT-Thread NanoCW32L083開發板上,并成功運行。
    的頭像 發表于 07-03 09:04 ?2.2w次閱讀
    <b class='flag-5'>移植</b><b class='flag-5'>RT-Thread</b> nano<b class='flag-5'>到</b>CW32L083

    RT-thread源碼移植STM32F10x和STM32F4xx

    RT-thread源碼移植STM32F10x和STM32F4xx: 一、源碼下載 點擊入門->下載 ? 在歷史版本里邊隨便選取一個 ? 會
    的頭像 發表于 11-15 09:38 ?2931次閱讀
    <b class='flag-5'>RT-thread</b>源碼<b class='flag-5'>移植</b><b class='flag-5'>到</b>STM32<b class='flag-5'>F</b>10x和STM32<b class='flag-5'>F</b>4xx

    STM32 BSP怎樣快速移植RT-ThreadSTM32開發板上去

    STM32 BSP怎樣快速移植RT-ThreadSTM32開發板上去?有哪些步驟?
    發表于 10-19 06:51

    移植RT-Thread的原理與方法

    大家好我是驚覺。是的,失蹤人口回來了。最近參加了rt-thread的國產MCU移植活動,移植rt-thread華大的HC32L196。rt
    的頭像 發表于 09-17 09:41 ?8067次閱讀

    【國產MCU移植】HC32F460基于Keil MDK 移植 RT-Thread Nano

    【國產MCU移植】HC32F460基于Keil MDK 移植 RT-Thread Nano
    發表于 11-18 18:51 ?66次下載
    【國產MCU<b class='flag-5'>移植</b>】HC32<b class='flag-5'>F</b>460基于Keil MDK <b class='flag-5'>移植</b> <b class='flag-5'>RT-Thread</b> Nano

    【國產MCU移植移植RT-Thread國產芯片HC32F460PETB

    【國產MCU移植移植RT-Thread國產芯片HC32F460PETB
    發表于 11-23 18:06 ?37次下載
    【國產MCU<b class='flag-5'>移植</b>】<b class='flag-5'>移植</b><b class='flag-5'>RT-Thread</b><b class='flag-5'>到</b>國產芯片HC32<b class='flag-5'>F</b>460PETB

    RT-Thread移植GD32F150系列MCU

    RT-Thread移植GD32F150系列MCU
    發表于 12-07 19:36 ?7次下載
    <b class='flag-5'>RT-Thread</b><b class='flag-5'>移植</b><b class='flag-5'>到</b>GD32<b class='flag-5'>F</b>150系列MCU

    RT-Thread系統移植STM32f103

    RT-Thread系統移植STM32f103
    發表于 12-09 12:51 ?26次下載
    <b class='flag-5'>RT-Thread</b>系統<b class='flag-5'>移植</b><b class='flag-5'>到</b>STM32<b class='flag-5'>f</b>103

    基于 Keil MDK 移植 RT-Thread Nano

    本文介紹如何基于 Keil MDK 移植 RT-Thread Nano ,并以一個 stm32f103 的基礎工程作為示例進行講解。 RT-Thread Nano 已集成在 Keil
    發表于 01-26 17:04 ?16次下載
    基于 Keil MDK <b class='flag-5'>移植</b> <b class='flag-5'>RT-Thread</b> Nano

    RT-Thread文檔_其他開發板 上手指南

    RT-Thread文檔_其他開發板 上手指南
    發表于 02-22 18:27 ?0次下載
    <b class='flag-5'>RT-Thread</b>文檔_其他<b class='flag-5'>開發板</b> 上手指南

    RT-Thread文檔_RT-Thread SMP 介紹與移植

    RT-Thread文檔_RT-Thread SMP 介紹與移植
    發表于 02-22 18:31 ?9次下載
    <b class='flag-5'>RT-Thread</b>文檔_<b class='flag-5'>RT-Thread</b> SMP 介紹與<b class='flag-5'>移植</b>

    機智云設備移植RT-Thread

    開發環境:Keil版本:V5.30RT-Thread版本:3.1.5STM32cubeMX:V6.0.1開發板MCU:STM32F103機智云平臺生成的應用代碼是裸機版本的,而在實際應
    的頭像 發表于 04-19 18:39 ?1070次閱讀
    機智云設備<b class='flag-5'>移植</b><b class='flag-5'>RT-Thread</b>

    RT-Thread qemu mps2-an385 bsp移植制作 :環境搭建篇

    最近打算系統地研究一下 RT-Thread,包括 RT-Thread BSP 的移植,由于一直在使用 QEMU 進行一些軟件功能的驗證,qemu 支持很多的CPU 與 開發板,所以想
    的頭像 發表于 08-02 14:45 ?785次閱讀
    <b class='flag-5'>RT-Thread</b> qemu mps2-an385 bsp<b class='flag-5'>移植</b>制作 :環境搭建篇

    rt-studio潘多拉開發板最新rt-thread不能運行解決辦法

    rt-studio 上 選擇基于開發板的項目,選擇潘多拉,rt-thread選擇lasted ,如下圖
    的頭像 發表于 10-16 14:50 ?1521次閱讀
    <b class='flag-5'>rt</b>-studio潘多拉<b class='flag-5'>開發板</b>最新<b class='flag-5'>rt-thread</b>不能運行解決辦法
    主站蜘蛛池模板: 国产精品美女视频 | 成人午夜视频免费看欧美 | 精品亚洲综合在线第一区 | 国产午夜精品理论片 | 午夜免费视频福利集合100 | 黄色的视频网站 | 天天干夜夜爱 | 夜夜爱成人免费网站 | 我不卡老子影院午夜伦我不卡四虎 | h小视频在线观看网 | 亚洲卡1卡2卡新区网站 | 在线亚洲欧美性天天影院 | 免费爱爱网 | 色国产视频 | 米奇777四色精品人人爽 | 久久久久青草 | 国产小视频在线免费观看 | 天堂资源在线www中文 | 不卡一级毛片免费高清 | 毛片多多 | 欧美特级生活片 | 免费的毛片 | 免费jyzzjyzz在线播放大全 | 性欧美17一18sex性高清 | 日本a在线看| 天天射天天色天天干 | 狠狠干干干 | 私色综合网 | 深点再深一点好爽好多水 | 国产免费人成在线视频视频 | 国产福利你懂的 | 中文字幕在线一区 | 日本wwwxx| 亚洲成人高清在线观看 | 男人的天堂97 | 天天摸夜夜摸夜夜狠狠摸 | 五月六月婷婷 | 日日噜噜爽爽狠狠视频 | 成人午夜网址 | 亚洲一区有码 | 国产青青草 |