新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 關于STM32 定時器 PWM 實時調節占空比時,預裝載特性

        關于STM32 定時器 PWM 實時調節占空比時,預裝載特性

        作者: 時間:2016-11-09 來源:網絡 收藏
        最近在調試項目的時候遇到一個奇怪的現象:在調試狀態下,給定時器捕獲比較寄存器賦不同值,能產生不同占空比的波形(圖1)。反映到器件上也有不同的電壓顯示,但是在設備運行的時候,就不行了(圖2)。

        本文引用地址:http://www.104case.com/article/201611/318031.htm

        圖1

        圖2

        糾結了N天后,也沒有辦法解決,只好乖乖的看STM32控制器手冊找找看了,結果還真找到了。

        從圖中可以看到,如果使能預裝載特性,則數據會立即寫入寄存器中,如果沒有使能,那就得等到有事件(?)發生了。這我就明白了,在調試狀態下,給寄存器賦值,不會產生什么影響,因為人的反應速度很慢,但是在運行的時候,占空比是實時發生改變的,這樣就不能及時寫入到捕獲比較寄存器中,輸出就不會改變了。所以在配置定時器輸出PWM的時候,還是乖乖的把預裝載使能吧。代碼原型如下:

        /*******************************************************************************

        * Function Name : TIM_OC3PreloadConfig

        * Description : Enables or disables the TIMx peripheral Preload register on CCR3.

        * Input : - TIMx: where x can be 1, 2, 3, 4, 5 or 8 to select the TIM *

        peripheral.

        * - TIM_OCPreload: new state of the TIMx peripheral Preload

        * register

        * This parameter can be one of the following values:

        * - TIM_OCPreload_Enable

        * - TIM_OCPreload_Disable

        * Output : None

        * Return : None

        *******************************************************************************/

        void TIM_OC3PreloadConfig(TIM_TypeDef* TIMx, u16 TIM_OCPreload)

        {

        u16 tmpccmr2 = 0;

        /* Check the parameters */

        assert_param(IS_TIM_123458_PERIPH(TIMx));

        assert_param(IS_TIM_OCPRELOAD_STATE(TIM_OCPreload));

        tmpccmr2 = TIMx->CCMR2;

        /* Reset the OC3PE Bit */

        tmpccmr2 &= CCMR_OC13PE_Reset;

        /* Enable or Disable the Output Compare Preload feature */

        tmpccmr2 = TIM_OCPreload;

        /* Write to TIMx CCMR2 register */

        TIMx->CCMR2 = tmpccmr2;

        }



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 襄城县| 沈丘县| 县级市| 桐梓县| 普宁市| 宁波市| 陆河县| 漳平市| 桐庐县| 庐江县| 庆城县| 平遥县| 罗源县| 洪湖市| 武穴市| 扶沟县| 松溪县| 额济纳旗| 旌德县| 大宁县| 康乐县| 靖安县| 绍兴县| 宁陕县| 中方县| 黔南| 佛山市| 清徐县| 开阳县| 平谷区| 尤溪县| 河南省| 酒泉市| 长治市| 南昌县| 潢川县| 天门市| 博罗县| 望谟县| 平远县| 阳朔县|