最近在用stm32f103学习FreeRTOS中断实验的时候发现了一个问题:
void task1( void * pvParameters )
{
uint8_t task1_num=0;
while(1)
{
if(++task1_num==5)
{
task1_num=0;
printf("close interrupt successfully\r\n");
portDISABLE_INTERRUPTS();
delay_xms(5000);
printf("open interrupt successfully\r\n");
portENABLE_INTERRUPTS();
}
vTaskDelay(1000);
}
}
在使用串口发送之后lose interrupt successfully与open interrupt successfully之间的时间间隔相差正好四十秒,我意识到可能是时钟分频的问题,于是去改了滴答定时器延时中的HCLK,改成了HCLK_DIV8,发现没有任何改变,于是调试了半天。直到我尝试去删除FreeRTOSConfig.h中的#define configSYSTICK_CLOCK_HZ (configCPU_CLOCK_HZ/8),将HCLK_DIV8还原成HCLK,延时才变正常。作为初学者非科班出身的人,碰到这种问题真的很悲哀,有余心而力不足。