STM32G0开发笔记:使用FreeRTOS系统

发布者:camuspyc最新更新时间:2023-06-27 来源: elecfans关键字:STM32G0  FreeRTOS系统  新建项目 手机看文章 扫描二维码
随时随地手机看文章

使用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频率,是否需要打开某项功能等;


配置好后的目录结构如下:

f85a0cfc446480f98278cecc86eb1219_poYBAGPE90WAWzvUAAJdbkXfW9k951.png

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按预定的程序闪烁运行。


关键字:STM32G0  FreeRTOS系统  新建项目 引用地址:STM32G0开发笔记:使用FreeRTOS系统

上一篇:基于STM32F407的图像远程采集终端
下一篇:一文深入了解STM32H7芯片

推荐阅读最新更新时间:2024-10-10 07:33

发改委:禁止新建燃油汽车项目 新能源车产业将迎大变革
随着中国经济结构的转型升级,国内传统汽车转型升级也进入了一个关键时期。传统燃油汽车行业使出“杀手锏”,严格控制现有汽车企业扩大传统燃油汽车产能。 为防止产能过剩事态进一步恶化,传统燃油汽车行业使出“杀手锏”。 日前,国家发展改革委产业司组织召开汽车投资项目管理工作会议,要求各地完善汽车投资项目管理,禁止核准新建传统燃油汽车生产企业投资项目,严格控制现有汽车企业扩大传统燃油汽车产能。 相关部门对传统燃油汽车所采取的“拉闸”行为,意味着汽车生产企业的数量将迎来管控,汽车行业也将迎来转型期。 著名经济学家宋清辉认为,发改委严控汽车产能过剩,禁止核准新建传统燃油汽车生产企业投资项目无疑都是对的,未来是新能源车的天下,传统汽
[汽车电子]
STM32G0开发笔记:LED灯示例
使用Platformio平台的libopencm3开发框架来开发STM32G0,下面为LED灯示例。 1 新建项目 在PIO的Home页面新建项目,项目名称led,选择开发板为上一次建立的自定义开发板型号 MonkeyPi_STM32_G070RB,开发框架选择libopencm3: 2 LED灯程序 在项目文件夹的src目录下新建文件main.c,内容如下: 1/** 2 * @file main.c 3 * @author MakerInChina (makerinchina.cn) 4 * @brief 5 * @version 0.01 6 * @date 2022-09-04 7 * 8 * @
[单片机]
<font color='red'>STM32G0</font>开发笔记:LED灯示例
工程师笔记|STM32G0 复位后死机
引言 有客户反映,STM32G071RBT6 在使用 STM32CubeProgrammer 烧录完程序后只能运行一次,复位后,程序无法运行,如果掉电后重新上电,程序恢复正常。 问题描述 根据客户描述,该问题可通过以下步骤复现: 2.1. 测试代码的功能流程图 准备测试代码 App1 和 App2: 2.2. 问题复现步骤 操作步骤 (1) 在 STM32CubeProgrammer 中下载 应用程序 App1(如图 3),并设置 RDP=1(如图 4);然后断开 STM32CubeProgrammer 的连接,板子断电后重新上电; (2) 根据 log 提示(如图 5
[单片机]
STM32G0的安全功能
STM32G0的安全功能 安全功能:任务隔离 安全功能:密钥存储 安全功能:身份认证 安全功能:安全通信 安全功能:固件ip保护 安全功能:SFU 安全功能:SFI
[单片机]
一文了解STM32G0的生态圈
STM32G0系列作为新一代入门级利器,基于Arm® Cortex®-M0+ 内核,为高效能微控制器树立了新的标杆。此系列产品拥有超过93%的I/O利用率,在每个细节上都实现了最出色的优化,可为您提供最佳的性价比,让您以最低的 BOM 成本和更好的灵活性来满足应用需求。 新一代入门级微控制器的两大系列 STM32G0系列产品包含两大产品子系列: STM32G0x0 超值系列相比传统 的8 位和 16 位MCU市场更具强大的的竞争力。该系列运行速度高达 64 MHz,嵌入了精确的内部时钟,无需外部振荡器,并拥有全套高性能外设,可进一步节省成本。有了它,您可以大大减少因为不同的架构及不同开发工具而带来的成本开销和精力投入。
[单片机]
STM32G0开发笔记-1-开发环境搭建之STM32CubeMX
1、下载STM32cubeMX软件,解压 百度网盘下载链接:https://pan.baidu.com/s/1H56511Y_nd-4kDYT_cVh0w 提取码:zvnx 2、安装STM32cubeMX并配置 2.1点击安装,下一步 2.2选择接受条款,下一步 2.3选择安装路径,默认即可 3、选择芯片型号并创建工程 3.1选择由芯片信号生成工程 3.2 选择芯片型号 3.3 配置参数 可以一次选择下图指出的4个选项卡,依次设置引脚的功能、时钟、工程路径等参数。 配置完成后,可以点击右上角的GENERATE CODE按键生成工程代码。 4、生成工程文件 在生成工程代
[单片机]
<font color='red'>STM32G0</font>开发笔记-1-开发环境搭建之STM32CubeMX
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved