【FreeRTOS 快速入門】-- 1、STM32工程移植FreeRTOS

目錄

一、新建STM32工程

為了示范完整的移植過程,我們從0開始,新建一個標準的STM32點燈工程。

(本篇以CubeMX作示范,CubeIDE操作近同,可作對比參考)

1、新建工程?

選擇 芯片型號?新建工程

2、搜索芯片型號

輸入芯片型號進行搜索 (注意:如果輸入框為粉紅色,可能是因為前面有空格,要刪除)雙擊搜索結果中的目標芯片型號,即可進入配置。

3、配置Debug調試方式

新建工程時,養成習慣:先配置Debug選項(即調試模式);如果沒有使能Debug:燒錄一次程序后,將關閉調試引功能,無法再燒錄(得解鎖芯片);

4、選擇 晶振源

HSE,外部高速時鐘源,選擇:?Crystal/Ceramic Resonator

5、配置 時鐘樹

下圖參數,通用STM32F407xx系列 ,(更換為你所用芯片的時鐘樹參數即可通過)。1、3兩項,要填寫實物晶振值,可以查看晶振上絲印, 也可以查看原理圖。目前市面的F407系列開發板,常用晶振有8MHz、25MHz兩種,修改下圖1、2兩處即可。? ? ? ??

6、配置 LED燈?引腳

這里,我們增加LED的引腳配置,將用于驗證STM32工程配置的正確性。

每個開發板上,都會有LED燈,在調試程序時可以配合作為各種狀態指示輸出。

小編所用的STM32板子,查得LED原理圖如下:

紅燈使用PC5、藍燈使用PB2低電平時通路

依據此圖,我們對這兩個引腳進行配置:

引腳 PC5,工作模式:GPIO_Output(推出模式),修改別名:LED_RED引腳 PB2,工作模式:GPIO_Output(推出模式),修改別名:LED_BLUE如果希望程序運行后默認為:熄燈,還可以配置:上拉,這樣程序運行后電路就是斷路狀態。

7、工程選項

進入工程管理頁面,設置4項:工程名稱、存放目錄、開發環境、堆棧大小。

目錄、名稱:重點:不能使用中文!否則無法正常生成。開發環境:選MDK-ARM,? 即Keil工程。堆棧大小:都修改成0x1000(或者更大),以適配FreeRTOS、LVGL等移植。

提示:

CubeMX:生成后,工程文件夾,可以復制到其它中文路徑下存放,也可以修改成中文的文件夾名稱,以便管理。但工程的名稱,不能修改!CubeIDE:生成后,工程文件夾,可以復制到其它英文路徑下存放。路徑、名稱都不支持中文。

8、文件選項

這一頁,打勾兩個選擇:

標記2處:只生成需要的庫文件(可以有效減少代碼體積)。標記3處:為各種外設生成獨立c、h文件(不打勾時,外設的初始化代碼會堆在main.c中)。

至此,已完成新建工程所需全部配置。

9、生成工程

生成后,彈窗:

小編的習慣:打開文件夾,再手動打開工程。


二、驗證工程

這一部分,我們通過編寫代碼,使LED每500ms閃爍一次,以驗證工程的配置是否完整。

1、設置 仿真器?參數

選擇 CMSIS DAP打勾自動復位、運行

2、添加LED閃爍代碼

很多新手不重視LED,覺得太簡單太無聊了,沒味道。

請認真看待LED的使用,它是大殺器般的存在。

如,規律地閃爍,可以幫助我們判斷:系統時鐘是否正常、程序有沒有卡死等等。

雙擊打開main.c在while中的 /* USER CODE BEGIN 3 */?下方,編寫規律閃爍LED的代碼,如下:

/** 1ms延時 **/
HAL_Delay(1 - 1);                                                  // 延時函數,參數:ms; 注意:CubeMX生成的HAL_Delay(), 函數內部為避免無效操作,會對傳入參數+1,因此,如果只需要幾ms延時建議傳入參數時-1,如果需要大幾百ms的非精準延時,那參數不-1也影響不大/** 每500ms閃爍一次藍色LED **/
static uint16_t msLED = 0;
if (++msLED == 500)                                                // 每500ms執行一次
{msLED = 0;                                                     // 計數清0HAL_GPIO_TogglePin(LED_BLUE_GPIO_Port, LED_BLUE_Pin);          // 規律地閃爍藍色LED,方便外部觀察系統是否正常運行
}

完成后,是這個樣子的:

3、編譯

新工程的第一次編譯,時間會有點長,大約幾十秒。

編譯完成后,信息欄的輸出,是這個樣子:

重點:必須 0 Erros,才能生成燒錄文件。

4、?燒錄?

點擊“燒錄”,下方的燒錄進度條,大約要跑10秒左右。

燒錄完成后,芯片將會自動復位,運行里面的程序。

如果程序一切正常,這時,我們觀察開發板:藍色LED,將會每0.5秒反轉閃爍一次。

至此,我們的STM32點燈工程,已通過驗證,可以使用它,進行FreeRTOS的移植了 !


三、移植 FreeRTOS

以前,移植FreeRTOS的底層代碼,是需要自己復制、增刪、修改代碼,很是麻煩,相當耗時。

而現在通過CubeMX、CubeIDE,只需簡單地點擊,就能自動生成已移植好FreeRTOS的工程。

1、回到圖形化配置界面

如果已關閉了CubeMX,雙擊工程目錄下的 ioc 文件再次打開。

2、修改HAL庫的時基源

我們先理解兩個時基源:FreeRTOS時基源、HAL庫時基源。

首先是FreeRTOS的時基源,它將占用Systick定時器,每1ms產生1次計數,用作任務時基。

而CubeMX生成的HAL庫代碼,也需要一個時基源,也默認使用:SysTick。

HAL庫的時基源,很多人以為只是被簡單用于延時,如 HAL_Delay();

其實,它還用于HAL庫代碼中的超時監測等場景中,如:I2C通信的ACK等待超時。

如果上述兩者都同時使用SysTick作時基源,潛在一定風險,在生成代碼時,會彈窗警告!

所以,為了避免發生沖突,我們需要修改HAL庫所用的時基源,使用其它閑置的TIM。

如:TIM7等。

3、使能FreeRTOS??

上圖中,在選擇:?CMSIS_V2后,就能使能FreeRTOS,其它參數,默認即可,不作修改。

(后續可以按項目需要進行修改,再生成更新后的配置。)

來到這一步,已完成了FreeRTOS的移植。

......是不是相當的意外,只是打了一個勾,就移植好了,就這么簡單!!

4、默認生成的OS任務

(這個小節,原本想示范如何新建一個任務,但為了各篇章的獨立,還是把這事獨立一篇吧。)

在使能FreeRTOS后,會自動生成一個默認的任務:defaultTasK。

在選項頁 "Tasks and Queues" ,可以查看這個任務的參數配置。

具體如下圖所示:

這里,也不作任何修改,直接使用默認參數。

5、再次生成工程

(待更新。。。)

6、為任務編寫執行代碼

(待更新。。。)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/11346.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/11346.shtml
英文地址,請注明出處:http://en.pswp.cn/web/11346.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

24年做抖音小店,你還停留在數據?別人都已經開始注重利潤了

大家好,我是電商笨笨熊 一件事情持續做,一個項目持續深耕,意義到底是什么? 這句話我常常說,但很多人似乎走偏了實際意義; 尤其對于新手來說,做抖音小店總是向往某某老玩家多么牛的數據&#…

程序員健康指南:運動,讓代碼更流暢

程序員健康指南:運動,讓代碼更流暢 程序員,一個與電腦相伴的群體,長時間的久坐和高強度的腦力勞動是他們的日常。然而,久坐不僅影響體態,更對心臟健康構成威脅。根據《歐洲心臟雜志》的研究,中…

第十三節 huggingface的trainner解讀與Demo

文章目錄 前言一、trainer和TrainingArguments訓練與預測完整Demo1、數據構建2、TrainingArguments構建3、Trainer初始化4、模型訓練5、模型推理6、完整demo代碼7、完整運行結果二、輔助函數1、yield返回內容2、迭代器中斷恢復迭代demo3、yield from結構4、torch.Generator()的…

【PPT技巧】ppt文件打開就是只讀模式,如何改為可編輯模式?

PPT文檔打開是只讀模式,如何改成可編輯文檔呢?這需要分幾種情況來說,所以今天將介紹幾種方法幫助PPT只讀文檔改為可編輯文檔。 方法一: 我們可以先查看一下文件屬性,屬性中有只讀屬性,當我們打開文檔之后帶…

C++入門——引用(2)

前言 上一節我們開始學習了C,并且對C有了初步的了解,這一節我們繼續學習C的基礎,那么廢話不多說,我們正式進入今天的學習 C中的引用 1.1引用的概念 引用不是新定義一個變量,而是給已存在變量取了一個別名&#xff0…

uniapp小程序:大盒子包裹小盒子但是都有點擊事件該如何區分?

在開發過程中我們會遇到這種情況,一個大盒子中包裹這一個小盒子,兩個盒子都有點擊事件,例如: 這個時候如果點擊評價有可能會點擊到它所在的大盒子,如果使用css中的z-index設置層級的話如果頁面的盒子多的話會混亂&…

Spring解決泛型擦除的思路不錯,現在它是我的了。

你好呀,我是浮生。 Spring 的事件監聽機制,不知道你有沒有用過,實際開發過程中用來進行代碼解耦簡直不要太爽。 但是我最近碰到了一個涉及到泛型的場景,常規套路下,在這個場景中使用該機制看起來會很傻,但…

15、FreeRTOS 軟件定時器

文章目錄 一、什么是定時器?1.1 定時器的理解1.2 軟件定時器的特性 二、 軟件定時器的上下文2.1 守護任務2.2 守護任務的調度2.3 回調函數 三、軟件定時器的函數3.1 創建3.2 刪除3.3 啟動/停止3.5 修改周期3.6 定時器ID 四、案例4.1 一般使用4.2 消除抖動 一、什么是定時器? …

怎么解決ModuleNotFoundError: No module named ‘httpx_sse‘

解決方案 pip install httpx_sseLooking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple Collecting httpx_sse Downloading https://pypi.tuna.tsinghua.edu.cn/packages/e1/9b/a181f281f65d776426002f330c31849b86b31fc9d848db62e16f03ff739f/httpx_sse-0.4.0-py3-n…

Android 14.0 frameworks添加自定義服務

1.概述 在14.0的系統rom定制化產品開發中,對于提供系統接口來給app調用,來控制系統的某些功能,所以需要添加自定義服務也是常有功能,因此需要來在frameworks層中添加自定義系統服務的功能 2.frameworks添加自定義服務的核心類 frameworks\base\services\java\com\android…

Midjourney Imagine API 申請及使用

Midjourney Imagine API 申請及使用 申請流程 要使用 Midjourney Imagine API,首先可以到 Midjourney Imagine API 頁面點擊「Acquire」按鈕,獲取請求所需要的憑證: 如果你尚未登錄或注冊,會自動跳轉到登錄頁面邀請您來注冊和登…

多線程【LeetCode】

多線程【LeetCode】 前言前言推薦多線程信號量1114.按序打印1115.交替打印FooBar1116.打印零與奇偶數1117.H2O生成1188.設計有限阻塞隊列Plus1195.交替打印字符串1226.哲學家進餐 最后 前言 這是陳舊已久的草稿2022-11-27 20:44:17 這個是刷算法,也是準備寒假實習…

語音轉文字服務的調用接口

語音轉文字(Speech-to-Text,STT)技術允許將口語化的語音轉換成書面文字。以下是一些提供語音轉文字服務的調用接口及其特點。北京木奇移動技術有限公司,專業的軟件外包開發公司,歡迎交流合作。 1.訊飛開放平臺語音轉寫…

[貓頭虎分享21天微信小程序基礎入門教程]第1天:微信小程序概述與開發環境搭建教程

第1天:微信小程序概述與開發環境搭建 😺 文章目錄 第1天:微信小程序概述與開發環境搭建 😺自我介紹微信小程序概述特點 開發環境搭建步驟1: 注冊微信小程序賬號步驟2: 安裝開發者工具步驟3: 熟悉開發者工具界面 今日學習總結小測試…

UnityDOTS備忘

Unity DOTS中創建一個AssetBundle并將其用作Entity 創建一個新的Unity項目,并確保已啟用DOTS功能。 創建一個AssetBundle,可以通過在Project視圖中右鍵單擊文件夾并選擇“Create > AssetBundle”來創建。 將您想要轉換為Entity的資源(例…

炒股開戶傭金最低萬1和萬0.854,融資融券現在利率最低4.0%~5%

??炒股開戶傭金一般是萬1和萬0.854,萬0.854有一定的資金量要求,高于萬1的是可以申請降低的。 開戶萬1傭金和萬0.854傭金只需要聯系證券公司客戶經理協商就行。 開戶流程: 1、向客戶經理索要開戶鏈接或者掃描二維碼、進入申請頁面&#x…

本地搭建各大直播平臺錄屏服務結合內網穿透工具實現遠程管理錄屏任務

文章目錄 1. Bililive-go與套件下載1.1 獲取ffmpeg1.2 獲取Bililive-go1.3 配置套件 2. 本地運行測試3. 錄屏設置演示4. 內網穿透工具下載安裝5. 配置Bililive-go公網地址6. 配置固定公網地址 本文主要介紹如何在Windows系統電腦本地部署直播錄屏利器Bililive-go,并…

Nachi那智不二越機器人維修技術合集

一、Nachi機械手維護基礎知識 1. 定期檢查:定期檢查機器人的各個部件,如機械手伺服電機、機器人減速器、機械臂傳感器等,確保其運行正常。 2. 清潔與潤滑:定期清潔Nachi工業機器人表面和內部,并使用合適的潤滑油進行潤…

VRRP協議-負載分擔配置【分別在路由器與交換機上配置】

VRRP在路由器與交換機上的不同配置 一、使用路由器實現負載分擔二、使用交換機實現負載分擔一、使用路由器實現負載分擔 使用R1與R2兩臺設備分別進行VRRP備份組 VRRP備份組1,虛擬pc1的網關地址10.1.1.254 VRRP備份組2,虛擬pc2的網關地址10.1.1.253 ①備份組1的vrid=1,vrip=…

修正牛頓法求解無約束問題

function [x,val,k]revisenm(fun,gfun, Hess, x0) %功能:用修正牛頓法求解無約束問題:min f(x) %輸入:x0是初始點,fun, gfun,Hess分別是求目標函數值,梯度,Hesse矩陣的函數 %輸出:x,val分別是近似最優點和最優值,k是迭代次數 nl…