drivers目錄下,加上stm32f7板級的設(shè)備驅(qū)動,相當(dāng)于把上面提到的I2C抽象層所提供的接口一 一實例化。" />
0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

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

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

總結(jié)一些在LwIP移植的時候體會

lPCU_elecfans ? 來源:未知 ? 作者:李倩 ? 2018-06-08 09:33 ? 次閱讀

在LwIP移植的時候,一開始遇到很多坑,在大家的幫助下都調(diào)通了,現(xiàn)在回頭看看,總結(jié)了一些體會,和大家分享一下:

1. 對RT-Thread的體系結(jié)構(gòu)不熟悉,特別是設(shè)備驅(qū)動層這塊,如果不理解,很可能會出現(xiàn)如下情況:

這是沒有添加I2C底層驅(qū)動的原因。當(dāng)時的情況是這樣的,我在menuconfig配置環(huán)境中,Device Drivers子條目下,打開了I2C的驅(qū)動,如下圖所示:

我單純的以為這樣就行了,還天真的想著RT-THread真貼心,啥都做好了,唉!Too young too simple! 這個只是做好了I2C設(shè)備(總線)的抽象層(BUS層),供應(yīng)用層調(diào)用,跟linux的設(shè)備驅(qū)動體系類似,這樣做的好處在于能統(tǒng)一設(shè)備,管你是什么設(shè)備,萬千接口,你在我這里就是一個總線接口,從而簡化應(yīng)用層的邏輯處理。如下圖所示:

之前做了很多l(xiāng)inux驅(qū)動開發(fā),也了解到RT-Thread是類linux的一種RTOS,也怪自己太直,忘記這點了,一直在這個錯誤上面糾結(jié),鉆牛角尖了,最后看了一篇文檔才恍然大悟。解決辦法就是:在bsp->drivers目錄下,加上stm32f7板級的設(shè)備驅(qū)動,相當(dāng)于把上面提到的I2C抽象層所提供的接口一 一實例化。這樣的話,應(yīng)用層就能和底層I2C通過抽象層達成一一映射對應(yīng)的關(guān)系。2. 犯了形而上學(xué)的錯誤。出現(xiàn)上述錯誤后,當(dāng)然要去問群里的大神、老師了。當(dāng)時,黃老師說讓我用pin設(shè)備類的驅(qū)動,改了一定的代碼,我照做了,也沒看原理圖,想著老師說的都是對的,結(jié)果我錯了。事實上,作為工程師,必須要謹慎細致,要去看原理圖,理解原理。唉,急功近利,形而上學(xué),片面的看待問題理解問題。

黃老師,反復(fù)提到一個pin,117. 比如rt_pin_write(117,1); 這是F407獨有的ETH_RESET引腳,我想著都是原子家的娃,這點還用細分嗎?767必須也是呀! 汗!不說這點了,羞愧!

事實上,767不能用pin設(shè)備復(fù)位PCF8574的,必須用I2C設(shè)備進行驅(qū)動,原因就是硬件決定的!

馬爺爺,毛爺爺?shù)霓q證法,矛盾論教導(dǎo)我們,切莫教條主義,靜止孤立片面的看待問題,這次感同身受。

上面算是一些經(jīng)驗和教訓(xùn)總結(jié),下面上硬菜。

1. 下載rt-thread-3.0.3源碼,解壓之,刪除bsp文件夾內(nèi)所有子文件夾(干凈,看著舒服,不做亦可),到GitHub上面下載stm32f7-disco最新的板級支持包。3.0.3內(nèi)的F7包非常老,沒有767的芯片支持,同時,驅(qū)動特性支持的也不好,總之,如果用767的話,這步雖然非必需,但是對后續(xù)的移植卻非常有益。然后,把這個文件夾命名為stm32f767-apollo(非必需,裝逼要緊)

2.將bsp內(nèi)stm32f429-apollo文件內(nèi)drivers目錄下的drv_eth.c/hdrv_i2c.c/h drv_pcf8574.c/h 這6個文件拷貝到stm32f767-apollo相應(yīng)目錄下。(cao! 步驟1中與此步驟有邏輯沖突,各位原諒我)3.現(xiàn)在開始修改各種配置吧,先用ENV工具menuconfig以下,注意看此時的配置圖

下面我們就裝逼到底,讓這個配置圖變?yōu)镾TM32F767IGTx的專屬。進入頂層目錄(進入stm32f767-apollo文件夾內(nèi),以下均稱“頂層目錄”),打開Kconfig頂層kernel-config文件。 加上如下代碼

保存退出,我們再menuconfig一下看下效果。

吊不吊先不說了,就說裝逼足夠了吧,哈哈! 4.雖然很好看,但是步驟3目前來說還是沒有什么卵用,萬里長征才剛剛開始。在頂層目錄下,打開template.uvprojx文件(沒錯,您要是不瞎搞,這個文件目測應(yīng)該在最下面),用keil打開之后,修改為對應(yīng)的STM32F767IGx芯片,如下圖所示。這樣,再用命令生成工程時,默認的就是767IGT,不用每次都重新修改了。

5.進入Libraries子目錄,打開SConscript文件,做如下修改:

這樣的話,生產(chǎn)工程時,會自動加載767的啟動文件,并且在keil的C/C++預(yù)定義框中會自動定義STM32F767xx如下圖所示:

6.進入drivers子目錄下,打開SConscript文件,這里說一下,3.0.3內(nèi)的SConscript文件可以直接把該文件夾下所有源碼加入工程,而這個最新的得自己加進去。修改如下:

把之前加入的文件名字添加進去。別急,還有一步,打開drv_iic.h文件, 把包含的頭文件修改一下,你自己一看就懂了(算了,寫一下 #include "stm32f7xx_hal.h")7.看到這里,我可以負責(zé)任的告訴你,BSP已經(jīng)準(zhǔn)備好了?。?!我們開始LwIP的移植吧,這一步驟先高興下,喝杯茶,45°角仰望天空,像某位梳著大背頭的偉人一樣,吐口煙圈。8.到頂層目錄,打開ENV工具,menuconfig 關(guān)掉Using SDRAM,然后進入RT-Thread Components子條目,在Device Drivers目錄下,打開I2C驅(qū)動;

回到上層,如果設(shè)備虛擬文件系統(tǒng)打開了的話,關(guān)掉吧,用不上的。進入Network stack子條目,再進入LWIP子條目,選擇LWIP的版本為2.0.2如果有路由器,現(xiàn)在就可以了,如果沒有,需要配置靜態(tài)IPv4地址。如圖所示:

9.到RT-Thread online packages子條目下,選擇IOT - internet if things 子條目下,打開ping工具,如下圖所示:

10.至此,所有配置完成,保存退出menuconfig,此時ENV開始自動下載ping工具包,使用pkgs --update更新包,完成后,使用 scons --target=mdk5 -s 命令生成工程。至此移植完成11.打開工程,直接編譯,下載進開發(fā)板,打開串口助手,看好戲吧。對了,在開發(fā)板ping電腦的時候,要關(guān)閉電腦防火墻,不然ping不同。下圖是成功現(xiàn)象:

寫在最后,這個帖子斷斷續(xù)續(xù)寫了一天,很累,但是分享很開心。衷心希望大家多多斧正!

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

    關(guān)注

    87

    文章

    11212

    瀏覽量

    208724
  • I2C
    I2C
    +關(guān)注

    關(guān)注

    28

    文章

    1477

    瀏覽量

    123068
  • LwIP
    +關(guān)注

    關(guān)注

    2

    文章

    85

    瀏覽量

    27056

原文標(biāo)題:【周四RTOS專欄】基于正點原子F767的RT-Thread LwIP移植

文章出處:【微信號:elecfans,微信公眾號:電子發(fā)燒友網(wǎng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    LED驅(qū)動器應(yīng)用的一些指南和技巧

    電子發(fā)燒友網(wǎng)站提供《LED驅(qū)動器應(yīng)用的一些指南和技巧.pdf》資料免費下載
    發(fā)表于 09-25 11:35 ?0次下載
    LED驅(qū)動器應(yīng)用的<b class='flag-5'>一些</b>指南和技巧

    基于機智云移植STM32L496G代碼移植

    代碼詳解-機智云(gizwits.com)移植的過程中遇到的一些問題,這里我將重構(gòu)下,大致內(nèi)容跟文檔差不多,但是根據(jù)文檔的操作,會產(chǎn)生一些
    的頭像 發(fā)表于 09-20 08:05 ?280次閱讀
    基于機智云<b class='flag-5'>移植</b>STM32L496G代碼<b class='flag-5'>移植</b>

    STM32+LWIP通信12次后無法再次通信怎么解決?

    各位大佬,小弟嘗試移植LWIP+FREERTOS的時候出現(xiàn)了如下問題,請各位大佬幫忙看看是哪里的問題,我用了FreeRTOS+LWIP做M
    發(fā)表于 07-24 07:25

    基于MM32F5270的Ethernet實現(xiàn)LwIP協(xié)議棧移植

    LwIP是輕量化的TCP/IP協(xié)議,由瑞典計算機科學(xué)院(SICS)的Adam Dunkels 開發(fā)的個小型開源的TCP/IP協(xié)議棧。LwIP具有高度可移植性、代碼開源,提供了三種編程
    的頭像 發(fā)表于 06-21 10:28 ?1071次閱讀
    基于MM32F5270的Ethernet實現(xiàn)<b class='flag-5'>LwIP</b>協(xié)議棧<b class='flag-5'>移植</b>

    STM32F407移植LWIP協(xié)議??偸沁M入硬件中斷的原因?

    f407上移植LWIP協(xié)議棧 到這個地方就進入硬件中斷 請問是我的指針沒初始化好嗎?還是其他原因?? /* entry point to the
    發(fā)表于 05-16 07:59

    移植LwIP+uCOS提示 errno沒有定義怎么解決 ?

    請教下,移植 LwIP+uCOS,提示 errno 沒有定義 ? 是哪里沒有配置好哇 ???
    發(fā)表于 04-23 07:21

    STM32F407開發(fā)板上移植LwIP TCP,while(1)里或者接收到數(shù)據(jù)后就什么也發(fā)不出來的原因?

    STM32F407開發(fā)板上移植LwIP TCP,當(dāng)我想做客戶端的時候,初始化階段使用函數(shù)tcp_write()就可以發(fā)送出來數(shù)據(jù),但是
    發(fā)表于 04-12 08:13

    STM32+LWIP通信12次無法再次通信要怎么解決?

    嘗試移植LWIP+FREERTOS的時候出現(xiàn)了如下問題,請各位大佬幫忙看看是哪里的問題,我用了FreeRTOS+LWIP做ModbusTCP時出現(xiàn)了鏈接出現(xiàn)通信12次然后通信中斷,并且
    發(fā)表于 04-12 07:42

    如何在STM32F407上移植lwip

    如題,使用rt-thread操作系統(tǒng),STM32F407上如何移植lwip,下載了最新的rt-thread代碼,不知如何入手。 誰能幫幫我嗎,或者有沒有移植手冊發(fā)我看看。
    發(fā)表于 03-05 08:32

    使用LwIP協(xié)議棧淺析實戰(zhàn)分析(i.MX RT)

    既可以移植到操作系統(tǒng)上運行,也可以無操作系統(tǒng)的情況下獨立運行。? ? ?TCP/IP協(xié)議棧的模型結(jié)構(gòu)如下圖所示,由于TCP/IP協(xié)議棧的出現(xiàn)時間較早,所以沒有按照傳統(tǒng)的7層OSI網(wǎng)絡(luò)模型進行設(shè)計,共只
    的頭像 發(fā)表于 02-02 17:05 ?1512次閱讀
    使用<b class='flag-5'>LwIP</b>協(xié)議棧淺析實戰(zhàn)分析(i.MX RT)

    lwip可以開幾個socket

    的內(nèi)存和處理器資源,以適應(yīng)資源受限的嵌入式應(yīng)用場景。 lwIP中,socket是種用于進行網(wǎng)絡(luò)通信的抽象概念。它提供了種簡化的編程接口,使得應(yīng)用程序可以通過網(wǎng)絡(luò)發(fā)送和接收數(shù)據(jù)。
    的頭像 發(fā)表于 01-09 14:05 ?1890次閱讀

    我們?yōu)槭裁葱枰私?b class='flag-5'>一些先進封裝?

    我們?yōu)槭裁葱枰私?b class='flag-5'>一些先進封裝?
    的頭像 發(fā)表于 11-23 16:32 ?538次閱讀
    我們?yōu)槭裁葱枰私?b class='flag-5'>一些</b>先進封裝?

    分享一些SystemVerilog的coding guideline

    本文分享一些SystemVerilog的coding guideline。
    的頭像 發(fā)表于 11-22 09:17 ?664次閱讀
    分享<b class='flag-5'>一些</b>SystemVerilog的coding  guideline

    Android ART玄鐵C910上的移植和性能優(yōu)化

    在過去的3年里,我們玄鐵C910上分別移植了Android 10和Android 12,ART上我們也做了一些更加深入的優(yōu)化。今年 R
    的頭像 發(fā)表于 11-16 09:43 ?1392次閱讀
    Android ART<b class='flag-5'>在</b>玄鐵C910上的<b class='flag-5'>移植</b>和性能優(yōu)化

    PCB抄板的一些方法

    拆掉所有器多層板抄板件,并且將PAD孔里的錫去掉。用酒精將PCB清洗干凈,然后放入掃描儀內(nèi),掃描儀掃描的時候需要稍調(diào)高一些掃描的像素, 以便得到較清晰的圖像。
    的頭像 發(fā)表于 11-15 17:04 ?866次閱讀
    PCB抄板的<b class='flag-5'>一些</b>方法