|
|
定時器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處就停下來了 |