吴忠躺衫网络科技有限公司

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

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

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

STM32G0開發(fā)筆記:使用FreeRTOS系統(tǒng)

CHANBAEK ? 來源:電子技術(shù)攻城獅 ? 作者: MakerInChina.c ? 2023-01-16 15:07 ? 次閱讀

使用Platformio平臺的libopencm3開發(fā)框架來開發(fā)STM32G0,下面為使用FreeRTOS系統(tǒng)。

1 新建項目

  • PIO主頁新建項目,框架選擇libopencm3,開發(fā)板選擇 MonkeyPi_STM32_G070RB;
  • 新建完成后在src目錄新建主程序文件main.c;
  • 然后更改項目文件platformio.ini的燒寫和調(diào)試方式:
1upload_protocol = cmsis-dap
2debug_tool = cmsis-dap

2 添加FreeRTOS源碼

在freertos網(wǎng)站:https://www.freertos.org/a00104.html 下載好源碼,這里下載最新版202112.00;

  • 添加源碼到項目:

直接拷貝源碼下的FreeRTOS文件夾到項目的lib目錄中;

  • 添加到項目編譯

在lib目錄的FreeRTOS文件夾下新建 library.json 文件,內(nèi)容如下:

1{
 2    "name": "FreeRTOS",
 3    "version": "202112.00",
 4    "build": {
 5        "flags": [
 6            "-Isource",
 7            "-Isource/include",
 8            "-Isource/portable/GCC/ARM_CM0",
 9            "-Isource/portable/RVDS/ARM_CM0"
10        ],
11        "srcFilter": [
12            "+",
13            "+",
14            "+"
15        ]
16    }
17}
  • 添加FreeRTOS配置

從FreeRTOS源碼下的demo目錄中拷貝一個FreeRTOSConfig.h文件到 lib/FreeRTOS/Source目錄,并更改為如下內(nèi)容:

1/**
 2 * @file FreeRTOSConfig.h
 3 * 
 4 * http://www.FreeRTOS.org
 5 * http://aws.amazon.com/freertos
 6 * 
 7 */
 8
 9#ifndef FREERTOS_CONFIG_H
10#define FREERTOS_CONFIG_H
11
12/*-----------------------------------------------------------
13 * Application specific definitions.
14 *
15 * These definitions should be adjusted for your particular hardware and
16 * application requirements.
17 *
18 * These parameters and more are described within the 'configuration' section of the
19 * FreeRTOS API documentation available on the FreeRTOS.org web site.
20 *
21 * See http://www.freertos.org/a00110.html
22 *----------------------------------------------------------*/
23
24/* USER CODE BEGIN Includes */
25/* Section where include file can be added */
26/* USER CODE END Includes */
27
28/* Ensure definitions are only used by the compiler, and not by the assembler. */
29#if defined(__ICCARM__) || defined(__CC_ARM) || defined(__GNUC__)
30  #include 
31#endif
32#define configENABLE_FPU                         0
33#define configENABLE_MPU                         0
34
35#define configUSE_PREEMPTION                     1
36#define configSUPPORT_STATIC_ALLOCATION          0
37#define configSUPPORT_DYNAMIC_ALLOCATION         1
38#define configUSE_IDLE_HOOK                      0
39#define configUSE_TICK_HOOK                      0
40#define configCPU_CLOCK_HZ                         ( ( unsigned long ) 64000000 ) 
41#define configTICK_RATE_HZ                       ((TickType_t)1000)
42#define configMAX_PRIORITIES                     ( 7 )
43#define configMINIMAL_STACK_SIZE                 ((uint16_t)256)
44#define configTOTAL_HEAP_SIZE                    ((size_t)1024*16)
45#define configMAX_TASK_NAME_LEN                  ( 16 )
46#define configUSE_16_BIT_TICKS                   0
47#define configUSE_MUTEXES                        1
48#define configQUEUE_REGISTRY_SIZE                8
49#define configUSE_PORT_OPTIMISED_TASK_SELECTION  0
50
51/*Software timer related definitions. */
52#define configUSE_TIMERS                        1
53#define configTIMER_TASK_PRIORITY               5
54#define configTIMER_QUEUE_LENGTH                10
55#define configTIMER_TASK_STACK_DEPTH            configMINIMAL_STACK_SIZE
56
57/* USER CODE BEGIN MESSAGE_BUFFER_LENGTH_TYPE */
58/* Defaults to size_t for backward compatibility, but can be changed
59   if lengths will always be less than the number of bytes in a size_t. */
60#define configMESSAGE_BUFFER_LENGTH_TYPE         size_t
61/* USER CODE END MESSAGE_BUFFER_LENGTH_TYPE */
62
63/* Co-routine definitions. */
64#define configUSE_CO_ROUTINES                    0
65#define configMAX_CO_ROUTINE_PRIORITIES          ( 2 )
66
67/* Set the following definitions to 1 to include the API function, or zero
68to exclude the API function. */
69#define INCLUDE_vTaskPrioritySet             1
70#define INCLUDE_uxTaskPriorityGet            1
71#define INCLUDE_vTaskDelete                  1
72#define INCLUDE_vTaskCleanUpResources        0
73#define INCLUDE_vTaskSuspend                 1
74#define INCLUDE_vTaskDelayUntil              0
75#define INCLUDE_vTaskDelay                   1
76#define INCLUDE_xTaskGetSchedulerState       1
77
78/* Normal assert() semantics without relying on the provision of an assert.h
79header file. */
80/* USER CODE BEGIN 1 */
81//void vAssertCalled(const char *file, int line);
82//#define configASSERT( x )       if( x == 0 ) { taskDISABLE_INTERRUPTS(); vAssertCalled(__FILE__,__LINE__); for(;;); }
83/* USER CODE END 1 */
84
85/* Definitions that map the FreeRTOS port interrupt handlers to their CMSIS
86standard names. */
87#define vPortSVCHandler    sv_call_handler
88#define xPortPendSVHandler pend_sv_handler
89
90/* IMPORTANT: This define is commented when used with STM32Cube firmware, when the timebase source is SysTick,
91              to prevent overwriting SysTick_Handler defined within STM32Cube HAL */
92
93#define xPortSysTickHandler sys_tick_handler
94
95/* USER CODE BEGIN Defines */
96/* Section where parameter definitions can be added (for instance, to override default ones in FreeRTOS.h) */
97/* USER CODE END Defines */
98
99#endif /* FREERTOS_CONFIG_H */

上面配置需要根據(jù)自己的需要進行更改,如CPU頻率,是否需要打開某項功能等;

  • 配置好后的目錄結(jié)構(gòu)如下:

image-20220910154501074

3 FreeRTOS示例

  • 首先需要設(shè)置FreeRTOS需要的時鐘
1/**
 2 * @brief systick setup for rtos tick
 3 */
 4static void systick_setup(void)
 5{
 6    systick_set_clocksource(STK_CSR_CLKSOURCE_AHB);
 7    systick_set_reload(64*1000);
 8
 9    systick_interrupt_enable();
10
11    /* Start counting. */
12    systick_counter_enable();
13}

這樣在FreeRTOSConfig.h 文件中定義的

1#define xPortSysTickHandler sys_tick_handler

就可以通過systick中斷提供FreeRTOS時鐘;

  • LED任務(wù)函數(shù)
1static void led1_task(void *args)
 2{
 3    rcc_periph_clock_enable(RCC_GPIOC);
 4    gpio_mode_setup(GPIOC,GPIO_MODE_OUTPUT,GPIO_PUPD_NONE,GPIO12);
 5
 6    while (1)
 7    {
 8        gpio_toggle(GPIOC,GPIO12);
 9        vTaskDelay(pdMS_TO_TICKS(500));
10    }
11}
  • 主程序中創(chuàng)建任務(wù)并開啟多任務(wù)調(diào)度
1#include 
 2#include 
 3#include 
 4
 5#include "FreeRTOS.h"
 6#include "task.h"
 7
 8
 9int main(void)
10{
11    //system clock
12    rcc_clock_setup(&rcc_clock_config[RCC_CLOCK_CONFIG_HSI_PLL_64MHZ]);
13
14    systick_setup();
15
16    xTaskCreate(led_task,"led task", 256, NULL,2,NULL);
17
18    vTaskStartScheduler();
19
20    while(1){}
21
22    return 0;
23}

通過xTaskCreate創(chuàng)建多任務(wù)函數(shù),然后使用 vTaskStartScheduler 開始調(diào)度;

注:如果VSCode中提示 FreeRTOS.h 頭文件include path問題,可以將項目文件夾關(guān)閉,再重新打開即可;如果是在Clion中,可以在添加lib文件夾后,右鍵platformio.ini文件選擇re init即可;

4 燒寫測試

點擊 PlatformIO:Upload按鈕或Ctrl+Alt+U快捷鍵可以直接編譯燒寫到目標板,看到LED按預(yù)定的程序閃爍運行。

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

    關(guān)注

    2272

    文章

    10923

    瀏覽量

    357549
  • 源碼
    +關(guān)注

    關(guān)注

    8

    文章

    652

    瀏覽量

    29450
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4346

    瀏覽量

    62968
  • 開發(fā)板
    +關(guān)注

    關(guān)注

    25

    文章

    5121

    瀏覽量

    98189
  • FreeRTOS
    +關(guān)注

    關(guān)注

    12

    文章

    484

    瀏覽量

    62394
收藏 人收藏

    評論

    相關(guān)推薦

    AN5096_介紹STM32G0系列硬件開發(fā)

    AN5096_介紹STM32G0系列硬件開發(fā)
    發(fā)表于 11-21 08:11 ?4次下載
    AN5096_介紹<b class='flag-5'>STM32G0</b>系列硬件<b class='flag-5'>開發(fā)</b>

    STM32G0開發(fā)筆記FreeRTOS和FreeModbus庫使用

    使用Platformio平臺的libopencm3開發(fā)框架來開發(fā)STM32G0,以下為FreeRTOS和FreeModbus庫使用。
    的頭像 發(fā)表于 01-16 14:44 ?5967次閱讀
    <b class='flag-5'>STM32G0</b><b class='flag-5'>開發(fā)筆記</b>:<b class='flag-5'>FreeRTOS</b>和FreeModbus庫使用

    STM32G0開發(fā)筆記FreeRTOS和CLI組件使用

    使用Platformio平臺的libopencm3開發(fā)框架來開發(fā)STM32G0,以下為FreeRTOS和CLI組件使用。
    的頭像 發(fā)表于 01-16 14:47 ?3810次閱讀
    <b class='flag-5'>STM32G0</b><b class='flag-5'>開發(fā)筆記</b>:<b class='flag-5'>FreeRTOS</b>和CLI組件使用

    STM32G0開發(fā)筆記:使用FreeRTOS系統(tǒng)的隊列Queue

    使用Platformio平臺的libopencm3開發(fā)框架來開發(fā)STM32G0,下面為使用FreeRTOS系統(tǒng)的隊列Queue。
    的頭像 發(fā)表于 01-16 14:50 ?1489次閱讀

    STM32G0開發(fā)筆記:使用ADC進行NTC溫度采集

    使用Platformio平臺的libopencm3開發(fā)框架來開發(fā)STM32G0,以下使用ADC進行NTC溫度采集。
    的頭像 發(fā)表于 01-16 15:12 ?9978次閱讀
    <b class='flag-5'>STM32G0</b><b class='flag-5'>開發(fā)筆記</b>:使用ADC進行NTC溫度采集

    STM32G0開發(fā)筆記:用PWM來實現(xiàn)LED呼吸燈效果

    使用Platformio平臺的libopencm3開發(fā)框架來開發(fā)STM32G0,下面使用PWM來實現(xiàn)LED呼吸燈效果。
    的頭像 發(fā)表于 01-16 15:15 ?2352次閱讀
    <b class='flag-5'>STM32G0</b><b class='flag-5'>開發(fā)筆記</b>:用PWM來實現(xiàn)LED呼吸燈效果

    STM32G0開發(fā)筆記:EEPROM M24C02的使用方法

    使用Platformio平臺的libopencm3開發(fā)框架來開發(fā)STM32G0,以下為EEPROM M24C02的使用方法。
    的頭像 發(fā)表于 01-16 15:19 ?2974次閱讀
    <b class='flag-5'>STM32G0</b><b class='flag-5'>開發(fā)筆記</b>:EEPROM M24C02的使用方法

    STM32G0開發(fā)筆記:SD卡模塊的使用方法

    使用Platformio平臺的libopencm3開發(fā)框架來開發(fā)STM32G0,下面介紹SD卡模塊的使用方法。
    的頭像 發(fā)表于 01-19 16:27 ?2452次閱讀
    <b class='flag-5'>STM32G0</b><b class='flag-5'>開發(fā)筆記</b>:SD卡模塊的使用方法

    STM32G0開發(fā)筆記:SPI接口的基本使用

    使用Platformio平臺的libopencm3開發(fā)框架來開發(fā)STM32G0,下面介紹SPI接口的基本使用。
    的頭像 發(fā)表于 01-17 10:38 ?3239次閱讀
    <b class='flag-5'>STM32G0</b><b class='flag-5'>開發(fā)筆記</b>:SPI接口的基本使用

    STM32G0開發(fā)筆記:多通道ADC與DMA的使用

    使用Platformio平臺的libopencm3開發(fā)框架來開發(fā)STM32G0,以下為多通道ADC與DMA的使用。
    的頭像 發(fā)表于 01-17 10:41 ?7265次閱讀
    <b class='flag-5'>STM32G0</b><b class='flag-5'>開發(fā)筆記</b>:多通道ADC與DMA的使用

    STM32G0開發(fā)筆記:定時器timer的基本使用方法

    使用Platformio平臺的libopencm3開發(fā)框架來開發(fā)STM32G0,以下為定時器timer的基本使用方法。
    的頭像 發(fā)表于 01-17 10:43 ?3836次閱讀
    <b class='flag-5'>STM32G0</b><b class='flag-5'>開發(fā)筆記</b>:定時器timer的基本使用方法

    STM32G0開發(fā)筆記:串口中斷的使用

    使用Platformio平臺的libopencm3開發(fā)框架來開發(fā)STM32G0,以下為串口中斷的使用。
    的頭像 發(fā)表于 01-17 10:46 ?2454次閱讀

    STM32G0開發(fā)筆記:GPIO接按鍵的使用方式

    使用Platformio平臺的libopencm3開發(fā)框架來開發(fā)STM32G0,下面為GPIO接按鍵的使用方式。
    的頭像 發(fā)表于 01-17 10:48 ?1844次閱讀

    STM32G0開發(fā)筆記:LED燈示例

    使用Platformio平臺的libopencm3開發(fā)框架來開發(fā)STM32G0,下面為LED燈示例。
    的頭像 發(fā)表于 01-17 10:52 ?1470次閱讀
    <b class='flag-5'>STM32G0</b><b class='flag-5'>開發(fā)筆記</b>:LED燈示例

    STM32G0開發(fā)筆記:使用libopencm3庫

    使用Platformio平臺的libopencm3開發(fā)框架來開發(fā)STM32G0開發(fā)環(huán)境為VSCode+PIO插件,這里以開發(fā)
    的頭像 發(fā)表于 01-17 10:56 ?2014次閱讀
    <b class='flag-5'>STM32G0</b><b class='flag-5'>開發(fā)筆記</b>:使用libopencm3庫
    大发888官方授权网| 大发888赌城官方| 金钱豹百家乐官网的玩法技巧和规则 | 百家乐必胜赌| 百家乐官网六手变化混合赢家打| 百家乐官网打水策略| 百家乐官网7scs娱乐场| 百家博国际娱乐城| 威尼斯人娱乐城首选大丰收| 菲律百家乐太阳城| 大集汇百家乐官网的玩法技巧和规则| 手机棋牌游戏| 金冠百家乐的玩法技巧和规则| 百家乐相对策略| 百家乐官网开户优惠多的平台是哪家| 澳门博彩业| 大发888信誉平台| 百家乐官网真人视频出售| 百家乐官网的规则玩法| 澳门百家乐官网门路| 全讯网353788| 大三元百家乐的玩法技巧和规则| 单双和百家乐游戏机厂家| 百家乐官网大| 爱赢百家乐官网的玩法技巧和规则 | 云博娱乐城,| 大发888老虎机平台| 百家乐麻将牌| 百家乐是娱乐场| 百家乐旺门打| 百家乐拍照看| 黄金百家乐的玩法技巧和规则 | 赌王百家乐官网的玩法技巧和规则 | 玛曲县| 線上投注| 酒泉市| 天台县| 新世纪百家乐官网现金网| 百家乐官网水晶筹码| 如何玩百家乐官网游戏| 百家乐官网的出牌技巧|