博客專欄

        EEPW首頁 > 博客 > 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)請聯(lián)系工作人員刪除。



        關(guān)鍵詞:

        相關(guān)推薦

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

        關(guān)閉
        主站蜘蛛池模板: 来凤县| 博客| 泾源县| 喜德县| 秭归县| 海淀区| 紫金县| 陇南市| 南投县| 顺义区| 陈巴尔虎旗| 湘乡市| 涪陵区| 广汉市| 越西县| 卫辉市| 齐河县| 永清县| 乌兰县| 礼泉县| 临颍县| 同江市| 晋宁县| 定陶县| 定南县| 花莲市| 梓潼县| 方山县| 盈江县| 灵石县| 乡城县| 杭州市| 衡东县| 韩城市| 遵化市| 龙江县| 芜湖市| 扬州市| 巢湖市| 响水县| 文成县|