<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                這個pwm幾天前就搞出來了,但是覺得不是很難,就沒有寫 今天jlink固件壞了,修了半天沒有修好,現在就先扔著吧,先借大黃的用用,下面閑著木事,就把pwm寫下吧 ![](https://box.kancloud.cn/2016-06-21_576915b397e1c.jpg) ![](https://box.kancloud.cn/2016-06-21_576915b3bc73f.jpg) 好吧,開始今天的pwm 還是老話,先附上一段代碼:(由于stm的pwm有多個,每個又有多個通道,我們今天選TIM2_CH1來產生) ~~~ /* * TIM2_CH1 */ int pwm_init(u16 arr,u16 psc) { RCC->APB1ENR = 1<<0; //enable timer2 RCC->APB2ENR = 1<<2; //enable GPIOA GPIOA->CRL &= ~(0xF<<0); //Clear bit0 Control Register GPIOA->CRL |= 0xb<<0; //Set Bit0 Control Register // GPIOA->ODR |= 1<<0; //Enable Bit0 TIM2->ARR = arr; TIM2->PSC = psc; TIM2->CCMR1 |= 7<<4; TIM2->CCMR1 |= 1<<3; TIM2->CCER |= 1<<0; TIM2->CR1 |= 1<<0; return 0; } ~~~ 前5句,現在大家都應該懂了吧,TIMER時鐘配置,管腳時鐘配置,管腳模式配置,這里肯定要配置稱輸出模式 由于咱們選用的是TIMER2,那我們就用TIM2 先設置自動裝載寄存器ARR和預分頻寄存器PSC,這兩個寄存器一起來設置分頻的頻率 舉個例子: PCLK = 72M = 72000KHz,設置ARR = 900,PSC = 1; 則輸出的PWM周期為:72 000 /(900*(1+1) ) = 40KHz 至于CCMR比較/捕獲模式寄存器 ![](https://box.kancloud.cn/2016-06-21_576915b3dd83f.jpg) 他有 兩個功能,當選擇比較寄存器的時候,看上面一欄,捕獲模式時看下面一欄 輸出比較模式,他有兩種輸出模式,OC1和OC2,其實總共有4組,他有4路輸出,CCMR1,CCMR2分別控制兩組; 我們這里用的是CH1通道,所以我們需要配置0~7bit的數據。 首先我們來了解下pwm輸出模式: ![](https://box.kancloud.cn/2016-06-21_576915b3f33f4.jpg) 根據這段描述,這里的無效電平,會導致OCxREF為低電平,從而管腳輸出電壓即為低電平。 所以,011:在把低電平換位高電平,高電平換成低電平 100:輸出全部為低電平 101:輸出全為高電平 110:先輸出高電平,再輸出低電平,之類的CCR1比較/捕獲寄存器是用來區分什么時候發生電平跳變的,CCRx寄存器也有4組,我們用的是CH1通道,估大家都懂,我們應該用CCR1 111:跟上一組相反 ![](https://box.kancloud.cn/2016-06-21_576915b4287f6.jpg) ~~~ int main() { sys_init(9); pwm_init(900,3); //Set Period RCC->APB2ENR |= 1<<6; GPIOE->CRL &= ~(0xf<<0); GPIOE->CRL |= 0xb<<0; GPIOE->ODR |= 1<<0; TIM2->CCR1 = 0; sw5_config(); while(1) { if(!(GPIOE->IDR & GPIO_Pin_14)) { delay_ms(20); if(!(GPIOE->IDR & GPIO_Pin_14)) { TIM2->CCR1 += 10; } while(!(GPIOE->IDR & GPIO_Pin_14)); } } } ~~~ ![](https://box.kancloud.cn/2016-06-21_576915b44966a.jpg) 這里ARR = 900,PSC = 3 所以: F = 72000KHz/(900*(3+1)) = 20KHz 基本上跟示波器上的一樣 關于pwm的配置是相對比較簡單的,大家不要被他寄存器的數量嚇到了,那么多寄存器,是因為他有多路,所以,他會有那么多,學會了一路,其他都是非常easy的!
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看