基於STM32的FREERTOS應用的幾個常見問題

2021-07-27 09:03:18 字數 1533 閱讀 2771

1、怎樣將 freertos 移植到不同的cortex-m 核心?

答:若需將 freertos 移植到正確的cortex-m 產品,您必須從正確的目錄匯入 「port.c」檔案。例如,若微控制器是帶有iar 工具的 cortex-m0 核心,則您必須從「freertos\source\portable\iar\arm_cm0」 獲取 port.c。

2、freertos 使用需要rom/ram?

答:這取決於您的編譯器、**架構,以及rtos 核心配置。一般來說, rtos 核心本身需要大約 5到 10 k 位元組 rom 空間。

如果建立的執行緒或佇列數增加,ram 使用量就會上公升。

3、怎樣設定 cpu 時鐘?

答:cpu 時鐘由 freertosconfig.h 中的 configcpu_clock_hz 定義,比如在stm32cubef4韌體內它由 systemcoreclock 提供,表示 hclk 時鐘 (ahb 匯流排),通過呼叫systemclock_config() 函式配置 rcc 時鐘時會設定此值。

4、怎樣設定中斷優先順序?

答:任何使用 rtos api 函式的中斷服務程式,其優先順序必須手動設定為大於等於freertosconfig.h 檔案中configmax_syscall_interrupt_priority 的設定值。這確保其中斷的邏輯優先順序低於等於configmax_syscall_interrupt_priority設定的優先順序。

5、怎樣使用非 systick 時鐘生成時間片中斷?

答:使用者可選擇性地自己提供時間片中斷源,方法是使用非systick 的定時器生成中斷:

• 提供 vportsetuptimerinterrupt() 的實現,它會以freertosconfig.h檔案中定義的configtick_rate_hz常量指定的頻率產生中斷。

• 將 xportsystickhandler() 配置為定時器中斷的處理程式,確保xportsystickhandler()在freertosconfig.h 中未對映至 systick_handler(),或在 port.c 中未被命名為systick_handler()。

6、怎樣啟用無時間片空閒模式?

答:freertos 無時間片模式 (低功耗)通過進入睡眠模式並停止週期性的時間片中斷來降低mcu 功耗。在 freertosconfig.h 中,將 configuse_tickless_idle 定義為 1,即可啟用此功能。

當使用非 systick 定時器生成時間片中斷時,也可啟用無時間片空閒模式。使用者必須新增下列動作至上乙個問題所述內容:

• 在 freertosconfig.h 中,將 configuse_tickless_idle 設為 2。

• 根據 freertos 相關文件說明,定義portsuppress_ticks_and_sleep()。

7、在做基於stm32的freertos應用中出現比較頻繁的問題是什麼?

答:應屬stack溢位和中斷優先順序相關的問題。

以為內容取自於st官方的一篇關於具有rtos的stm32cube開發應用的使用者手冊um1722,該手冊較為詳細了介紹了如下內容。本文內容只是其中的faq部分。

基於STM32的串列埠通訊

序列通訊一般是以幀格式傳輸資料,即一幀一幀的傳輸,每一幀都含有起始訊號,資料資訊以及停止資訊等。資料各個位同時傳輸,速度快,但是占用引腳資源多。eg led1602 資料按位順序傳輸,占用引腳資源少,但是速度相對較慢。一位一位傳輸 bit iic spi 串列埠通訊 單工,半雙工,全雙工 同步通訊 ...

基於STM32的恆流源設計

本設計以stm32f103rct6為主控晶元,利用mos管的恆流區特點,設計恆流源。設計電流範圍為1 300ma。基本原理圖 q2為n溝道mos管,在正常工作情況下,運放與mos管之間構成深度負反饋,使得輸入控制電壓與vr虛短,近似相等。這可以得到負載電流 3.1.電源 電路圖如圖所示 電源由 12...

linux spi驅動分析 基於STM32

linux kernel 版本2.6.30,spi驅動基於platform device,platform driver驅動模型來編寫.spi分為主從裝置,乙個主裝置下可心掛接多個從裝置,linux驅動中使用struct spi master結構來表示乙個主裝置,使用struct spi devic...