[嵌入式embed]Keil5-STM32F103C8T6(江协科技)+移植FreeRTOS v9模版项目
Keil5-STM32F103C8T6_江协科技+移植FreeRTOS模版
- 1.江协资料(接线图+视频+相关资料下载)
- 实际接线图(江协科技-STM32F103C8T6)
- 2.普中科技(STM32-F103玄武-FreeRTOS示例)
- 3.FreeRTOS v9.0.0 下载使用
- 4.开始从江协 3-1 LED闪烁移植FreeRTOS v9
- 1.项目文件如下
- 2.复制3-1 LED闪烁项目重命名为 3-FreeRTOS移植模版STM32F103C8T6
- 3.打开复制好的项目
- 4.解压FreeRTOSv9.0.0.zip
- 5.在Keil5软件加入FreeRTOS的.c和.h文件
- 6.配置工程include路径
- 7.在Keil5软件修改部分.c和.h文件
- 修改FreeRTOSConfig.h
- 修改stm32f10x_it.c-注释代码
- 修改stm32f10x_it.h-注释代码
- main.c修改
- 8.编译 && 运行
- 编译-没有报错
- 运行-led闪烁
- 5.参考资料
- 6.百度云资料
1.江协资料(接线图+视频+相关资料下载)
[3-2] LED闪烁&LED流水灯&蜂鸣器
江协接线图 3-2 LED流水灯
江协示例程序 3-1LED闪烁
江协STM32资料下载
实际接线图(江协科技-STM32F103C8T6)
2.普中科技(STM32-F103玄武-FreeRTOS示例)
2.3-FreeRTOS移植--FreeRTOS移植
普中STM32-F103玄武资料(FreeRTOS)下载
3.FreeRTOS v9.0.0 下载使用
我这边用到的是普中科技RTOS视频中介绍的FreeRTOS v9.0.0
如何下载使用FreeRTOS请参考我的文章
[嵌入式embed]Keil5打开FreeRTOS-v9项目提示:This is an MDK Version 4 project requiring…
4.开始从江协 3-1 LED闪烁移植FreeRTOS v9
1.项目文件如下
2.复制3-1 LED闪烁项目重命名为 3-FreeRTOS移植模版STM32F103C8T6
3.打开复制好的项目
4.解压FreeRTOSv9.0.0.zip
在3-FreeRTOS移植模版STM32F103C8T6创建FreeRTOS文件夹
复制FreeRTOSv9.0.0/FreeRTOS/Source的文件到
3-FreeRTOS移植模版STM32F103C8T6\FreeRTOS
删除FreeRTOS/porable部分文件夹,只保留Keil MemMang RVDS
复制FreeRTOSv9.0.0\FreeRTOS\Demo\CORTEX_STM32F103_Keil下的
FreeRTOSConfig.h到User文件夹
5.在Keil5软件加入FreeRTOS的.c和.h文件
新建三个Group,FreeRTOS_core 和 FreeRTOS_port 和 include
FreeRTOS_core 引入 FreeRTOS的.c文件
FreeRTOS_port 引入FreeRTOS\portable\MemMang的heap_4.c
FreeRTOS_port 引入FreeRTOS\portable\RVDS\ARM_CM3的port.c文件
include 引入FreeRTOS\include的所有.h文件
User引入FreeRTOSConfig.h
System文件夹复制一些文件,并引入System
6.配置工程include路径
最终项目结构如图:
7.在Keil5软件修改部分.c和.h文件
修改FreeRTOSConfig.h
/* 添加必须的四个宏 */
#define xPortPendSVHandler PendSV_Handler
#define vPortSVCHandler SVC_Handler
#define xPortSysTickHandler SysTick_Handler
#define INCLUDE_xTaskGetSchedulerState 1
修改stm32f10x_it.c-注释代码
修改stm32f10x_it.h-注释代码
main.c修改
main.c完整替换
#include "system.h"
#include "SysTick.h"
#include "led.h"
#include "usart.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 LED1_TASK_PRIO 2
//任务堆栈大小
#define LED1_STK_SIZE 50
//任务句柄
TaskHandle_t LED1Task_Handler;
//任务函数
void led1_task(void *pvParameters);/*******************************************************************************
* 函 数 名 : main
* 函数功能 : 主函数
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
int main()
{SysTick_Init(72);NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);//设置系统中断优先级分组4LED_Init();USART1_Init(115200);//创建开始任务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(); //进入临界区//创建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(); //退出临界区
} //LED1任务函数
void led1_task(void *pvParameters)
{while(1){LED3=0;vTaskDelay(200);LED3=1;vTaskDelay(800);}
}
8.编译 && 运行
编译-没有报错
运行-led闪烁
5.参考资料
三分钟移植FreeRTOS
6.百度云资料
完整项目资源