STM32G0学习手册——移植FreeRTOS v202104.00
Posted SCCELE
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STM32G0学习手册——移植FreeRTOS v202104.00相关的知识,希望对你有一定的参考价值。
目录
2、使用STM32CubeMX生成初始化代码(BSP_Init)
1.准备FreeRTOS源文件
1.1、到freertos.org下载最新版本的源文件,链接地址
1.2、FreeRTOS 文件结构如下:
需要用到的是粉色的头文件和翠绿色c文件。
2、使用STM32CubeMX生成初始化代码(BSP_Init)
2.1、使能HSE/LSE/SWD/GPIO(引脚数量和外设具体看你需要,这里是点灯用)
2.2、时钟数设置64(MHz),设置工程的文件名,路径,IDE与版本,勾选生成'.c/.h'。生成工程文档
3、复制FreeRTOS文件到工程目录中
3.1、在工程文档根目录下,新建一个文件FreeRTOS,在该目录下新建include和source文件夹
最后看起来目录结构是这样
+FreeRTOS
|+include
|+source
3.2、在FreeRTOS源文件中,把所有的翠绿色.c文件复制到../FreeRTOS/source中
3.3、除了FreeRTOSConfig.h,把所有的粉色.h文件复制到../FreeRTOS/include中
3.4、把头文件stdint.readme改为stdint.h,使用keil打开工程
3.5、新建一个FreeRTOS/source,把所有的c文件添加进去
3.6、把include的目录包含进去。Debug选项里面勾上"Reset and Run"
4、修改代码
4.1、打开stm32g0xx_it.c。注释掉SVC_Handler() / PendSV_Handler() / SysTick_Handler()。因为FreeRTOS里面已经实现过一次
4.2、在main.c添加代码,添加任务
/* USER CODE BEGIN Includes */
#include "FreeRTOS.h"
#include "task.h"
#include "queue.h"
#include "semphr.h"
#include "event_groups.h"
#include "timers.h"
/* USER CODE END Includes */
*
*
*
/* USER CODE BEGIN PV */
static void Send_Task(void* pvParameters);
static void Callback_LEDTOGGLE(void* pvParameters);
static void AppTaskCreate(void);
/*Task Handle*/
static TaskHandle_t AppTaskCreate_Handle=NULL;
static TaskHandle_t Send_Task_Handle=NULL; //PRO:3
/*Timer handle*/
static TimerHandle_t Timer1=NULL;
static void Callback_LEDTOGGLE(void* pvParameters)
{
HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_2);
}
/* USER CODE END PV */
*
*
*
int main(void)
{
/* USER CODE BEGIN 1 */
BaseType_t xReturn =pdPASS;
/* USER CODE END 1 */
*
*
/* Infinite loop */
/* USER CODE BEGIN WHILE */
xReturn=xTaskCreate((TaskFunction_t)AppTaskCreate,\\
(const char *)"APPTASKCREATE",\\
(uint16_t)512,(void*)NULL,(UBaseType_t)1,\\
(TaskHandle_t*)&AppTaskCreate_Handle);
if(pdPASS==xReturn)
vTaskStartScheduler();
else
return -1;
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
*
*
/* USER CODE BEGIN 4 */
/***********
*@Function name:SEND_Task
*@description:SEND_Task body
*@Parameter:None
*@return:None
*************/
static void Send_Task(void* pvParameters)
{
while(1)
{
vTaskDelay(100); //Just to demonstrate task switching.
}
}
static void AppTaskCreate(void)
{
BaseType_t xReturn=pdPASS;
taskENTER_CRITICAL();
/* Create Timer1 Handle*/
Timer1=xTimerCreate((const char*)"1sec-toggle",(TickType_t)pdMS_TO_TICKS(1000),\\
(UBaseType_t)pdTRUE,(void*)1,(TimerCallbackFunction_t)Callback_LEDTOGGLE);
if(NULL!=Timer1)
{}
xTimerStart(Timer1,0);
/*SEND task*/
xReturn=xTaskCreate((TaskFunction_t)Send_Task,\\
(const char*)"SEND_TASK",\\
(uint16_t)512,(void*)NULL,(UBaseType_t)3,\\
(TaskHandle_t*)&Send_Task_Handle);
if(pdPASS==xReturn)
{}
vTaskDelete(AppTaskCreate_Handle);
taskEXIT_CRITICAL();
}
/* USER CODE END 4 */
4.3、编译烧录。
以上是关于STM32G0学习手册——移植FreeRTOS v202104.00的主要内容,如果未能解决你的问题,请参考以下文章