在STM32F103C8T6移植FreeRTOS

所看的视频:STM32移植FreeRTOS智慧安全厨房实战项目 单片机/操作系统/物联网/Linux_哔哩哔哩_bilibili

所需文件 

 

最后的Project呈现如下分布: 

 

 代码

#include "stm32f10x.h"                  // Device header
#include "FreeRTOS.h"             
#include "task.h"                 
#include "queue.h"                


int a1 = 0;
int a2 = 0;

void Task1Function(void *param)
{
	while(1)
	{
		a1 = 1;
		a2 = 0;
	}

}
void Task2Function(void *param)
{
	while(1)
	{
		a1 = 0;
		a2 = 1;
	}
}

int main()
{
	TaskHandle_t xHandleTask1;
	xTaskCreate(Task1Function, "Task1", 10, NULL, 1, &xHandleTask1);
	xTaskCreate(Task2Function, "Task2", 10, NULL, 1, NULL);

	/* Start the scheduler. */
	vTaskStartScheduler();
	while(1);

}

遇到的问题 

1.关于修改Free RTOSConfig.h,遇到了硬件错误HardFault_Handler,需要定义下面三个宏

原因:Free RTOS运行的时候,任务的切换,时钟的进行,都需要进入进入三个中断函数,xPortPendSVHandler 
vPortSVCHandler     
xPortSysTickHandler

但是呢,默认执行stm32f10.it.h里面的

PendSV_Handler
SVC_Handler
SysTick_Handler
 这东西是个空实现,需要我们自己定义,但是我们又那里会呢? 我们可以接入Free RTOS的三个中断,定义三个宏,PendSV_Handler     SVC_Handler       SysTick_Handler  被xPortPendSVHandler 
vPortSVCHandler     
xPortSysTickHandler代替就好了;

 总之,官方案例中的Free RTOSConfig.h模板也得根据我们自己的需求进行裁剪;

2.关于波形不正确的问题

STM32开发板的默认配置都是使用的外部8MHz的晶振,系统时钟为72MHz,而当使用12MHz的外部晶振,如不从新配置时钟,按默认配置则软件会认为自己的系统时钟为72MHz,而实际的系统时钟为108MHz,就是放大九倍;

 

 CPU 72MHz,

 这是学习STM32上移植FreeRTOS的第一步 加油少年

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值