Nucleo-L476运行FreeRTOS学习1

 

假期在家由于肺炎疫情肆虐,在出租屋里面学习点专业内的东西,开始尝试写博客记录自己学习过程。

今天要做的是在ST官方出品的Nucleo-L476上初步运行Free RTOS

  •  使用硬件+软件工具

硬件平台使用Nucleo-L476

官方资料见:https://www.st.com/zh/evaluation-tools/nucleo-l476rg.html

板子LED,LD3为电源指示灯(LD2可以我们自己控制)

工程和底层代码驱动使用CubeMX5.3.0生成(省去了建立工程和底层驱动编写),程序代码开发工具使用Keil5.25.2

  • 建立工程

New project,选择板子型号,Start Project

(同时Cube X界面上会有板子相配套的资源说明、用户手册,查阅很方便)

选择Yes,使用默认板子外设配置

可以看到,默认外设引脚已经有配置(包括时钟、外部IO、串口等配置)

  • 工程配置

时钟已经默认选择LSE(外部低速),可以结合看板子的原理图 X2晶振焊接(X3外部高速未焊接)

下载调试方式为SW(板载STLink)

选择使用Free RTOS

选择使用FreeRTOS

这里是FreeRTOS的一些配置

  • 任务建立

添加两个任务,一个用来LED闪烁 myTask_LED,一个用来串口打印数据 myTask_USART

根据自己的情况生成代码配置

点击生成代码后出现:

这里是说推荐使用定时器生成系统时钟信号,我们重新配置一下,系统时钟的来源,选择为定时器1

再次点击生成代码

打开工程

  • 代码修改

先编译一下看有无错误(编译过程比较慢)

我们只需要填写刚刚建立的两个任务的代码

LED任务写

/* USER CODE END Header_StartTaskLED */
void StartTaskLED(void *argument)
{
  /* USER CODE BEGIN StartTaskLED */
  /* Infinite loop */
  for(;;)
  {
	//翻转LED电平
	HAL_GPIO_TogglePin(GPIOA,5);
    osDelay(500);
  }
  /* USER CODE END StartTaskLED */
}

/* USER CODE BEGIN Header_StartTaskUSART */
/**
* @brief Function implementing the myTask_USART thread.
* @param argument: Not used
* @retval None
*/
/* USER CODE END Header_StartTaskUSART */
void StartTaskUSART(void *argument)
{
  uint8_t UART_BUF[14] = "Hello FreeRTOS";
  /* USER CODE BEGIN StartTaskUSART */
  /* Infinite loop */
  for(;;)
  {
	HAL_UART_Transmit(&huart2,UART_BUF,14,0xffff);
    osDelay(1000);
  }
  /* USER CODE END StartTaskUSART */
}

下载到板子中看实验结果

后续将研究Free RTOS各配置和功能。

发布了1 篇原创文章 · 获赞 0 · 访问量 21

猜你喜欢

转载自blog.csdn.net/Paul_Yu_Zhang/article/details/104233028
今日推荐