美文网首页
STM32 +Free RTOS+LED闪烁

STM32 +Free RTOS+LED闪烁

作者: QUIZ_JS | 来源:发表于2018-10-18 09:25 被阅读0次

移植Free RTOS

由于Cubemx,在STM32中移植Free RTOS变的异常简单。只需要勾选一下,开发工具将移植的工作全部搞定。如图所示:



由于后面时钟存在冲突需要对时钟修改,如下图所示:



同时修改了时钟配置,如下图所示:

然后再添加两个GPIO用于点亮LED,这里不再详述。
在Free RTOS中添加任务列表。



然后可以生成MDK V5下的代码。

代码分析

Free RTOS 任务相关的代码会自动生成如下:

创建句柄:

osThreadId LED1Handle;
osThreadId LED2Handle;

创建任务函数:

void StartLED1Task(void const * argument);
void StartLED2Task(void const * argument);

main函数中创建线程:

int main(void)
{

  /* MCU Configuration----------------------------------------------------------*/
  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();
  /* Configure the system clock */
  SystemClock_Config();
  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_SPI2_Init();
  MX_USART2_UART_Init();

  /* Create the thread(s) */
  /* definition and creation of LED1 */
  osThreadDef(LED1, StartLED1Task, osPriorityNormal, 0, 128);
  LED1Handle = osThreadCreate(osThread(LED1), NULL);

  /* definition and creation of LED2 */
  osThreadDef(LED2, StartLED2Task, osPriorityIdle, 0, 128);
  LED2Handle = osThreadCreate(osThread(LED2), NULL);

  /* Start scheduler */
  osKernelStart();
  
  /* We should never get here as control is now taken by the scheduler */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {

}

创建自己的任务函数:

/* StartLED1Task function */
void StartLED1Task(void const * argument)
{

  /* USER CODE BEGIN 5 */
  /* Infinite loop */
  for(;;)
  {
        HAL_GPIO_WritePin(GPIOB, LED0_Pin, 0);
    osDelay(1000);
        HAL_GPIO_WritePin(GPIOB, LED0_Pin, 1);
        osDelay(1000);
  }
  /* USER CODE END 5 */ 
}

/* StartLED2Task function */
void StartLED2Task(void const * argument)
{
  /* USER CODE BEGIN StartLED2Task */
  /* Infinite loop */
  for(;;)
  {
        HAL_GPIO_WritePin(GPIOB, LED1_Pin, 0);
    osDelay(100);
        HAL_GPIO_WritePin(GPIOB, LED1_Pin, 1);
        osDelay(100);
  }
  /* USER CODE END StartLED2Task */
}

最终能够实现LED灯的交替显示。
调试中的问题:

1、关于创建任务函数xTaskCreate()和osThreadDef()的区别:
xTaskCreate()是FreeRTOS的原始API函数。
osThreadDef()ARM搞的CMIS-RTOS V1封装层,对FreeRTOS的API函数进行封装。

相关文章

  • STM32 +Free RTOS+LED闪烁

    移植Free RTOS 由于Cubemx,在STM32中移植Free RTOS变的异常简单。只需要勾选一下,开发工...

  • 9.13知识点总结

    通过查Stm32系列的中文手册 换算数值 用函数实现Led点亮 切换和闪烁

  • stm32使用TIM3产生定时器中断控制LED灯闪烁

    参考文章 STM32之定时器中断控制LED闪烁https://blog.csdn.net/qq_36554582/...

  • STM32简介

    STM32简介 STM32简介STM32是什么?STM32与ARM的关系STM32F407Z76介绍STM32能做...

  • Free, Free, Free!

    你去商场买东西,好像都没有直接FREE的(免费了怎么挣钱呀,哈哈),不过他们会有打折和促销!有时候倒是有FREE ...

  • Free Free Free

    刚刚看了一个博文,看到“所谓自由,不是随心所欲,而是自我主宰。” 勾起之前的一个想法。 中国互联网的发展,从起步的...

  • 《嵌入式》文集目录

    一、STM32 STM32学习:STM32介绍与学习[https://www.jianshu.com/p/2bca...

  • 9月15日

    今天上午老师介绍如何利用STM32的固件库去控制GPIO 实现灯的闪烁和蜂鸣 比较难不怎么适应 其次C语言理解的不...

  • 《嵌入式-STM32开发指南》第一部分 入门篇 - 第4章 库开

    4.1 STM32 系统架构 STM32 的系统架构比 51 单片机就要强大很多了。首先我们看看 STM32 的系...

  • STM32定时器编程

    一.实验目的 了解STM32中定时器的原理。 掌握在STM32如何实现精确定时。 二.实验要求 了解STM32中定...

网友评论

      本文标题:STM32 +Free RTOS+LED闪烁

      本文链接:https://www.haomeiwen.com/subject/zifjzftx.html