博客專欄

EEPW首頁(yè) > 博客 > STM32 產(chǎn)生us延遲的方法

STM32 產(chǎn)生us延遲的方法

發(fā)布人:southcreek 時(shí)間:2020-08-11 來源:工程師 發(fā)布文章

使用一個(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)系工作人員刪除。



關(guān)鍵詞:

相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉