RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

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

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

RT-Thread、STM32H7、LWIP簡(jiǎn)介

RTThread物聯(lián)網(wǎng)操作系統(tǒng) ? 來(lái)源:lq ? 2019-05-07 17:27 ? 次閱讀

一、寫(xiě)在前面

STM32H7目前還是一個(gè)比較新的MCU,網(wǎng)上的資料相對(duì)于F1 F4系列相對(duì)來(lái)說(shuō)就很少了,我自己在移植這個(gè)LWIP的時(shí)候走了不少?gòu)澛罚玫搅瞬簧偃藥椭?。?xiě)這篇文章也是對(duì)我自己移植的一個(gè)總結(jié),也是希望后來(lái)人能少走彎路。這篇文章有由個(gè)人編輯并整理,如有錯(cuò)誤,歡迎拍磚。

二、RT-Thread、STM32H7、LWIP簡(jiǎn)介

RT-Thread是一個(gè)來(lái)自中國(guó)的開(kāi)源物聯(lián)網(wǎng)操作系統(tǒng),它提供了非常強(qiáng)的可伸縮能力:從一個(gè)可以運(yùn)行在ARM Cortex-M0芯片上的極小內(nèi)核,到中等的ARM Cortex-M3/4/7系統(tǒng),甚至是運(yùn)行于MIPS32、ARM Cortex-A系列處理器上功能豐富系統(tǒng)。

STM32H7是ST意法半導(dǎo)體Cortex_M系列最高性能處理器。主頻高達(dá)400M,F(xiàn)LASH高達(dá)2Mbytes,SRAM高達(dá)1Mbytes,采用六級(jí)流水線,自帶 指令 和數(shù)據(jù) Cache、集成 JPEG編解碼器、 編解碼器、 集成雙精度硬件浮點(diǎn)計(jì)算單元( DPFPU)和 DSP指令。

LWIP是瑞典計(jì)算機(jī)科學(xué)院(SICS)的Adam Dunkels開(kāi)發(fā)的一個(gè)小型開(kāi)源的TCP/IP協(xié)議棧。

三、STM32H7的特殊性

這里的特殊性,僅僅只是對(duì)比F1 F4系列:

1、RAMF1 F4系列只有一塊RAM,在使用RTOS的時(shí)候直接分配給RTOS做堆就可以了。H7的RAM構(gòu)成看下表:

DTCM的速度是400M,但是DMA無(wú)法進(jìn)行訪問(wèn)。AXI SRAM的速度是200M,DMA可以進(jìn)行訪問(wèn)。SRAM3是以太網(wǎng)USB的緩沖區(qū)。

2、CACHEH7比F1 F4多了一個(gè)L1 CACHE一級(jí)緩存,這個(gè)緩存在為低速存儲(chǔ)器帶來(lái)加速的同時(shí),也為程序帶 來(lái)了一些問(wèn)題,其中最為主要的時(shí)數(shù)據(jù)一致性的問(wèn)題。CACHE策略問(wèn)題請(qǐng)參考言簡(jiǎn)意賅的介紹M7內(nèi)核的Cache工作流程,摸爬滾打半年的經(jīng)驗(yàn)總結(jié)。

(鏈接請(qǐng)復(fù)制至外部瀏覽器打開(kāi):http://forum.armfly.com/forum.php?mod=viewthread&tid=90066&highlight=%C3%FE%C5%C0%B9%F6%B4%F2)

3、DMAH7的DAM分為DMA1,DAM2,BDMA,MDMA。其中SDIO和ETH的DMA又是獨(dú)立的,就是說(shuō)他們有專用的DMA和其他的DAM之間使用不沖突,無(wú)須額外使能,只需要開(kāi)啟中斷就默認(rèn)使用DMA模式。

四、移植前的準(zhǔn)備工作

1、確保有一個(gè)可以在開(kāi)發(fā)板上能正常運(yùn)行RT-Thread的工程,目前RT-Thread已經(jīng)有了正點(diǎn)原子H743的BSP

(地址:https://github.com/RT-Thread/rt-thread/tree/master/bsp/stm32/stm32h743-atk-apollo 喜歡的話不要忘了給RT-Thread點(diǎn)一個(gè)),通過(guò)ENV工具使用scons --dist來(lái)把這個(gè)工程拿出來(lái),復(fù)制出dist文件夾下的工程就可以直接使用了;

2、使用ENV工具,開(kāi)啟軟件模擬IIC,因?yàn)檎c(diǎn)原子的開(kāi)發(fā)板的PHY復(fù)位接到了pcf8574的7號(hào)引腳,然后生成工程肯定會(huì)報(bào)錯(cuò),這個(gè)時(shí)候從別的BSP目錄下拷貝出pcf8574.c pcf8574.h phy_reset.c,放到工程里,然后在rtconfig.h加入以下代碼來(lái)啟用模擬IIC

1#defineBSP_USING_I2C223#defineBSP_I2C2_SCL_PIN1164#defineBSP_I2C2_SDA_PIN117

這里的引腳號(hào)由硬件決定,如果不是原子的開(kāi)發(fā)板可以省略這一步

3、因?yàn)镽T-Thread目錄下的STM32BSP是依賴CUBEMX,所以還需要在CUBEMX里面開(kāi)啟ETH的引腳,這個(gè)請(qǐng)和自己的板子一致;

開(kāi)啟RMII模式,注意這里的PC1引腳無(wú)法選擇成高電平,需要在生成的使msp.c里面自己修改為高電平,并開(kāi)啟中斷。

4、檢查是否開(kāi)啟了I_CACHE和D_CACHE

這里一定要開(kāi)啟,里面由依賴關(guān)系,不然會(huì)導(dǎo)致cache無(wú)法正確運(yùn)行。

5、然后通過(guò)CUBEMX生成工程并把時(shí)鐘初始化部分拷貝出來(lái)復(fù)制到board.c中

6、在drv_mpu.c中加入MPU配置以太網(wǎng)DMA描述符區(qū),只能配置為Strongly - order或者Device。

1MPU_Region_InitTypeDefMPU_InitStruct; 2 3/*DisabletheMPU*/ 4HAL_MPU_Disable(); 5 6/*ConfiguretheMPUattributesasDevicenotcacheable 7forETHDMAdescriptors*/ 8MPU_InitStruct.Enable=MPU_REGION_ENABLE; 9MPU_InitStruct.BaseAddress=0x30040000;10MPU_InitStruct.Size=MPU_REGION_SIZE_256B;11MPU_InitStruct.AccessPermission=MPU_REGION_FULL_ACCESS;12MPU_InitStruct.IsBufferable=MPU_ACCESS_BUFFERABLE;13MPU_InitStruct.IsCacheable=MPU_ACCESS_NOT_CACHEABLE;14MPU_InitStruct.IsShareable=MPU_ACCESS_NOT_SHAREABLE;15MPU_InitStruct.Number=MPU_REGION_NUMBER0;16MPU_InitStruct.TypeExtField=MPU_TEX_LEVEL0;17MPU_InitStruct.SubRegionDisable=0x00;18MPU_InitStruct.DisableExec=MPU_INSTRUCTION_ACCESS_ENABLE;1920HAL_MPU_ConfigRegion(&MPU_InitStruct);2122/*ConfiguretheMPUattributesasCacheablewritethrough23forLwIPRAMheapwhichcontainstheTxbuffers*/24MPU_InitStruct.Enable=MPU_REGION_ENABLE;25MPU_InitStruct.BaseAddress=0x30044000;26MPU_InitStruct.Size=MPU_REGION_SIZE_16KB;27MPU_InitStruct.AccessPermission=MPU_REGION_FULL_ACCESS;28MPU_InitStruct.IsBufferable=MPU_ACCESS_NOT_BUFFERABLE;29MPU_InitStruct.IsCacheable=MPU_ACCESS_CACHEABLE;30MPU_InitStruct.IsShareable=MPU_ACCESS_NOT_SHAREABLE;31MPU_InitStruct.Number=MPU_REGION_NUMBER1;32MPU_InitStruct.TypeExtField=MPU_TEX_LEVEL0;33MPU_InitStruct.SubRegionDisable=0x00;34MPU_InitStruct.DisableExec=MPU_INSTRUCTION_ACCESS_ENABLE;3536HAL_MPU_ConfigRegion(&MPU_InitStruct);3738/*EnabletheMPU*/39HAL_MPU_Enable(MPU_PRIVILEGED_DEFAULT);

7、在工程中添加ETH庫(kù)函數(shù),stm32h7xx_hal_eth.c和stm32h7xx_hal_eth_ex.c

五、LWIP協(xié)議棧的移植

該移植參考思路,移植也可以通過(guò)git log的方式參考這個(gè)移植步驟,但是這里移植里面有幾處錯(cuò)誤后文會(huì)提出。后來(lái)發(fā)現(xiàn)這個(gè)移植與STM32CubeRepositorySTM32Cube_FW_H7_V1.3.2ProjectsSTM32H743ZI-NucleoApplicationsLwIP,基本一致。

1、LWIP協(xié)議棧的源碼如果你有安裝CUBEMX,那么直接從STM32CubeRepositorySTM32Cube_FW_H7_V1.3.2MiddlewaresThird_PartyLwIPP的目錄下把LWIP的源碼拷貝出來(lái)就可以了?;蛘?a href="http://hljzzgx.com/soft/special/" target="_blank">下載參考思路里面的鏈接把LWIP源碼拷貝出來(lái)。

2、工程中添加新的文件夾lwip/api:添加LwIPsrcapi目錄下的所有文件

lwip/core:添加LwIPsrccore目錄下的文件,并包括ipv4文件夾下的文件

lwip/netif:添加ethernet.c,sysarch.c

lwip/port:添加ethernetif.c,lan8742.c(lan8720也可以用)

移植準(zhǔn)備工作就全部做完了,下一節(jié)修改工程報(bào)錯(cuò)!

聲明:本文內(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)投訴
  • mcu
    mcu
    +關(guān)注

    關(guān)注

    146

    文章

    17123

    瀏覽量

    350978
  • 編解碼器
    +關(guān)注

    關(guān)注

    0

    文章

    258

    瀏覽量

    24225
  • STM32H7
    +關(guān)注

    關(guān)注

    0

    文章

    7

    瀏覽量

    3817

原文標(biāo)題:基于RT-Thread在STM32H7上移植LWIP(一)

文章出處:【微信號(hào):RTThread,微信公眾號(hào):RTThread物聯(lián)網(wǎng)操作系統(tǒng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    RT-Thread內(nèi)核簡(jiǎn)介

    RT-Thread 內(nèi)核簡(jiǎn)介前言1、RT-Thread 的架構(gòu)2、RT-Thread 的內(nèi)核3、RT-Thread 內(nèi)核功能部分線程調(diào)度時(shí)鐘
    發(fā)表于 08-06 07:44

    RT-Thread的線程簡(jiǎn)介

    文章目錄RT-Thread的線程簡(jiǎn)介源碼分析初始化線程線程脫離啟動(dòng)線程掛起線程線程睡眠線程讓出測(cè)試參考資料:RTT官網(wǎng)文檔關(guān)鍵字:分析RT-Thread源碼、stm32、RTOS、線程
    發(fā)表于 08-24 07:56

    教你使用RT-Thread開(kāi)啟STM32H7系列的RTC與Alarm組件

    背景【ART-PI】默認(rèn)沒(méi)有開(kāi)啟Alarm組件,嘗試適配并開(kāi)啟有部分工程師想使用RT-Thread 基于STM32H7系列的RTC 與 Alarm(鬧鐘功能)驗(yàn)證平臺(tái)Keil MDK5
    發(fā)表于 03-16 14:05

    RT-Thread Studio提示STM32H7無(wú)法支持串口DMA請(qǐng)問(wèn)有什么解決方案

    使用RT-Thread Studio版本為2.1.2,STM32H7芯片支持包版本0.1.9,創(chuàng)建STM32H743ZIT6的項(xiàng)目,在RT-Thread Settings中勾選了串口D
    發(fā)表于 10-25 10:36

    STM32H7教程】第19章 STM32H7的GPIO應(yīng)用之按鍵FIFO

    STM32H7教程】第19章 STM32H7的GPIO應(yīng)用之按鍵FIFO
    發(fā)表于 11-23 18:21 ?9次下載
    【<b class='flag-5'>STM32H7</b>教程】第19章 <b class='flag-5'>STM32H7</b>的GPIO應(yīng)用之按鍵FIFO

    STM32H7學(xué)習(xí)之路繼續(xù)(stm32H7系列3) GPIO

    STM32H7學(xué)習(xí)之路繼續(xù)(stm32H7系列3) GPIO
    發(fā)表于 11-30 12:36 ?20次下載
    <b class='flag-5'>STM32H7</b>學(xué)習(xí)之路繼續(xù)(<b class='flag-5'>stm32H7</b>系列3)  GPIO

    STM32H7教程】第21章 STM32H7的NVIC中斷分組和配置(重要)

    STM32H7教程】第21章 STM32H7的NVIC中斷分組和配置(重要)
    發(fā)表于 12-04 14:36 ?13次下載
    【<b class='flag-5'>STM32H7</b>教程】第21章 <b class='flag-5'>STM32H7</b>的NVIC中斷分組和配置(重要)

    STM32H7教程】第8章 STM32H7的終極調(diào)試組件Event Recorder

    STM32H7教程】第8章 STM32H7的終極調(diào)試組件Event Recorder
    發(fā)表于 12-05 20:06 ?7次下載
    【<b class='flag-5'>STM32H7</b>教程】第8章 <b class='flag-5'>STM32H7</b>的終極調(diào)試組件Event Recorder

    STM32H7教程】第14章 STM32H7的電源,復(fù)位和時(shí)鐘系統(tǒng)

    STM32H7教程】第14章 STM32H7的電源,復(fù)位和時(shí)鐘系統(tǒng)
    發(fā)表于 12-09 11:21 ?36次下載
    【<b class='flag-5'>STM32H7</b>教程】第14章 <b class='flag-5'>STM32H7</b>的電源,復(fù)位和時(shí)鐘系統(tǒng)

    RT-Thread STM32 配置系統(tǒng)時(shí)鐘(使用外部晶振)

    RT-Thread STM32 配置系統(tǒng)時(shí)鐘開(kāi)發(fā)環(huán)境芯片:STM32F103RCT6RT-Thread Studio: V1.0.6(現(xiàn)在已經(jīng)更新到1.1.3,由于本人使用RTT開(kāi)發(fā)已經(jīng)有一段時(shí)間了
    發(fā)表于 12-14 18:45 ?14次下載
    <b class='flag-5'>RT-Thread</b> <b class='flag-5'>STM32</b> 配置系統(tǒng)時(shí)鐘(使用外部晶振)

    RT-Thread文檔_RT-Thread 簡(jiǎn)介

    RT-Thread文檔_RT-Thread 簡(jiǎn)介
    發(fā)表于 02-22 18:22 ?5次下載
    <b class='flag-5'>RT-Thread</b>文檔_<b class='flag-5'>RT-Thread</b> <b class='flag-5'>簡(jiǎn)介</b>

    RT-Thread文檔_RT-Thread 潘多拉 STM32L475 上手指南

    RT-Thread文檔_RT-Thread 潘多拉 STM32L475 上手指南
    發(fā)表于 02-22 18:23 ?9次下載
    <b class='flag-5'>RT-Thread</b>文檔_<b class='flag-5'>RT-Thread</b> 潘多拉 <b class='flag-5'>STM32</b>L475 上手指南

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

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

    RT-Thread移植使用webserver (lwip+httpd)

    開(kāi)發(fā)環(huán)境:野火的stm32f407,rt-thread studio版本是版本: 2.2.6,stm32f4的資源包為0.2.2,rt-thread版本為4.0.3。
    的頭像 發(fā)表于 10-12 12:49 ?1329次閱讀
    <b class='flag-5'>RT-Thread</b>移植使用webserver (<b class='flag-5'>lwip</b>+httpd)

    RT-Thread在Lan8720a和 lwip基礎(chǔ)上移植ntp流程

    開(kāi)發(fā)環(huán)境:野火的stm32f407,rt-thread studio版本是版本: 2.2.6,stm32f4的資源包為0.2.2。以RT-Thread中Lan8720和
    的頭像 發(fā)表于 10-12 16:59 ?1894次閱讀
    <b class='flag-5'>RT-Thread</b>在Lan8720a和 <b class='flag-5'>lwip</b>基礎(chǔ)上移植ntp流程
    RM新时代网站-首页