STM32CubeMX配置freertos配置任务(一)

使用STM32CubeMX 配置Freertos 生成一个任务点亮LED
stm32cubemx
STM32CubeMX 是 ST 意法半导体近几年来大力推荐的STM32 芯片图形化配置工具, 允许用户使用图形化向导生成C 初始化代码,可以大大减轻开发工作,时间和费用。STM32CubeMX几乎覆盖了STM32 全系列芯片。

1.新建项目文件
在这里插入图片描述
2.本例子需要使用到的外设只有GPIO点亮LED
在这里插入图片描述
LED端口为PC13 ,点击PC13选择GPIO_OUTPUT
配置GPIO端口为输出。

3.配置Freertos
在这里插入图片描述
选择middleware ,点击freertos interface 选择CMSISV1 或者V2
在这里插入图片描述
选择task and Queue,点击add
在这里插入图片描述
在出现的对话框中对任务进行设置,若无其他需求可以点击确定使用默认配置。
在这里插入图片描述

在这里插入图片描述
点击project manager
设置项目名称,目录
tool-Chain选择MDK-ARM(如果你用keil5开发的话)
在这里插入图片描述
勾选code Generator 如图所示的条目
在这里插入图片描述
点击生成代码。
使用MDK 打开所创建的项目(刚才设了项目目录)

打开main.c

int main(void)
{
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  /* USER CODE BEGIN 2 */

  /* USER CODE END 2 */

  /* Call init function for freertos objects (in freertos.c) */
  MX_FREERTOS_Init();
  /* Start scheduler */
  osKernelStart();

  /* We should never get here as control is now taken by the scheduler */
  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

void MX_GPIO_Init(void)
{

  GPIO_InitTypeDef GPIO_InitStruct = {0};

  /* GPIO Ports Clock Enable */
  __HAL_RCC_GPIOC_CLK_ENABLE();

  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_RESET);

  /*Configure GPIO pin : PC13 */
  GPIO_InitStruct.Pin = GPIO_PIN_13;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);

}

以上是自动生成的main函数
在函数 MX_FREERTOS_Init(); 中是对用户函数的初始化,也就是创建任务阶段。
这里会比较晕,和freertos 内核代码的样式会有很大区别,都是CMSIS定义的又包一层。

void MX_FREERTOS_Init(void) {
  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* USER CODE BEGIN RTOS_MUTEX */
  /* add mutexes, ... */
  /* USER CODE END RTOS_MUTEX */

  /* USER CODE BEGIN RTOS_SEMAPHORES */
  /* add semaphores, ... */
  /* USER CODE END RTOS_SEMAPHORES */

  /* USER CODE BEGIN RTOS_TIMERS */
  /* start timers, add new ones, ... */
  /* USER CODE END RTOS_TIMERS */

  /* USER CODE BEGIN RTOS_QUEUES */
  /* add queues, ... */
  /* USER CODE END RTOS_QUEUES */

  /* Create the thread(s) */
  /* definition and creation of defaultTask */
  osThreadDef(defaultTask, StartDefaultTask, osPriorityNormal, 0, 128);
  defaultTaskHandle = osThreadCreate(osThread(defaultTask), NULL);

  /* definition and creation of myTask02 */
  osThreadDef(myTask02, StartTask02, osPriorityIdle, 0, 128);
  myTask02Handle = osThreadCreate(osThread(myTask02), NULL);

  /* USER CODE BEGIN RTOS_THREADS */
  /* add threads, ... */
  /* USER CODE END RTOS_THREADS */

}

osThreadDef(defaultTask, StartDefaultTask, osPriorityNormal, 0, 128);
使用宏定义创建了一个任务结构体,对结构体进行初始化。

#define osThreadDef(name, thread, priority, instances, stacksz)  \
const osThreadDef_t os_thread_def_##name = \
{ #name, (thread), (priority), (instances), (stacksz)}

os_pthread pthread; ///< start address of thread function
这个就是函数的入口
defaultTaskHandle = osThreadCreate(osThread(defaultTask), NULL);
这行目的是把刚才创建的任务结构体带入到任务的创建函数中
osThreadCreate 调用Freertos 的任务创建函数。
StartDefaultTask
StartTask02
一个是系统默认创建的任务,一个是我们STM32CubeMX中创建的任务。
在我们创建的函数中加入LED翻转

void StartTask02(void const * argument)
{
  /* USER CODE BEGIN StartTask02 */
  /* Infinite loop */
  for(;;)
  {
    osDelay(300);
	HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13);
  }
  /* USER CODE END StartTask02 */
}

  • 6
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在使用STM32CubeMX配置FreeRTOS时,首先需要创建任务。你可以通过以下步骤完成任务的创建: 1. 打开STM32CubeMX软件,并选择你的目标芯片型号。 2. 在"Project"视图中,点击"RTOS"选项卡。 3. 点击"Tasks"选项卡,并点击"Add"按钮以添加一个任务。 4. 在弹出的对话框中,填写任务的名称、优先级和堆栈大小等信息。 5. 在"Entry Function"字段中,输入任务的函数名。 6. 点击"OK"按钮以完成任务的创建。 7. 重复以上步骤,可以添加多个任务。 8. 最后点击"Project"视图中的"Generate Code"按钮,生成相应的FreeRTOS配置代码。 以上是通过STM32CubeMX进行任务创建的步骤。你可以根据具体的需求和任务功能,对任务的优先级、堆栈大小等参数进行调整和配置。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [STM32cubeMX配置FreeRTOS](https://blog.csdn.net/m0_49476241/article/details/123029306)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [STM32cubeMX快速配置FreeRTOS任务](https://blog.csdn.net/m0_49476241/article/details/123323746)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值