STM32 產(chǎn)生us延遲的方法
使用一個(gè)空閑不用的定時(shí)器,做如下設(shè)置,預(yù)分頻設(shè)為0, 周期設(shè)置為 55520-1
/* TIM7 init function */
static void MX_TIM7_Init(void)
{
TIM_MasterConfigTypeDef sMasterConfig;
htim7.Instance = TIM7;
htim7.Init.Prescaler = 0;
htim7.Init.CounterMode = TIM_COUNTERMODE_UP;
htim7.Init.Period = 65519;
htim7.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
if (HAL_TIM_Base_Init(&htim7) != HAL_OK)
{
_Error_Handler(__FILE__, __LINE__);
}
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
if (HAL_TIMEx_MasterConfigSynchronization(&htim7, &sMasterConfig) != HAL_OK)
{
_Error_Handler(__FILE__, __LINE__);
}
}
另外編寫一個(gè) delay_us的函數(shù)
/* 最大us數(shù)為 1356us */
inline void Delay_us(uint16_t us){
TIM7->CNT = 0;
HAL_TIM_Base_Start(&htim7);
while(TIM7->CNT < ((uint16_t)48 * us - 1));
}
調(diào)用時(shí),將定時(shí)計(jì)數(shù)器清零,然后啟動(dòng)定時(shí)器,等待計(jì)數(shù)器達(dá)到設(shè)定的值后返回。
這里的時(shí)鐘頻率 PCLK為48M,計(jì)數(shù)器設(shè)定值為 48*us數(shù)。使用時(shí)注意這個(gè)數(shù)不要超過在period中的設(shè)定值。 程序運(yùn)行時(shí)如果被中斷,會(huì)損失精度。調(diào)用函數(shù),函數(shù)返回也需要時(shí)間。如果需要高精度延遲時(shí),需要將這些問題考慮進(jìn)去。
*博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀點(diǎn),如有侵權(quán)請(qǐng)聯(lián)系工作人員刪除。