詳細操作 | UCOSIII移植到STM32F407

2021-02-19 小浩筆記



移植分三步走:

1、下載移植文件

2、添加文件到自己工程文件夾

3、加載文件工程中,並修改相關文件



1、下載移植文件

首先,打開Mirium公司官網,並要下載的對應文件,網址:https://www.micrium.com/downloadcenter/download-results/?searchterm=pa-arm-cortex-m4&supported=true 。找到與STM32F407接近的晶片(通過查找STM32F429II-SK符合STM32F407,官網沒有直接移植好STM32F407,若有就好了,就根本不用移植了)STM32F429II-SK,並將它下載下來,下來需要註冊才能下載,這裡我就直接下來了,文件位置:官方 uCOS-III 源碼。

2、添加文件到自己工程文件夾

先選擇一個工程模板,這裡我選擇了一個庫函數LED作為工程模板(這個模板的時鐘一定要配置好,不然後面的時序就會有錯誤)

將文件更名為STM32F407UCOSIII,進入文件創建文件夾UCOSIII,在UCOSIII文件夾中創建以下幾個文件夾.

拷貝下圖路徑下的文件到自己工程的APP文件夾中

拷貝下圖路徑下的文件到自己工程的BSP文件夾中

拷貝下圖路徑下的文件到自己工程的UCOSIII文件下

此時自己的工程UCOSIII下目錄如下

刪除STM32移植\STM32F407UCOSIII\UCOSIII\uC-CPU\ARM-Cortex-M4下的兩個文件夾GNU及IAR

刪除後

刪除STM32移植\STM32F407UCOSIII\UCOSIII\uC-LIB\Ports\ARM-Cortex-M4下的兩個文件夾GNU及IAR

刪除後

刪除STM32移植\STM32F407UCOSIII\UCOSIII\uCOS-III\Ports\ARM-Cortex-M4\Generic下的兩個文件夾GNU及IAR

刪除後

3、加載文件工程中,並修改相關文件

刪除main.c(因為工程當中有已經有函數入口int main(),所以要刪除掉),在打開工程中,將main.c移除掉

打開工程後,要工程中要移除main.c

打開工程組給工程組添加下面的組件

給組件APP添加的文件,將APP的所有文件添加進來

給組件BSP添加的文件,將BSP的所有文件添加進來

給uC-CPU添加文件

除些之外uC-CPU\ARM-Cortex-M4\RealView還有三個文件cpu.h、cpu_a.asm、cpu_c.c,這三個文件也要添加到uC-CPU工程組當中來

給uC-LIB工程組添加文件

除些之外UCOSIII\uC-LIB\Ports\ARM-Cortex-M4\RealView還有一個文件lib_mem_a.asm,這一個文件也要添加到uC-LIB工程組當中來

給COS-III工程組添加文件

除些之外UCOSIII\uCOS-III\Ports\ARM-Cortex-M4\Generic\RealView還有三個文件os_cpu.h、os_cpu_a.asm、os_cpu_c.c,這一個文件也要添加到uCOS-III工程組當中來

注意所有的文件添加不能多添加,也不能少添加 ,最後要記得按確定

添加頭文件

這個時候若我們編譯工程的話,一定有錯誤的,所以我們還得進一步的修改,修改步驟如下:

a.修改啟動文件startup_stm32f40_41xxx.s,將兩個中斷函數修改為UCOSIII支持的函數

上面代碼路徑:官方 uCOS-III 源碼\Micrium_STM32F429II-SK_OS3\Micrium\Examples\ST\STM32F429II-SK\BSP\KeilMDK\cstartup.s            

  IF {FPU} != "SoftVFP"                                                ; Enable Floating Point Support at reset for FPU                LDR.W   R0, =0xE000ED88         ; Load address of CPACR register                LDR     R1, [R0]                ; Read value at CPACR                ORR     R1,  R1, #(0xF <<20)    ; Set bits 20-23 to enable CP10 and CP11 coprocessors                                                ; Write back the modified CPACR value                STR     R1, [R0]                ; Wait for store to complete                DSB
; Disable automatic FP register content ; Disable lazy context switch LDR.W R0, =0xE000EF34 ; Load address to FPCCR register LDR R1, [R0] AND R1, R1, #(0x3FFFFFFF) ; Clear the LSPEN and ASPEN bits STR R1, [R0] ISB ; Reset pipeline now the FPU is enabled ENDIF

修改板卡驅動文件bsp.h及bsp.c

刪除bsp.c中的文件其它文件

在app_cfg.h文件刪除堆棧限制函數

修改app.c相關文件

刪除下面無關代碼即可,編譯下載,即可看到燈的閃爍

相關焦點

  • stm32h7「手把手移植uCOSIII(版本3.08.00)」
    】源碼、【uC-OS3-master】源碼Micrium例程:【Micrium_STM32H743ZI-Nucleo_Blinky】官方工程裸機工程文件:【V7-001_LED】stm32h7裸機LED工程uCOSIII源碼下載地址為:https://github.com/SiliconLabs。
  • STM32F407 DP83848驅動調試過程總結(標準庫到HAL庫移植避坑指南)
    初始化的HAL庫項目要從之前的STM32F107平臺移植到STM32F407平臺,我的任務主要是底層的移植,讓程序在新的平臺可以正常運行,主要包含的功能有IIC EEPROM LED ETH LWIP UART這幾個的初始化和實現。
  • 全教程:TencentOS tiny 移植到 STM32F103(基於標準庫) | CSDN 博文精選
    傑傑將在下文講解如何將 TencentOS tiny 移植到工程中去,以及如何把 TencentOS tiny 源碼中的核心部分單獨提取出來,方便以後在不同的平臺上移植。目前使用的是 TencentOS tiny 最新版本,由於 TencentOS tiny 在不斷更新,如果以後 TencentOS tiny 更新到更高的版本,則以最新的版本為準。
  • Micrium發布利用uCOS-III+uC/TCP-IP連接ARM mbed雲端的教程,手頭有STM32F7探索板的可測試
    粗略看了一下,教程比較詳細,基本是手把手了。2.  教程地址:https://doc.micrium.com/display/MBED/Hands-on+Workshop+Manual 3.  用於ST官方的STM32F7探索版例子:https://www.micrium.com/download/stm32f7-discovery-smart-thermostat-mbed-project/ ========================對於這個工程,簡單的說就是在uCOS-III+uC/TCP-IP的基礎上移植mbed
  • 【DIY數字儀表】STM32F429移植TouchGFX到RT-Thread系統(1)
    RT-Thread的BSP模板:1.學習RT-Thread系統(學過的可以跳過此步驟)2.移植BSP參考官方使用 Env 創建 RT-Thread 項目工程的教程選擇 BSP獲取 RT-Thread 原始碼後需要根據自己手上的開發板型號找到對應的 BSP,我實驗所使用的是野火的STM32F29 V1開發板,所以可以選擇stm32f29-fire-challenger的BSP
  • STM32平臺RT-Thread最小系統移植搭建 - STM32F107VCT6
    板子分:STM32F103幾個系列,STM32F107,STM32F429等。板子是沒有生命的,只有給了它軟體,供上電源,才能讓它們發揮作用。很多工程師,連最基礎的引腳配置都沒搞明白,就開始了RTOS的使用。 最小系統移植最小系統的作用:萬事開頭難,入門後,方可自由發揮。
  • 關於STM32Cube的幾個常見問題
    相比標準外設庫,STM32Cube HAL庫表現出更高的抽象整合水平,HAL API集中關注各外設的公共函數功能,這樣便於定義一套通用的用戶友好的API函數接口,從而可以輕鬆實現從一個STM32產品移植到另一個不同的STM32系列產品。當然,現有的標準外設庫仍會得到支持,不過,不建議利用它著手新的設計開發了。
  • STM32開發筆記4: STM32F407 UART的使用方法
    此代碼表明,當串行口收到1個字節的數據後,將觸發串行口中斷,在中斷服務程序中,將接收到的1位元組數據取出,送u8_UartData變量,然後將此變量傳遞給miniUART_UartInterrupt函數進行處理。
  • 入門篇 | STM32F407寄存器開發--點燈
    點燈點燈點到流水燈效果圖:        寄存器的功能是存儲二進位代碼,它是由具有存儲功能的觸發器組合起來構成的。一個觸發器可以存儲1位二進位代碼,故存放n位二進位代碼的寄存器,需用n個觸發器來構成。        在計算機領域中,寄存器是CPU內部的元件,包括通用寄存器、專用寄存器和控制寄存器。
  • STM32CubeMx入門教程(1)-點亮LED
    「 使用stm32cubeMX 工具進行代碼生成,以LED點燈為例」
  • STM32CubeMX-系列教程入門
    平臺包括了STM32Cube 硬體抽象層(一個STM32抽象層嵌入式軟體,確保在STM32系列最大化的便攜性)和一套的中間件組件(RTOS, USB, FatFs, TCP/IP,  Graphics, 等等)。    對於新的產品設計,我們強烈推薦使用STM32Cube來加速你的開發過程,並為以後的產品平臺移植打下良好的基礎。
  • STM32CubeMX教程-GPIO
    示例詳解    做實驗用到的STM32F103C8T6最小系統板,如下圖所示。使用STM32cubemx 工具自動產生的配置工程,使用KEIL5編譯代碼。新建並配置工程    在新彈出的界面中的搜索框中輸入 「stm32f103c8
  • 新一代燒寫工具 - STM32CubeProgrammer
    如果想要對通過 SPI,FMC,QSPI等接口連接到STM32的外部存儲器進行讀寫操作,就需要一個external loader。用戶如果使用了其他型號的存儲器,也可以自己生成external loader文件(*. stldr),詳細操作請參考 UM2237 的第2.3.3章節。
  • STM32CubeMX重大升級
    一些關於STM32CubeMX升級、ST官網的細節問題,不知道大家平時注意了沒有?相信經常使用STM32CubeMX工具的朋友,都知道升級到V5.0.0版本的新聞。其實,經常使用STM32CubeMX工具的朋友可能會關注它版本的更新。
  • STM32F1_外部SRAM作為運行內存
    今天提供的工程是基於前面「TIM延時」的工程修改而來,但是今天的例子是使用ST官方提供的標準庫裡面「system_stm32f10x.c」文件裡面現成的函數接口(使用寄存器配置),使其控制外部SRAM作為運行內存。昨天的工程使用標準庫fsmc相應的函數接口來配置的FSMC,昨天工程的目的就是為了使其大家熟悉參數信息。
  • stm32h7「資源尋找介紹」
    stm32h7開發資源分為開發文檔、軟體包、開發工具。
  • STM32CubeMX使用方法及功能介紹
    菜單和快捷按鈕在打開軟體時和新建工程後的差異如下圖:C.Settings設置:這個菜單是設置工程相關的信息(在上面新建工程說了一下)。Help幫助(有快捷圖標)B.About關於C.Install Patch安裝路徑D.Check forUpdates檢測更新E.Intall NewLibraries
  • STM32F7開發板自己造
    編譯:/mnt/e/_make_/arm/stm32f746z/test# makearm gcc -c -g -O2 -Wall -mcpu=cortex-m7 -mthumb -DSTM32F746xx -I../../ST -I../../CMSIS test.carm gcc -nostdlib -mcpu=cortex-m7 -mthumb -T ..
  • STM32f103單片機(三)——串口
    對於串口,它在接收和發送的時候也可以設置為中斷,這樣就應用到我們之前的設置方法。這裡我以設置串口為普通的發送,接收為外部中斷,接收之後進行發送為例進行總結。下面是串口編寫的流程圖。在stm32f10x.h中添加函數void UART_TRxOver_Interrupt(void);在stm32f10x.c的串口中斷入口中添加UART_TRxOver_Interrupt();
  • 基於STM32F407搭建TCP伺服器及TFTP伺服器
    實現功能通過STM32CubeMX在原子STM32F407板子上搭建TCP Server 及 TFTP Server ,實現這些功能非常簡單。外設配置打開STM32CubeMX,點NEW PROJECT,在左側的輸入框中輸入407ZG,在右側會顯示STM32F407ZGT6的MCU列表,選擇此列表,雙擊。設置時鐘源為外部時鐘開啟SWD調試接口,開啟ETH外設,選擇RMII接口(LAN8720A為RMII接口),中間件裡時能LWIP。