在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

STM32G0開發筆記:使用FreeRTOS系統

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

使用Platformio平臺的libopencm3開發框架來開發STM32G0,下面為使用FreeRTOS系統。

1 新建項目

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

2 添加FreeRTOS源碼

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

  • 添加源碼到項目:

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

  • 添加到項目編譯

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

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目錄,并更改為如下內容:

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 */

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

  • 配置好后的目錄結構如下:

image-20220910154501074

3 FreeRTOS示例

  • 首先需要設置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任務函數
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}
  • 主程序中創建任務并開啟多任務調度
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創建多任務函數,然后使用 vTaskStartScheduler 開始調度;

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

4 燒寫測試

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

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

    關注

    2270

    文章

    10900

    瀏覽量

    355927
  • 源碼
    +關注

    關注

    8

    文章

    640

    瀏覽量

    29204
  • 函數
    +關注

    關注

    3

    文章

    4331

    瀏覽量

    62596
  • 開發板
    +關注

    關注

    25

    文章

    5048

    瀏覽量

    97442
  • FreeRTOS
    +關注

    關注

    12

    文章

    484

    瀏覽量

    62166
收藏 人收藏

    評論

    相關推薦

    AN5096_介紹STM32G0系列硬件開發

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

    STM32G0開發筆記FreeRTOS和FreeModbus庫使用

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

    STM32G0開發筆記FreeRTOS和CLI組件使用

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

    STM32G0開發筆記:使用FreeRTOS系統的隊列Queue

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

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

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

    STM32G0開發筆記:用PWM來實現LED呼吸燈效果

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

    STM32G0開發筆記:EEPROM M24C02的使用方法

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

    STM32G0開發筆記:SD卡模塊的使用方法

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

    STM32G0開發筆記:SPI接口的基本使用

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

    STM32G0開發筆記:多通道ADC與DMA的使用

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

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

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

    STM32G0開發筆記:串口中斷的使用

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

    STM32G0開發筆記:GPIO接按鍵的使用方式

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

    STM32G0開發筆記:LED燈示例

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

    STM32G0開發筆記:使用libopencm3庫

    使用Platformio平臺的libopencm3開發框架來開發STM32G0開發環境為VSCode+PIO插件,這里以開發
    的頭像 發表于 01-17 10:56 ?1918次閱讀
    <b class='flag-5'>STM32G0</b><b class='flag-5'>開發筆記</b>:使用libopencm3庫
    主站蜘蛛池模板: 好大好猛好爽好深视频免费| 成人综合婷婷国产精品久久免费| yezhulu在线永久网址yellow| 国产午夜精品久久久久九九| 亚洲乱码尤物193yw在线播放| 69美女poren 18| 国产美女精品久久久久中文| 日本免费网站在线观看| 狠狠干狠狠鲁| 天天做天天爱天天影视综合| 国产小视频在线看| www.爽| 色欲香天天天综合网站| 亚洲狠狠97婷婷综合久久久久| 四虎影院永久免费观看| 美女视频黄又黄又免费高清| 国产人人艹| 午夜 在线播放| xxxx黄| 生活片一级性| 国产毛片久久久久久国产毛片| 国产精品1区2区3区| 久久99久久精品国产只有 | 日本国产中文字幕| 国产久爱青草视频在线观看| 黄色综合网站| a亚洲| 国产亚洲精品自在久久77| 色se01短视频永久免费| caoporn97人人做人人爱最新| 亚洲色图狠狠干| 久久精品国产精品亚洲毛片| 午夜黄色影片| 国模极品一区二区三区| 欧美成人免费| 天天综合天天操| aaaa黄色片| www.色com| 激情综合丝袜美女一区二区| 特级生活片| 天天操狠狠|