<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > STM32單片機(jī)學(xué)習(xí)---PWM輸出

          STM32單片機(jī)學(xué)習(xí)---PWM輸出

          作者: 時(shí)間:2016-11-27 來(lái)源:網(wǎng)絡(luò) 收藏

          本文引用地址:http://www.ex-cimer.com/article/201611/322220.htm

          下面是TIM配置函數(shù),注釋很清楚了,不作說(shuō)明:

          void tim2_cfg()
          {
          RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);

          TIM_DeInit(TIM2);
          TIM_InternalClockConfig(TIM2);
          //預(yù)分頻系數(shù)為72,這樣計(jì)數(shù)器時(shí)鐘為72MHz/72 = 1MHz
          TIM_TimeBaseStructure.TIM_Prescaler = 72;
          //設(shè)置時(shí)鐘分割
          TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
          //設(shè)置計(jì)數(shù)器模式為向上計(jì)數(shù)模式
          TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
          //設(shè)置計(jì)數(shù)溢出大小,每計(jì)1000個(gè)數(shù)就產(chǎn)生一個(gè)更新事件
          TIM_TimeBaseStructure.TIM_Period = 1000-1;
          //將配置應(yīng)用到TIM2中
          TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure);

          //禁止ARR預(yù)裝載緩沖器
          TIM_ARRPreloadConfig(TIM2, DISABLE);

          TIM_Cmd(TIM2, ENABLE);//使能TIMx外設(shè)
          }

          接下來(lái)是關(guān)鍵的PWM的配置函數(shù):

          void pwm_cfg()

          {

          //設(shè)置缺省值

          TIM_OCStructInit(&TimOCInitStructure);

          //PWM模式1輸出

          TimOCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;

          //設(shè)置占空比,占空比=(CCRx/ARR)*100%或(TIM_Pulse/TIM_Period)*100%

          TimOCInitStructure.TIM_Pulse = 400-1;

          //TIM輸出比較極性高

          TimOCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;

          //使能輸出狀態(tài)

          TimOCInitStructure.TIM_OutputState = TIM_OutputState_Enable;

          //TIM2的CH2輸出

          TIM_OC2Init(TIM2, &TimOCInitStructure);

          //設(shè)置TIM2的PWM輸出為使能

          TIM_CtrlPWMOutputs(TIM2,ENABLE);

          }

          stm32固件庫(kù)的輸出比較單元結(jié)構(gòu)體與定時(shí)器的時(shí)基單元是分開(kāi)定義的,而PWM模式只是輸出比較結(jié)構(gòu)體成員TimOCInitStructure.TIM_OCMode的一個(gè)取值,當(dāng)把此結(jié)構(gòu)體填充完后,還要映射到某個(gè)定時(shí)器,用TIM_OCXInit函數(shù)實(shí)現(xiàn),我用了一個(gè)X,說(shuō)明不止一個(gè)這樣的函數(shù),事實(shí)上,stm32的通用定時(shí)器都有四個(gè)通道,每個(gè)通道對(duì)應(yīng)一個(gè)初始化函數(shù),這里真夠糾結(jié)的!最后還要使能該定時(shí)器的PWM輸出功能,TIM_CtrlPWMOutputs(TIM2,ENABLE)函數(shù)要注意,是outputs而不是output,說(shuō)明TIM2不止一個(gè)通道嘛!夠復(fù)雜,夠繁瑣的!

          下面是輸出比較單元的結(jié)構(gòu)體原型:

          typedef struct
          {
          uint16_t TIM_OCMode;

          uint16_t TIM_OutputState;

          uint16_t TIM_OutputNState;

          uint16_t TIM_Pulse;

          uint16_t TIM_OCPolarity;

          uint16_t TIM_OCNPolarity;

          uint16_t TIM_OCIdleState;

          uint16_t TIM_OCNIdleState;
          } TIM_OCInitTypeDef;

          其中沒(méi)有加色的成員是高級(jí)定時(shí)器才有的,通用定時(shí)器就不用管了。

          這里還有個(gè)TimOCInitStructure.TIM_OCPolarity成員需要注意,它有什么作用呢?在網(wǎng)上查的資料,如下圖:

          前面說(shuō)到pwm有pwm1和pwm2兩種模式,這兩種模式只能控制到OCXREF為止,TIM_OCPolarity 能控制OC1是直接等于OCXREF,還是取反極性!OC1才是最終的PWM信號(hào)。

          這里有個(gè)小插曲,我用示波器去測(cè)量PWM信號(hào),發(fā)現(xiàn)信號(hào)居然是雙極性的,然后改變TIM_OCPolarity ,再測(cè),還是雙極性,只是倒了個(gè)跟頭。還真以為stm32單片機(jī)能輸出兩極性的PWM,后面把示波器改為直流檔(之前用的是交流檔),波形才從零電位一下縱向移上去。以后要注意!


          上一頁(yè) 1 2 下一頁(yè)

          關(guān)鍵詞: STM32單片機(jī)PWM輸

          評(píng)論


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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();