<wbr id="9qp22"><legend id="9qp22"><rt id="9qp22"></rt></legend></wbr>
<th id="9qp22"><noframes id="9qp22"><form id="9qp22"></form></noframes></th>

      <dd id="9qp22"><big id="9qp22"><video id="9qp22"></video></big></dd>
      <th id="9qp22"></th>
        <rp id="9qp22"><acronym id="9qp22"></acronym></rp>
        <dd id="9qp22"><pre id="9qp22"></pre></dd>

        1. <dd id="9qp22"><pre id="9qp22"></pre></dd>
          1. 打印

            [原創] MSP430F5529LP的P1.4口輸出單路PWM波

            [復制鏈接]
            126|6
            跳轉到指定樓層
            樓主
            本帖最后由 閔大 于 2019-8-30 11:51 編輯

            此帖回答昨天自己發出的求助帖。在此做一個小小記錄。2019.08.30求助帖連接:http://www.lin49.com/icview-2856862-1-1.html

            輸出單路PWM波
            MSP430Ware包中例程—timer_a_ex1_pwmSingle可以輸出占空比0.75,頻率**(忘了,可以用示波器測一下)單路PWM波。輸出引腳口為P2.0,代碼成功燒寫后按下單片機復位按鈕并用示波器觀測波形驗證代碼是否正確。

            通過查閱MSP430F5529 數據手冊表4-1 P1.4也具備PWM輸出能力,現想把原來例程P2.0引腳修改為P1.4引腳輸出PWM

            配置外設就是一種套路,我個人總結為三步走。配置外設時鐘;配置GPIO口;初始化外設模塊。

            配置外設時鐘:每一個外設模塊若要工作必須要有時鐘控制,則使用每個外設模塊前必須了解該外設的時鐘最高能達到多少。外設時鐘都是通過系統時鐘分頻所得,得知系統時鐘頻率后需關注該外設實際獲得時鐘頻率為多少?學習使用每一款單片機必須會看時鐘樹。

            配置GPIO口:GPIO(General-purposeInput Output)通用數字輸入輸出口,GPIO外設是一座溝通MUC和外界唯一橋梁。

            初始化外設模塊:每一個外設模塊都有非常多寄存器,若通過此寄存器完成某一目的則需提前設定。舉一個例子,一個人需要去北京,要求5天后到天安門廣場,則此人可以有很多不同選擇。到北京天安門可以認為是目的,各種不同選擇可以認為是寄存器配置。若僅有前面兩步無配置寄存器,即此人沒法到達天安門故目的不能實現。

            現通過配置PWM模塊幫助理解三步走方法。
            步驟1.配置PWM模塊時鐘
            步驟2.配置GPIO口
            步驟3.初始化PWM模塊

            MSP430F5529沒有獨立PWM模塊,故不存在PWM模塊時鐘。此處需要提一下DSP28335,此款MUC也是TI公司。它有獨立PWM模塊,此模塊又包括時基模塊、比較模塊、動作模塊等。回到此處,MSP430F5529外設配置可以把步驟1、3稍作修改且合并放在步驟2后面。

            配置MSP430F5529的PWM模塊兩步走
            步驟1.配置GPIO口
            步驟2.初始化Timer_A寄存器

            步驟1:配置P1.4為PWM輸出引腳口
            GPIO_setAsPeripheralModuleFunctionOutputPin(  
                     GPIO_PORT_P1,
                     GPIO_PIN4);

            步驟2:查數據手冊可知P1.4對應TimerA寄存器,則配置該寄存器為PWM模式

            //Generate PWM - Timer runs in Up mode
                 Timer_A_outputPWMParam param = {0};//向上計數模式。param是一個結構體變量。  
                 param.clockSource = TIMER_A_CLOCKSOURCE_SMCLK;//Timer_A時鐘源  
                 param.clockSourceDivider = TIMER_A_CLOCKSOURCE_DIVIDER_1;//不分頻  
                 param.timerPeriod = TIMER_PERIOD;//PWM周期計數值  
                 param.compareRegister = TIMER_A_CAPTURECOMPARE_REGISTER_3;//查表可知P1.4對應CCR3
                 param.compareOutputMode = TIMER_A_OUTPUTMODE_RESET_SET;//自動重裝載模式
                 param.dutyCycle = DUTY_CYCLE;//占空比計數值
                 Timer_A_outputPWM(TIMER_A0_BASE, ?m);//查表可知P1.4對應TimerA0  


            總結:例程代碼總共需要修改3個地方。
              
            GPIO_setAsPeripheralModuleFunctionOutputPin(
                     GPIO_PORT_P1,
                     GPIO_PIN4);


            param.compareRegister =  TIMER_A_CAPTURECOMPARE_REGISTER_3;//查表可知P1.4對應CCR3


            Timer_A_outputPWM(TIMER_A0_BASE,  ?m);//查表可知P1.4對應TimerA0



            完整代碼如附:
            timer_a_ex1_pwmSingle.rar (589.76 KB, 下載次數: 1)

            使用特權

            評論回復
            沙發
            | 2019-8-30 14:23 | 只看該作者
            不錯,支持下,總結的不錯!

            使用特權

            評論回復
            板凳
            | 2019-9-1 19:06 | 只看該作者
            使用定時器的 PWM 功能, 比較簡單. 如果純軟件實現就復雜了

            使用特權

            評論回復

            評論

            airwill 2019-9-6 11:12 回復TA
            @閔大 :只要通過設置寄存器就能控制 PWM 頻率和占空比,就是硬件實現。否則就算軟件(或部分軟件) 
            閔大 2019-9-5 20:44 回復TA
            @airwill :感謝您回復。如果向您說的這樣,定時器的PWM功能難道不是純軟件實現嗎?難道此方法加入了硬件嗎,若是,則是什么硬件呢?盼復! 
            airwill 2019-9-2 21:49 回復TA
            @閔大 :可以借助簡單的定時器, 輸出端口高低電平, 實現 PWM 
            閔大 2019-9-2 07:44 回復TA
            您好!請問純軟件如何實現,能大概解釋一下嗎?我第一次聽這個概念 
            掃描二維碼,隨時隨地手機跟帖
            您需要登錄后才可以回帖 登錄 | 注冊

            本版積分規則

            我要發帖 投訴建議 創建版塊 申請版主

            快速回復

            您需要登錄后才可以回帖
            登錄 | 注冊
            高級模式

            論壇熱帖

            在線客服 快速回復 返回頂部 返回列表
            成人短片线上看