定时器3 应是不能 support 比 us 低 1/n 倍的 中断,换句话说,是 您的微秒延时思路是 分钟式延时的思路。 当 同一频繁中断不断发生,而中断处理来不及 时,就是这种情况。 应改用 systemtick 来实现 微秒延时, 查下百度就有了。 |
cyc2009 发表于 2019-10-22 16:18 Cube生成的工程文件,很多有时是靠systick进行判断的,所以调用systick会出问题 |
tim13不需要设置中断吗 |
我一般使用这个: void delay_us(__IO uint32_t nTime) { int old_val,new_val,val; if(nTime > 900) { for(old_val = 0; old_val < nTime/900; old_val++) { delay_us(900); } nTime = nTime%900; } old_val = SysTick->VAL; new_val = old_val - CPU_FREQUENCY_MHZ*nTime; if(new_val >= 0) { do { val = SysTick->VAL; } while((val < old_val)&&(val >= new_val)); } else { new_val += CPU_FREQUENCY_MHZ*1000; do { val = SysTick->VAL; } while((val <= old_val)||(val > new_val)); } } |
兄弟,问题最后怎么解决的啊? |
delay函数的hal_tim_set不是使能了吗 |
sky505050w 发表于 2019-4-25 20:36 delay函数里不是使能了吗HAL_TIM_BASE_START |
sky505050w 发表于 2019-4-25 20:36 delay函数里HAL_TIME_BASE_START不是使能了吗 |
你把优化设成0级看看 |
hal库生成的定时器初始化函数最后没有使能定时器,需要自己添加代码使能 |
编译没有报错,运行到delay_us处就停下来了 |