日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

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

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

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

教大家如何在STM32F4上跑freeRTOS

FPGA之家 ? 來源:嵌入式客棧 ? 作者:逸珺 ? 2021-07-23 10:21 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

[導讀] 大家好,我是逸珺。

之前挖了圖解freeRTOS的坑,挖了坑就得填。今天就從使用開始,先把freeRTOS用起來。先聊一聊在STM32F407上的如何電燈,如果只用freeRTOS點燈,無疑有點殺雞用牛刀的感覺。但是想用freeRTOS做產(chǎn)品,先照類似步驟則可以驗證最小系統(tǒng),驗證freeRTOS是否能正確跑起來,再在此基礎上開始做應用開發(fā),就把任務分解了。本文主要梳理一下如何利用官方移植例子,創(chuàng)建一個自己demo工程,對于沒用過的有點參考價值。

注:本文基于IAR for ARM 8.22.1(個人喜歡IAR),硬件采用正點原子的STM32F407探索者開發(fā)板,STLink V2。

準備工作去官網(wǎng)https://www.freertos.org/a00104.html下載

按下載,目前最新為202104.00,這個帶多種移植好的例子。解壓出來,是這樣的:

嵌入式客棧

tools為AWS iot配置工具,quick start例子以及cmake

FreeRTOS-Plus包含了MQTT,TCP,F(xiàn)AT等很多例子,先不去管

FreeRTOS為真正的操作系統(tǒng)源碼以及多平臺移植例子,如下:

嵌入式客棧

使用開源軟件,記得看看README,一般會有些介紹信息。分別介紹一下該文件夾下的大體內(nèi)容:

Demo:大部分硬件平臺的官方移植例子

Source:內(nèi)核代碼,包含硬件獨立文件與可移植文件

Test:內(nèi)核測試代碼

license:MIT開源協(xié)議,可以直接商業(yè)應用。

建立工程1.打開IAR,創(chuàng)建Workspace

2.創(chuàng)建工程

嵌入式客棧

選擇空工程(Empty project),命名為demo保存。

嵌入式客棧

設置工程

右鍵選擇Options,進入設置界面

嵌入式客棧

設置單片機為STM32F407VG

嵌入式客棧

Library Configuration使能CMSIS

953fb36a-e10c-11eb-9e57-12bb97331649.png

添加源文件

4.1 新建freeRTOS文件夾

95542db8-e10c-11eb-9e57-12bb97331649.png

4.2 添加內(nèi)核文件,在工程文件夾下新建freeRTOS文件夾,將下列文件拷貝過來

4.3 添加進IAR工程

4.4 將freeRTOS下的include文件夾以及portable文件夾拷貝到當前工程下

9577ca52-e10c-11eb-9e57-12bb97331649.png

4.5 portable文件夾下保留下面這幾個文件夾

嵌入式客棧

4.6 IAR文件夾下保留下面這兩個文件夾

嵌入式客棧

注:全保留也可以,就是其他的用不到,會使工程文件夾變的很大,如果用版本控制軟件管理,會增加倉庫的大小。ARM_CM4F_MPU文件夾暫時沒用,這個留做備用。

4.7 在IAR工程中新建portable文件夾,并加入相應的文件

嵌入式客棧

4.8 將下面幾個文件從官方例子中拷貝過來,并加入工程

FreeRTOSConfig.h是內(nèi)核配置文件,本文配置如下:

#define configUSE_PREEMPTION 1#define configUSE_IDLE_HOOK 0#define configUSE_TICK_HOOK 0#define configCPU_CLOCK_HZ ( SystemCoreClock )#define configTICK_RATE_HZ ( ( TickType_t ) 1000 )#define configMAX_PRIORITIES ( 5 )#define configMINIMAL_STACK_SIZE ( ( unsigned short ) 130 )#define configTOTAL_HEAP_SIZE ( ( size_t ) ( 75 * 1024 ) )#define configMAX_TASK_NAME_LEN ( 10 )#define configUSE_TRACE_FACILITY 1#define configUSE_16_BIT_TICKS 0#define configIDLE_SHOULD_YIELD 1#define configUSE_MUTEXES 1#define configQUEUE_REGISTRY_SIZE 8#define configCHECK_FOR_STACK_OVERFLOW 0#define configUSE_RECURSIVE_MUTEXES 1#define configUSE_MALLOC_FAILED_HOOK 0#define configUSE_APPLICATION_TASK_TAG 0#define configUSE_COUNTING_SEMAPHORES 1#define configGENERATE_RUN_TIME_STATS 0/* Co-routine definitions. */#define configUSE_CO_ROUTINES 0#define configMAX_CO_ROUTINE_PRIORITIES ( 2 )/* Software timer definitions. */#define configUSE_TIMERS 1#define configTIMER_TASK_PRIORITY ( 2 )#define configTIMER_QUEUE_LENGTH 10#define configTIMER_TASK_STACK_DEPTH ( configMINIMAL_STACK_SIZE * 2 )/* Set the following definitions to 1 to include the API function, or zero

to exclude the API function. */#define INCLUDE_vTaskPrioritySet 1#define INCLUDE_uxTaskPriorityGet 1#define INCLUDE_vTaskDelete 1#define INCLUDE_vTaskCleanUpResources 1#define INCLUDE_vTaskSuspend 1#define INCLUDE_vTaskDelayUntil 1#define INCLUDE_vTaskDelay 1

將IDLE_HOOK/TICK_HOOK禁止了,先不去關注這兩個功能。

將STM32相關文件搬過來,如下加入到工程

建立main.c

正點原子的板子,有兩個LED,我們就建立兩個任務來閃燈吧,相當于hello world,容易理解。

嵌入式客棧

/* 操作系統(tǒng)頭文件。 */

#include “FreeRTOS.h”#include “task.h”#include “timers.h”#include “semphr.h”#include “stm32f4xx.h”

//LED管腳

#define LED1_PIN GPIO_Pin_9#define LED1_GPIO_PORT GPIOF#define LED1_GPIO_CLK RCC_AHB1Periph_GPIOF

#define LED2_PIN GPIO_Pin_10#define LED2_GPIO_PORT GPIOF#define LED2_GPIO_CLK RCC_AHB1Periph_GPIOF

static void prvLedInitialise()

{

GPIO_InitTypeDef GPIO_InitStructure;

/* LED1時能時鐘 */

RCC_AHB1PeriphClockCmd(LED1_GPIO_CLK, ENABLE);

/* LED1 GPIO 配置為輸出 */

GPIO_InitStructure.GPIO_Pin = LED1_PIN;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;

GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;

GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(LED1_GPIO_PORT, &GPIO_InitStructure);

/* LED2時能時鐘 */

RCC_AHB1PeriphClockCmd(LED2_GPIO_CLK, ENABLE);

/* LED2 GPIO配置為輸出 */

GPIO_InitStructure.GPIO_Pin = LED2_PIN;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;

GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;

GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(LED2_GPIO_PORT, &GPIO_InitStructure);

}

static void prvSetupHardware( void )

{

/* 配置時鐘,PLL,F(xiàn)LASH */

SystemInit();

/* 配置NVIC優(yōu)先級。 */

NVIC_PriorityGroupConfig( NVIC_PriorityGroup_4 );

/*LED GPIO配置*/

prvLedInitialise();

}

//500ms LED1燈狀態(tài)翻轉(zhuǎn)一次

static void led1Task( void * pvParameters )

{

while(1)

{

LED1_GPIO_PORT-》ODR ^= LED1_PIN;

vTaskDelay(500);

}

}

//1000ms LED2燈狀態(tài)翻轉(zhuǎn)一次

static void led2Task( void * pvParameters )

{

while(1)

{

LED2_GPIO_PORT-》ODR ^= LED2_PIN;

vTaskDelay(1000);

}

}

int main(void)

{

prvSetupHardware();

xTaskCreate(led1Task,“LED1”,256,NULL,100,(TaskHandle_t *)NULL);

xTaskCreate(led2Task,“LED2”,256,NULL,101,(TaskHandle_t *)NULL);

/* 啟動任務調(diào)度器。 */

vTaskStartScheduler();

}

5.設置包含路徑

5.1 右鍵打開options,設置C/C++編譯器包含路徑

5.2 設置包含路徑為:

$PROJECT_DIR$是一個變量,表示當前路徑,不要設成絕對路徑,否則拷貝到不同路徑就無法編譯了。

$PROJ_DIR$

$PROJ_DIR$halCMSISDeviceSTSTM32F4xxInclude

$PROJ_DIR$halSTM32F4xx_StdPeriph_Driverinc

$PROJ_DIR$freeRTOSinclude

$PROJ_DIR$freeRTOSportableIARARM_CM4F

$PROJ_DIR$Commoninclude示當前工程目錄,利用這個變量就可以設置和工程相關的路徑了,不要設置為絕對路徑,否則如果工程拷貝到其他路徑,就無法正確編譯了。

并設置兩個宏:

USE_STDPERIPH_DRIVER

STM32F4XX

5.3 設置匯編器包含路徑

嵌入式客棧

6. 設置鏈接配置文件

嵌入式客棧

注:如果遇到下面的錯誤,應該是你使用了老版本的startup_stm32f4xx.s

Warning[25]: Label ‘CAN2_SCE_IRQHandler’ is defined pubweak in a section implicitly declared root

官方例子中下面路徑的startup_stm32f4xx.s為老版本

CMSISDeviceSTSTM32F4xxSourceTemplatesiar

該警告詳細信息可參考:

https://www.iar.com/knowledge/support/technical-notes/assembler/warning25-label-xxxxx-is-defined-pubweak-in-a-section-implicitly-declared-root/

編譯運行

嵌入式客棧

設置ST-Link

嵌入式客棧

總結(jié)一下官方的例子,要直接拿來開發(fā)產(chǎn)品有很多不需要的文件,可以按照本文的步驟做些刪減,先建立這樣一個基本工程,然后就可以結(jié)合自己的實際硬件以及需求,開始做應用開發(fā)了。

編輯:jq

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

    關注

    3

    文章

    204

    瀏覽量

    30322

原文標題:手把手教你在STM32F4上跑freeRTOS

文章出處:【微信號:zhuyandz,微信公眾號:FPGA之家】歡迎添加關注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    何在 i.MX8QM 上將 FlexCAN 與 FreeRTOS 任務(信號量或任務通知)一起使用?

    (),但程序總是掛起/卡在這一點。 我已經(jīng)嘗試更改中斷優(yōu)先級并檢查了 FreeRTOS 配置,但結(jié)果仍然是相同的。 有沒有人有一個簡單的示例,如何在 i.MX8QM 上將 FlexCAN
    發(fā)表于 04-16 06:31

    深入剖析STM32L010F4/K4:低功耗32位MCU的卓越之選

    深入剖析STM32L010F4/K4:低功耗32位MCU的卓越之選 在當今對功耗要求日益嚴苛的電子設備領域,低功耗微控制器(MCU)的重要性不言而喻。STM32L010F4/K4作為S
    的頭像 發(fā)表于 04-15 15:40 ?331次閱讀

    基于極海APM32F4的Azure RTOS ThreadX移植過程分享

    最近在玩APM32F407IG的板子,發(fā)現(xiàn)官方提供了兩個RTOS的demo,FreeRTOS和RT-thread。想著APM32F4這么豐富的資源,是不是也可以一下ThreadX R
    的頭像 發(fā)表于 04-02 11:30 ?1155次閱讀
    基于極海APM32<b class='flag-5'>F4</b>的Azure RTOS ThreadX移植過程分享

    STM32F042x4/STM32F042x6微控制器深度解析:特性、應用與設計要點

    STM32F042x4/STM32F042x6微控制器深度解析:特性、應用與設計要點 在嵌入式系統(tǒng)開發(fā)領域,微控制器的選擇至關重要,它直接影響著產(chǎn)品的性能、功能和成本。今天,我們就來深入探討一下意法
    的頭像 發(fā)表于 03-19 17:15 ?669次閱讀

    【教程】使用STM32F4進行E22-400T22S編程通信教程

    通過本文帶大家零基礎使用STM32F407VET6單片機進行E22-400T22S模塊編程并進行簡單的通信,當然如果學會了,也可以舉一反三應用于E22、E220、E32所有模塊。一、STM3
    的頭像 發(fā)表于 08-28 19:32 ?2541次閱讀
    【教程】使用<b class='flag-5'>STM32F4</b>進行E22-400T22S編程通信教程

    stm32f4新手求教

    芯片包stm32f4xx_DFP3.0.0只有1.98m大小,芯片包stm32f4xx_DFP2.16.0卻有152m大小,為何差距這么大,我該裝哪個芯片包?
    發(fā)表于 07-09 12:04

    零知開源——STM32F4結(jié)合BMP581氣壓傳感器實現(xiàn)ST7789中文顯示教程

    零知開源平臺是一個專為國開發(fā)者設計的軟硬件開源平臺,提供比Arduino更易上手的開發(fā)體驗。本教程展示了如何在STM32F407VET6增強板實現(xiàn)ST7789顯示屏的中文顯示功能,結(jié)合BMP581
    的頭像 發(fā)表于 07-09 09:21 ?2260次閱讀
    零知開源——<b class='flag-5'>STM32F4</b>結(jié)合BMP581氣壓傳感器實現(xiàn)ST7789中文顯示教程

    【教程】零基礎!手把手教你使用STM32F4進行E22-400T22S編程通信

    通過本文帶大家零基礎使用STM32F407VET6單片機進行E22-400T22S模塊編程并進行簡單的通信,當然如果學會了,也可以舉一反三應用于E22、E220、E32所有模塊。一STM32
    的頭像 發(fā)表于 07-03 19:32 ?1868次閱讀
    【教程】零基礎!手把手教你使用<b class='flag-5'>STM32F4</b>進行E22-400T22S編程通信

    使用studio構(gòu)建STM32F4工程報錯的原因?

    使用studio 構(gòu)建STM32F4 工程,什么都沒有動報了以上錯誤.這是為什么 ?
    發(fā)表于 06-26 07:26

    零知開源——STM32F4實現(xiàn)ILI9486顯示屏UI界面系列教程(二):日歷功能實現(xiàn)

    本教程詳細介紹了基于STM32F4和ILI9486觸摸屏的日歷應用開發(fā),涵蓋硬件連接、軟件實現(xiàn)與零知IDE配置。核心功能包括月份視圖展示、滑動切換和日期標記,通過LVGL庫實現(xiàn)UI組件及觸摸事件處理
    的頭像 發(fā)表于 06-25 17:34 ?869次閱讀
    零知開源——<b class='flag-5'>STM32F4</b>實現(xiàn)ILI9486顯示屏UI界面系列教程(二):日歷功能實現(xiàn)

    瑞薩RA8系列教程 | 基于e2s在RA8RTOS實現(xiàn)的方法

    我們今天大家快速搭建FreeRTOS工程的方法。早期,軟件工具不那么成熟,搭建FreeRTOS工程都是需要一步一步手動移植。很多小伙伴吐槽,移植過程太繁瑣。而現(xiàn)在,軟件工具越來越“先
    的頭像 發(fā)表于 06-11 17:22 ?2482次閱讀
    瑞薩RA8系列教程 | 基于e2s在RA8<b class='flag-5'>上</b><b class='flag-5'>跑</b>RTOS實現(xiàn)的方法

    STM32F4標準外設庫資料

    stm32f4xx.h,標準外設庫
    發(fā)表于 06-08 09:49 ?5次下載

    STM32F3系列、STM32F4系列、STM32L4系列和STM32L4+系列Cortex-M4編程手冊

    電子發(fā)燒友網(wǎng)站提供《STM32F3系列、STM32F4系列、STM32L4系列和STM32L4+系列Cortex-M4編程手冊.pdf》資料
    發(fā)表于 06-06 17:06 ?17次下載

    零知開源——STM32F4驅(qū)動MAX31865實現(xiàn)PT100高精度測溫

    STM32F
    PCB56242069
    發(fā)布于 :2025年05月26日 18:25:17

    技術分享 | 如何在2k0300(LoongArch架構(gòu))處理器通qt開發(fā)流程

    技術分享 | 如何在2k0300開發(fā)板(LoongArch架構(gòu))處理器通qt開發(fā)流程
    的頭像 發(fā)表于 05-20 11:05 ?1036次閱讀
    技術分享 | 如<b class='flag-5'>何在</b>2k0300(LoongArch架構(gòu))處理器<b class='flag-5'>上</b><b class='flag-5'>跑</b>通qt開發(fā)流程
    通城县| 岳阳市| 乌鲁木齐市| 都安| 镇宁| 鲁山县| 邯郸县| 新乐市| 峨山| 宁远县| 宜宾市| 青阳县| 婺源县| 华阴市| 盐山县| 东丽区| 乌兰察布市| 石阡县| 江门市| 汤阴县| 城步| 武夷山市| 剑川县| 桐庐县| 秀山| 宣汉县| 顺义区| 永兴县| 宜都市| 宣汉县| 个旧市| 嘉义市| 洪泽县| 沿河| 定日县| 苏尼特左旗| 台南市| 高尔夫| 醴陵市| 阿合奇县| 济宁市|