關於使用stm8單片機的“外部計數”TIMx_ETR測脈衝的軟件配置問題!

本人在大四工作實習期間,由於工作需要,需要使用stm8單片機測量一個方波脈衝的頻率,一開始想要使用定時器捕獲,可是需要測量的脈衝頻率較高,用捕獲測量不僅測量不準確,而且效率低下。於是乎想到了用外部計數TIMx_ETR功能測量!

真正的問題來了,之前從來沒用過stm8的外部脈衝計數功能,而且網上也是在找不到如何配置外部脈衝計數模式。而公司的進度還在不斷的向前趕,更蛋疼的是stm8的絕大多數資料手冊全是英文版的,不像stm32單片機那樣有很多中文版。這下可急壞了筆者。可還是硬着頭皮連夜加班的看英文文檔。

經過2天的努力煎熬,筆者終於找到了解決方法,那個興奮啊,無以言表。接下來話不多說,趕緊向廣大網友分享stm8單片機的TIMx_ETR的配置技巧:

1:其實STM8單片機的TIMx_ETR功能對STM8S系列和STM8L系列的配置方法是不相同的;STM8S是標準版,而STM8L是低功耗版;

對於STM8S系列的外部計數配置,需要通過向FLASH內修改選項字節來激活TIMx_ETR的重映射功能,通過查看手冊的“選項字節”那部分就可以發現,在STM8S的4803h地址的重映射選項裏有個選項字節叫OPT2,當向OPT2字節寫入0X20時,便可以將PB3引腳映射爲TIMx_ETR外部脈衝計數功能引腳。配置完選項字節之後另外還有一個值得注意的問題是:此時該PB3引腳的管腳必須配置成“上拉輸入且無外部中斷”,即庫函數裏的 GPIO_Init(GPIOB, GPIO_Pin_3, GPIO_Mode_In_PU_No_IT);這一句。現附程序如下所示:

{

              TIM1_DeInit();
       CLK_PeripheralClockConfig(CLK_PERIPHERAL_TIMER1, ENABLE);//  開啓定時器2的時鐘,
        FLASH_Unlock(FLASH_MEMTYPE_DATA);      //解鎖
        while(FLASH_GetFlagStatus(FLASH_FLAG_DUL) == RESET);
        FLASH_ProgramOptionByte(0x4803,0x20);      //選項字節,向0X4803地址寫入0X20
        u8 status;
       status=FLASH_WaitForLastOperation(FLASH_MEMTYPE_DATA);
        if(status==FLASH_STATUS_SUCCESSFUL_OPERATION)
        {}
         FLASH_Lock(FLASH_MEMTYPE_DATA);
        TIM1_ETRClockMode2Config(TIM1_EXTTRGPSC_DIV2, TIM1_EXTTRGPOLARITY_INVERTED,0x00);   //外部計數配置
  
         TIM1_TimeBaseInit(1,TIM1_COUNTERMODE_UP,9999,0);
         TIM1_ITConfig(TIM1_IT_UPDATE,ENABLE); 
         TIM1_SetCounter(0x0);
         TIM1_ClearITPendingBit(TIM1_IT_UPDATE);   //參考庫


        TIM1_Cmd(ENABLE);
}

2:然而不是所有STM8單片機都需要改選項字節,對於STM8L系列單片機就不必修改選項字節,直接配置即可,附程序代碼如下:

               TIM2_DeInit();
        CLK_PeripheralClockConfig(CLK_Peripheral_TIM2, ENABLE);//  開啓定時器2的時鐘
       TIM2_ETRClockMode2Config(TIM2_ExtTRGPSC_DIV2, TIM2_ExtTRGPolarity_Inverted,0x00);
       TIM2_TimeBaseInit(TIM2_Prescaler_1,TIM2_CounterMode_Up,9999);//需不需要加?
         TIM2_ITConfig(TIM2_IT_Update,ENABLE); 
         TIM2_SetCounter(0x0);
         TIM2_ClearITPendingBit(TIM2_IT_Update);   //參考庫
        TIM2_Cmd(ENABLE);

希望能幫助到你!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章