STM32-FreeRTOS的詳細配置

配置FreeRTOS

原文鏈接:https://ydamooc.github.io/posts/c9defcd/

1.1 下載FreeRTOS

  1. 打開FreeRTOS官網:https://www.freertos.org/

    請添加圖片描述

  2. 點擊下載,并且選擇"FreeRTOS 202212.01"版本,再點擊Download按鈕下載官方的資源包。

    請添加圖片描述

  3. 下載好資源包后,解壓到任意目錄,例如我解壓到了“G:\FreeRTOS”目錄下,由于資源包里面包含的文件較多,解壓相對會慢一點,大家需要耐心等待。

    請添加圖片描述
    請添加圖片描述

  4. 解壓完成后,我們打開FreeRTOS文件夾中的FreeRTOSv202212.01文件夾,打開后可以看到里面有很多文件和文件夾,其中我們要使用的是FreeRTOS文件夾中的東西。

請添加圖片描述

1.2 配置相關的文件

  1. 隨后打開FreeRTOS文件夾,我們在這里面需要關注的是Source文件夾中的內容,以及Demo文件夾中的內容(后續會使用到其中的文件)。我們打開Source文件夾,在當前目錄下,我們需要保留這一部分的文件,其他用不到可以刪除掉。

    請添加圖片描述
    請添加圖片描述

  2. 接著再打開portable文件夾,在當前目錄下,我們需要保留這一部分的文件,其他用不到可以刪除掉。其中MemMang文件夾中存放的是內存管理的相關文件,RVDS文件夾中存放的各個內核相關的文件,我們這里使用的是STM32F103C8T6單片機,所以我們需要的是ARM_CM3文件夾中的內容,其他用不到可以刪除掉。

請添加圖片描述
在這里插入圖片描述

在這里插入圖片描述

  1. 因為我們使用的是STM32F103C8T6單片機,在Source文件夾中還缺少FreeRTOS相關的配置文件,我們回到"FreeRTOSv202212.01\FreeRTOS"目錄下,然后打開Demo文件夾,在里面找到CORTEX_STM32F103_Keil項目打開,將里面的FreeRTOSConfig.h文件復制到前面的Source文件夾中。

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

  1. 接下來我們需要打開一個空白的STM32工程文件,本文使用的空白工程文件來自于立創開發板的地闊星STM32F103C8T6資料中的空白工程模板,大家可以自行點擊下載地闊星資料。當然使用別的空白工程模板也是可以的,只要能正常編譯即可。

    在這里插入圖片描述

  2. 下載解壓后,打開第03章【立創·STM32F103C8T6開發板】軟件資料中的空白工程模板文件夾,然后將里面的STM32F103C8T6_ProjectTemplate.zip解壓到任意目錄下,解壓完成后,將名字修改成FreeRTOS_ProjectTemplate,方便后續操作。

    在這里插入圖片描述

  3. 接著在FreeRTOS_ProjectTemplate中創建一個名為FreeRTOS的文件夾,然后回到"FreeRTOSv202212.01\FreeRTOS\Source"目錄下,將前面我們保留的Source文件夾中的內容復制到FreeRTOS_ProjectTemplate中的FreeRTOS文件夾中。

    在這里插入圖片描述

    在這里插入圖片描述

1.3 配置Keil中的STM32代碼

  1. FreeRTOS_ProjectTemplate中,根據下面路徑,打開項目。打開后,我們先編譯一次項目。

    在這里插入圖片描述

    在這里插入圖片描述

  2. 接著我們為項目創建文件夾,分別為FreeRTOS_COREFreeRTOS_PORT,然后根據下圖,將相關的文件添加進這兩個文件夾中。

    在這里插入圖片描述

    在這里插入圖片描述

    在這里插入圖片描述

    在這里插入圖片描述

  3. 添加完文件之后,打開魔術棒,然后點擊C/C++選項卡,將FreeRTOS文件夾中的.h路徑添加進去。

    在這里插入圖片描述

  4. 由于需要對stm32f10x_it.c文件進行修改,而在項目中是沒有添加進去的,我們需要手動添加一下,該文件所在路徑是FreeRTOS_ProjectTemplate\module,所以我們在左側右鍵MODULE文件夾,然后選擇Add Files to Group ‘MODULE’,然后選擇stm32f10x_it.c文件添加進去。添加完之后需要編譯一下,確保沒有問題。

    在這里插入圖片描述

    在這里插入圖片描述

  5. 接著在左側打開FreeRTOS_CORE文件夾,打開FreeRTOSConfig.h文件,在第49行處,將原來的171024修改成101024。

    在這里插入圖片描述

  6. FreeRTOSConfig.h文件中的最一行前添加上必要的中斷聲明。

    #define xPortPendSVHandler  PendSV_Handler 
    #define vPortSVCHandler SVC_Handler
    #define xPortSysTickHandler SysTick_Handler
    

    在這里插入圖片描述

  7. stm32f10x_it.c文件中,找到SVC_Handler函數、PendSV_Handler函數和SysTick_Handler函數,將原來的代碼注釋掉,并且在main.c中添加上頭文件,然后編譯。

    請添加圖片描述

    請添加圖片描述

1.4 對配置好的工程進行測試

  1. main.c文件開頭創建一個任務句柄,并且創建一個任務函數,任務函數的形參必須為void*類型。創建完成后在函數里面寫上以下代碼。

    請添加圖片描述

    void myTask(void* pv)
    {GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOC, &GPIO_InitStructure);GPIO_ResetBits(GPIOC,GPIO_Pin_13);while(1){GPIO_SetBits(GPIOC, GPIO_Pin_13);vTaskDelay(1000);GPIO_ResetBits(GPIOC, GPIO_Pin_13);vTaskDelay(1000);}
    }
    
  2. main函數中,創建任務,并且啟動調度器,代碼修改如下。

    int main(void)
    {board_init();xTaskCreate(myTask, "myTask", 1024, NULL, 2, &myTaskHandler);vTaskStartScheduler();while(1){}
    }
    
  3. 編譯通過后,將程序下載到開發板中,可以看到LED燈每隔1秒閃爍一次,至此說明FreeRTOS相關的配置已經配置完成。

請添加圖片描述

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

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

相關文章

Linux筆記---動靜態庫(原理篇)

1. ELF文件格式 動靜態庫文件的構成是什么樣的呢?或者說二者的內容是什么? 實際上,可執行文件,目標文件,靜態庫文件,動態庫文件都是使用ELF文件格式進行組織的。 ELF(Executable and Linkable…

HVV-某田相關經歷

一、背景 本次項目為期兩周,由集團主導招募攻擊隊員對集團下屬及其子公司進行的攻防演練。本次項目主導研判分析應急排查內部Nday發掘。 二、研判分析 2.1、帆軟V10 漏洞概述 帆軟 V10 及 V11 版本報表軟件存在反序列化漏洞,攻擊者可利用該漏洞使用…

AI與物聯網的深度融合:開啟智能生活新時代

在當今數字化時代,人工智能(AI)和物聯網(IoT)作為兩大前沿技術,正在加速融合,為我們的生活和工作帶來前所未有的變革。這種融合不僅提升了設備的智能化水平,還為各行各業帶來了新的機…

Linux `init` 相關命令的完整使用指南

Linux init 相關命令的完整使用指南—目錄 一、init 系統簡介二、運行級別(Runlevel)詳解三、常用 init 命令及使用方法1. 切換運行級別2. 查看當前運行級別3. 服務管理4. 緊急模式(Rescue Mode) 四、不同 Init 系統的兼容性1. Sy…

UNet 改進(12):UNet with ECA (Efficient Channel Attention) 網絡

詳解 下面將詳細解析這個實現了ECA注意力機制的UNet網絡代碼。 1. 代碼概述 代碼實現了一個帶有Efficient Channel Attention (ECA)模塊的UNet網絡架構。 UNet是一種常用于圖像分割任務的編碼器-解碼器結構網絡,而ECA模塊則是一種輕量級的通道注意力機制,可以增強網絡對重…

視頻監控EasyCVR視頻匯聚平臺接入海康監控攝像頭如何配置http監聽功能?

一、方案概述 本方案主要通過EasyCVR視頻管理平臺,實現報警信息的高效傳輸與實時監控。海康監控設備能通過HTTP協議將報警信息發送至指定的目的IP或域名,而EasyCVR平臺則可以接收并處理這些報警信息,同時提供豐富的監控與管理功能&#xff0…

人工智能與網絡安全:AI如何預防、檢測和應對網絡攻擊?

引言:網絡安全新戰場,AI成關鍵角色 在數字化浪潮不斷推進的今天,網絡安全問題已經成為每一家企業、每一個組織無法回避的“隱形戰場”。無論是電商平臺、金融機構,還是政府機關、制造企業,都可能面臨數據泄露、勒索病毒…

3D人臉掃描技術如何讓真人“進入“虛擬,虛擬數字人反向“激活“現實?

隨著虛擬人技術的飛速發展,超寫實數字人已經成為數字娛樂、廣告營銷和虛擬互動領域的核心趨勢。無論是企業家、知名主持人還是明星,數字分身正在以高度還原的形象替代真人參與各類活動,甚至成為品牌代言、直播互動的新寵。 3D人臉掃描&#…

遞歸函數詳解

定義 遞歸是指一個函數在其定義中直接或間接地調用自身的方法。通過這種方式,函數可以將一個復雜的問題分解為規模更小的、與原問題相似的子問題,然后通過不斷地解決這些子問題來最終解決整個問題。 組成部分 遞歸主體 這是函數中遞歸調用自身的部分…

ASP.NET Core Web API 配置系統集成

文章目錄 前言一、配置源與默認設置二、使用步驟1)創建項目并添加配置2)配置文件3)強類型配置類4)配置Program.cs5)控制器中使用配置6)配置優先級測試7)動態重載配置測試8)運行結果示…

在生信分析中,從生物學數據庫中下載的序列存放在哪里?要不要建立一個小型數據庫,或者存放在Gitee上?

李升偉 整理 在Galaxy平臺中使用時,從NCBI等生物學數據庫下載的DNA序列的存儲位置和管理方式需要根據具體的工作流程和需求進行調整。以下是詳細的分步說明和建議: 一、Galaxy中DNA序列的默認存儲位置 在Galaxy的“歷史記錄”(History&…

SDK游戲盾如何接入?復雜嗎?

接入SDK游戲盾(通常指游戲安全防護類SDK,如防DDoS攻擊、防作弊、防外掛等功能)的流程和復雜度取決于具體的服務商(如騰訊云、上海云盾等)以及游戲類型和技術架構。以下是一般性的接入步驟、復雜度評估及注意事項&#…

通過類似數據蒸餾或主動學習采樣的方法,更加高效地學習良品數據分布

好的,我們先聚焦第一個突破點: 通過類似數據蒸餾或主動學習采樣的方法,更加高效地學習良品數據分布。 這里我提供一個完整的代碼示例: ? Masked圖像重建 殘差熱力圖 這屬于自監督蒸餾方法的一個變體: 使用一個 預…

【課題推薦】多速率自適應卡爾曼濾波(MRAKF)用于目標跟蹤

多速率自適應卡爾曼濾波(Multi-Rate Adaptive Kalman Filter, MRAKF)是一種針對多傳感器異步數據融合的濾波算法,適用于傳感器采樣率不同、噪聲特性時變的目標跟蹤場景。本文給出一個多速率自適應卡爾曼濾波框架,以無人機跟蹤場景為例,融合IMU和GPS數據 文章目錄 背景多速…

軟考 系統架構設計師系列知識點之雜項集萃(49)

接前一篇文章:軟考 系統架構設計師系列知識點之雜項集萃(48) 第76題 某文件管理系統在磁盤上建立了位視圖(bitmap),記錄磁盤的使用情況。若磁盤上物理塊的編號依次為:0、1、2、……&#xff1b…

HTTP:七.HTTP緩存

HTTP緩存介紹 HTTP緩存是一種通過存儲網絡資源的副本,以減少對原始服務器請求的技術。當客戶端再次請求相同資源時,如果該資源未過期,服務器可以直接從本地緩存中提供響應,而無需再次從原始服務器獲取。這大大減少了網絡延遲,提高了加載速度,并減輕了服務器的負載。HTTP…

WPF 圖標原地旋轉

如何使元素原地旋轉 - WPF .NET Framework | Microsoft Learn <ButtonRenderTransformOrigin"0.5,0.5"HorizontalAlignment"Left">Hello,World<Button.RenderTransform><RotateTransform x:Name"MyAnimatedTransform" Angle"…

NO.91十六屆藍橋杯備戰|圖論基礎-圖的存儲和遍歷|鄰接矩陣|vector|鏈式前向星(C++)

圖的基本概念 圖的定義 圖G是由頂點集V和邊集E組成&#xff0c;記為G (V, E)&#xff0c;其中V(G)表?圖G中頂點的有限?空集&#xff1b;E(G)表?圖G中頂點之間的關系&#xff08;邊&#xff09;集合。若 V { v 1 , v 2 , … , v n } V \left\{ v_{1},v_{2},\dots,v_{n} …

【項目日記(一)】-仿mudou庫one thread oneloop式并發服務器實現

1、模型框架 客戶端處理思想&#xff1a;事件驅動模式 事件驅動處理模式&#xff1a;誰觸發了我就去處理誰。 &#xff08; 如何知道觸發了&#xff09;技術支撐點&#xff1a;I/O的多路復用 &#xff08;多路轉接技術&#xff09; 1、單Reactor單線程&#xff1a;在單個線程…

Go語言實現OAuth 2.0認證服務器

文章目錄 1. 項目概述1.1 OAuth2 流程 2. OAuth 2.0 Storage接口解析2.1 基礎方法2.2 客戶端管理相關方法2.3 授權碼相關方法2.4 訪問令牌相關方法2.5 刷新令牌相關方法 2.6 方法調用時序2.7 關鍵注意點3. MySQL存儲實現原理3.1 數據庫設計3.2 核心實現 4. OAuth 2.0授權碼流程…