STM32F407ZGT6工程模板(FreeRTOS+HAL)
- 1新建工程文件夹
- 2根目录文件夹顺序介绍
- 3新建工程
- 4移植FreeRTOSv202112.00内核版本V10.4.6
- 移植验证
1新建工程文件夹
新建文件夹STM32F103ZGT6
新建子文件夹,Drivers、Middlewares、Output、Projects、User
Drivers 存放与硬件相关的驱动层文件
Middlewares 存放中间层组件文件和第三方中间层文件
Output 存放工程编译输出文件
Projects 存放 MDK 工程文件
User 存放 HAL 库用户配置文件、main.c、stm32f1xx_it.c、
以及我们自己编写的其它应用程序
keilkill.bat 的可执行文件,双击便可执行。其
作用是删除编译器编译后的中间文件,减少工程占用的硬盘空间,方便我们打包。
2根目录文件夹顺序介绍
同STM32F103ZET6模板一致
3新建工程
同STM32F103ZET6模板一致
4移植FreeRTOSv202112.00内核版本V10.4.6
移植验证
/******************************************************************************************************* @file main.c* @author 正点原子团队(ALIENTEK)* @version V1.0* @date 2021-10-14* @brief template 实验* @license Copyright (c) 2020-2032, 广州市星翼电子科技有限公司***************************************************************************************************** @attention** 实验平台:正点原子 探索者 F407开发板* 在线视频:www.yuanzige.com* 技术论坛:http://www.openedv.com/forum.php* 公司网址:www.alientek.com* 购买地址:zhengdianyuanzi.tmall.com******************************************************************************************************/#include "./BSP/sys/sys.h"
#include "./BSP/delay/delay.h"
#include "FreeRTOS.h"
#include "task.h"//任务优先级
#define START_TASK_PRIO 1
//任务堆栈大小
#define START_STK_SIZE 128
//任务句柄
TaskHandle_t StartTask_Handler;
//任务函数
void start_task(void *pvParameters);//任务优先级
#define LED0_TASK_PRIO 2
//任务堆栈大小
#define LED0_STK_SIZE 50
//任务句柄
TaskHandle_t LED0Task_Handler;
//任务函数
void led0_task(void *pvParameters);//任务优先级
#define LED1_TASK_PRIO 3
//任务堆栈大小
#define LED1_STK_SIZE 50
//任务句柄
TaskHandle_t LED1Task_Handler;
//任务函数
void led1_task(void *pvParameters);void led_init(void); /* LED初始化函数声明 */int main(void)
{HAL_Init(); /* 初始化HAL库 */sys_stm32_clock_init(336, 8, 2, 7); /* 设置时钟,168Mhz */delay_init(168); /* 延时初始化 */led_init(); /* 初始化LED *///创建开始任务xTaskCreate((TaskFunction_t )start_task, //任务函数(const char* )"start_task", //任务名称(uint16_t )START_STK_SIZE, //任务堆栈大小(void* )NULL, //传递给任务函数的参数(UBaseType_t )START_TASK_PRIO, //任务优先级(TaskHandle_t* )&StartTask_Handler); //任务句柄 vTaskStartScheduler(); //开启任务调度
}//开始任务任务函数
void start_task(void *pvParameters)
{taskENTER_CRITICAL(); //进入临界区//创建LED0任务xTaskCreate((TaskFunction_t )led0_task, (const char* )"led0_task", (uint16_t )LED0_STK_SIZE, (void* )NULL, (UBaseType_t )LED0_TASK_PRIO, (TaskHandle_t* )&LED0Task_Handler); //创建LED1任务xTaskCreate((TaskFunction_t )led1_task, (const char* )"led1_task", (uint16_t )LED1_STK_SIZE, (void* )NULL,(UBaseType_t )LED1_TASK_PRIO,(TaskHandle_t* )&LED1Task_Handler); vTaskDelete(StartTask_Handler); //删除开始任务taskEXIT_CRITICAL(); //退出临界区
}//LED0任务函数
void led0_task(void *pvParameters)
{while(1){while(1){HAL_GPIO_WritePin(GPIOF,GPIO_PIN_9,GPIO_PIN_RESET);vTaskDelay(1000);HAL_GPIO_WritePin(GPIOF,GPIO_PIN_9,GPIO_PIN_SET);vTaskDelay(1000);}}
} //LED1任务函数
void led1_task(void *pvParameters)
{while(1){HAL_GPIO_WritePin(GPIOF,GPIO_PIN_10,GPIO_PIN_SET); /* LED1 灭 */vTaskDelay(200);HAL_GPIO_WritePin(GPIOF,GPIO_PIN_10,GPIO_PIN_RESET); /* LED1 灭 */vTaskDelay(800);}
}/*** @brief 初始化LED相关IO口, 并使能时钟* @param 无* @retval 无*/
void led_init(void)
{GPIO_InitTypeDef gpio_init_struct;__HAL_RCC_GPIOF_CLK_ENABLE(); /* LED0,LED1时钟使能 */gpio_init_struct.Pin = GPIO_PIN_9; /* LED0引脚 */gpio_init_struct.Mode = GPIO_MODE_OUTPUT_PP; /* 推挽输出 */gpio_init_struct.Pull = GPIO_PULLUP; /* 上拉 */gpio_init_struct.Speed = GPIO_SPEED_FREQ_HIGH; /* 高速 */HAL_GPIO_Init(GPIOF, &gpio_init_struct); /* 初始化LED0引脚 */gpio_init_struct.Pin = GPIO_PIN_10; /* LED1引脚 */HAL_GPIO_Init(GPIOF, &gpio_init_struct); /* 初始化LED1引脚 */HAL_GPIO_WritePin(GPIOF, GPIO_PIN_9, GPIO_PIN_SET); /* LED0 灭 */HAL_GPIO_WritePin(GPIOF, GPIO_PIN_10, GPIO_PIN_SET);/* LED1 灭 */
}
STM32F407ZGT6工程模板