Hal_Delay()前面有weak修饰,可以另写一个函数自动替换。里面获取时间的计数器改成读FreeRTOS的。
是因为一般我们使用比如USB库,自动生成得这些里面还是使用HAL_Delay函数来进行延时,一般如果使用STM32官方推荐得FREERTOS就不用担心这个问题,因为官方已经直接适配好了,带RTOS得USB库。而我们使用得RTThread-Nano是没有适配得。所以当我使用得时候,发现一直卡死在这里 其中tickstart得值一直为0。而后... 查看原文 用...
处理STM32的HAL库函数返回异常问题可以采取以下步骤:1. 在官方提供的例程中,通常会将返回值不是HAL_...
由于FreeRTOS和HAL库都默认使用Systick定时器作为时基源,而systick中断优先级一般设置为最低,导致在高优先中断函数里调用HAL_Delay()会卡死,因此要避免在中断里调用HAL_Delay()或者配置别的定时器作为HAL库的时基源。 8.FreeRTOS是怎么初始化systick的? 在FreeRTOS源码包\FreeRTOS\Source\portable这个路径是包含了...
FreeRTOS 是一个实时操作系统,它所奉行的调度规则: 1. 高优先级抢占低优先级任务,系统永远执行最高优先级的任务(即抢占式调度); 总结: 1. 高优先级任务,优先执行; 2. 高优先级任务不停止,低优先级任务无法执行; 3. 被抢占的任务将会进入就绪态
打开delay.c 将内部所有代码替换 #include "delay.h"#include "sys.h"#include "FreeRTOS.h"#include "task.h" static u32 fac_us=0; //us延时倍乘数static u16 fac_ms=0; //ms延时倍乘数,在os下,代表每个节拍的ms数 extern void xPortSysTickHandler(void); ...
Stm32cubemx生成的 Freertos工程,用TIM6作为systick的定时器(stm32f1xx_hal_timebase_tim.c),在...
原因是因为系统时钟设置里给滴答定时器的抢占优先级为15,所以在中断里调用HAL_Delay会卡死。 所以我们需要去调高滴答定时器的抢占优先级,调低中断的抢占优先级。 /* USER CODE BEGIN 1 */ void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) { if(GPIO_Pin == KEY1_Pin) { HAL_Delay(20); HAL_GPIO...
第39集(5.2/80)硬件SysTick定时器提高时基精度下个实验直接上RTOS! 02:33 第40集(5.3/80)RTOS可以让代码解耦 提高开发效率准备迈出第二步! 01:03 第41集(5.4/80)裸机中的delay函数就是在浪费CPU CPU时间是极为宝贵的! 01:29 第42集(5.5/80)揭秘STM32 HAL库中的delay函数的具体实现空耗CPU!暴殄天...
将#define CMSIS_device_header "stm32f10x.h" 修改成 #define CMSIS_device_header "stm32f1xx_hal.h" ,keil下载的默认是库函数版移植的,需要将头文件变更成"stm32f1xx_hal.h" 接下来修改FREERTOS_CONFIG.H,打开头文件FREERTOS_CONFIG.H, 将#define configUSE_TIMERS 0 修改成 #define configUSE_TIMERS...