Nucleo-L476运行FreeRTOS学习1
程序员文章站
2022-06-09 16:33:35
...
假期在家由于肺炎疫情肆虐,在出租屋里面学习点专业内的东西,开始尝试写博客记录自己学习过程。
今天要做的是在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的一些配置
- 任务建立
添加两个任务,一个用来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,GPIO_PIN_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各配置和功能。
下一篇: java定时器