娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

實現功能:采用定時器2的通道2,使PA1輸出頻率1K,占空比40的PWM波形,用PA8隨意延時取反led燈,指示程序運行。


首先熟悉一下定時器的PWM相關部分。


其實PWM就是定時器的一個比較功能而已。

CNT里的值不斷++,一旦加到與CCRX寄存器值相等,那么就產生相應的動作。這點和AVR單片機很類似。既然這樣,我們要產生需要的PWM信號,就需要設定PWM的頻率和PWM的占空比。


首先說頻率的確定。由于通用定時器的時鐘來源是PCLK1,而我又喜歡用固件庫的默認設置,那么定時器的時鐘頻率就這樣來確定了,如下:


AHB(72MHz)→APB1分頻器(默認2)→APB1時鐘信號(36MHz)→倍頻器(*2倍)→通用定時器時鐘信號(72MHz)。

這里為什么是這樣,在RCC模塊學習記錄里有詳細記載,不多說。

因此圖中的CK_PSC就是72MHz了。


下面的資料也是網上一搜一大把,我就羅列了:

STM32的PWM輸出有兩種模式,模式1(PWM1)和模式2(PWM2),由TIMx_CCMRx寄存器中的OCxM位確定的(“110”為模式1,“111”為模式2)。模式1和模式2的區別如下:

110:PWM模式1-在向上計數時,一旦TIMx_CNT=TIMx_CCR1時通道1為無效電平(OC1REF=0),否則為有效電平(OC1REF=1)。

111:PWM模式2-在向上計數時,一旦TIMx_CNT=TIMx_CCR1時通道1為有效電平,否則為無效電平。

由此看來,模式1和模式2正好互補,互為相反,所以在運用起來差別也并不太大。我用的是模式一,因此后面的設定都是按照模式一來設定的。

 

PWM的周期是就是由定時器的自動重裝值和CNT計數頻率決定的。而CNT的計數時鐘是CK_PSC經分頻器PSC得到,因此CNT的時鐘就是CK_PSC/分頻系數。這個分頻系數在TIM_TimeBaseStructure.TIM_Prescaler確定。我設置的值是72,因此CNT的計數頻率也就是CK_CNT的頻率為1MHz。


下一步就是確定定時器自動重裝值。因為CNT每自加到ARR寄存器的值時就會自動清零,當然前提是設定為為向上計數模式,而就是根據這個溢出事件來改變PWM的周期。所以PWM信號的頻率由ARR的值來確定。我設置的值是1000-1,即TIM_TimeBaseStructure.TIM_Period = 1000-1;因此PWM的周期是1MHz/1000=1KHz。


接下來就要確定PWM的占空比了。因為CNT在自加到ARR值的過程中會不斷和CRRX的值相比較,一旦二者相等就產生匹配事件,但要注意CNT不會理會這件事,它會繼續++直到等于ARR。而CRRX的值我設定為400-1,那么占空比就隨之確定為40%。


好了,下面就是庫函數的配置了。


TIMER輸出PWM實現步驟

1.       設置RCC時鐘;

2.       設置GPIO;

3.       設置TIMx定時器的相關寄存器;

4.       設置TIMx定時器的PWM相關寄存器。

 

首先是main函數和全局變量申明,很簡單,不作說明


GPIO_InitTypeDef GPIO_InitStructure;

TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;

TIM_OCInitTypeDef TimOCInitStructure;

int main(void)
{
      

 

 

      rcc_cfg();
      gpio_cfg();
      tim2_cfg();
      pwm_cfg();
// 
  while (1)
  {
   
    GPIO_WriteBit(GPIOA, GPIO_Pin_8, Bit_SET);
 
 delay();

   
    GPIO_WriteBit(GPIOA, GPIO_Pin_8, Bit_RESET);
 
    delay();
  }
}

 

下面是IO口的配置:

void gpio_cfg()
{
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
 
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_Init(GPIOA, &GPIO_InitStructure);

  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
}

此處要注意的是PWM輸出口要配置為復用推挽輸出,原因我也不知道,反正照搬就是了。

 

下面是TIM配置函數,注釋很清楚了,不作說明:

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

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

  //禁止ARR預裝載緩沖器
  TIM_ARRPreloadConfig(TIM2, DISABLE);
 
  TIM_Cmd(TIM2, ENABLE);  //使能TIMx外設
}


接下來是關鍵的PWM的配置函數:

void pwm_cfg()

{

      //設置缺省值

       TIM_OCStructInit(&TimOCInitStructure);

       //PWM模式1輸出

       TimOCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;

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

       TimOCInitStructure.TIM_Pulse = 400-1;

       //TIM輸出比較極性高

       TimOCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;

       //使能輸出狀態

       TimOCInitStructure.TIM_OutputState = TIM_OutputState_Enable;

       //TIM2的CH2輸出

       TIM_OC2Init(TIM2, &TimOCInitStructure);

       //設置TIM2的PWM輸出為使能

       TIM_CtrlPWMOutputs(TIM2,ENABLE);

}

stm32固件庫的輸出比較單元結構體與定時器的時基單元是分開定義的,而PWM模式只是輸出比較結構體成員TimOCInitStructure.TIM_OCMode的一個取值,當把此結構體填充完后,還要映射到某個定時器,用TIM_OCXInit函數實現,我用了一個X,說明不止一個這樣的函數,事實上,stm32的通用定時器都有四個通道,每個通道對應一個初始化函數,這里真夠糾結的!最后還要使能該定時器的PWM輸出功能,

TIM_CtrlPWMOutputs(TIM2,ENABLE)函數要注意,是outputs而不是output,說明TIM2不止一個通道嘛!夠復雜,夠繁瑣的!


下面是輸出比較單元的結構體原型:

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;

其中沒有加色的成員是高級定時器才有的,通用定時器就不用管了。

這里還有個TimOCInitStructure.TIM_OCPolarity 成員需要注意,它有什么作用呢?在網上查的資料,


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


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

關鍵字:STM32  單片機  PWM輸出 引用地址:STM32單片機學習---PWM輸出

上一篇:STM32通用定時器---基本定時學習
下一篇:STM32F10x 學習筆記之解決JLink 無法下載程序的問題

推薦閱讀

  在我國新疆地區,萬畝棉田團團簇簇盛放枝頭,只待農戶前來采摘。相對于傳統的人工作業,現在許多農戶都更愿意用科技手段,來提升作業效率,節省相關成本。其中,在噴灑落葉劑環節,植保無人機正日漸成為主力。   不僅如此,在東北平原、在東南丘陵,無論是稻田還是果樹、林地的施藥作業,很多都已經由植保無人機包攬。短短數年內,植保無人機正加...
2019年成為全世界“5G通信元年”,5G手機的銷量也逐步增長,5G也帶動了對智能手機拍照和視頻功能的需求。據外媒最新消息,全球主要的手機圖像傳感器制造商日本索尼公司準備投資9億美元,擴大圖像傳感器的產能。據日本媒體報道,日本電子產品制造商索尼將在長崎縣投資建設一家新工廠,生產用于智能手機相機的半導體圖像傳感器。該公司旨在滿足消費電子...
近日,據外媒報道稱,微宏動力在歐洲推出了一款軟包電池,可以在20分鐘之內從0充電至100%。據了解,該新型軟包電池采用三元體系,能量密度為186 Wh/kg,循環壽命可達8000次,可以應用在電動汽車、船舶、火車等領域。微宏動力稱,目前該產品已經接到了一家挪威公司的訂單,公司將在會在勃蘭登堡路德維希斯菲爾德的新工廠中將其做成標準化模組,向歐洲客...
廣告摘要聲明廣告施耐德電氣核心工廠無錫普洛菲斯3C 電子制造業本期客戶無錫普洛菲斯電子有限公司,是世界500強企業法國施耐德電氣旗下核心工廠之一,以其創新的科技理念和領先的技術意識為全球客戶提供可編程人機界面、工業平板式計算機、圖形邏輯控制器和工業信息終端等產品,在國際工控領域具有良好口碑,是業內主導品牌之一。燈塔工廠的轉型需求燈塔...

史海拾趣

問答坊 | AI 解惑

功率變換技術發展史呼喚綠色回歸

功率變換技術是按用戶需求改變電能應用方式(改變電能的波形、頻率等)的技術;可以有AC/DC、DC/DC、DC/AC、AC/AC及其相互組合的多種變換。40年代前后,由電磁元件組合形成的各種功率變換過程基本上可實現清潔電源。例如,將交流電動機與直流發 ...…

查看全部問答∨

煩煩煩

我怎么下載不下來附件呢????:Q…

查看全部問答∨

基于DSP的語音識別系統的設計與實現

基于DSP的語音識別系統的設計與實現…

查看全部問答∨

工信部首次明確3G牌照歸屬 年底或明年初發照

工信部首次明確3G牌照歸屬 年底或明年初發照 http://tech.163.com/08/1212/11/4SV7EQOV000915BE.html           工業和信息化部部長李毅中今日稱,根據綜合考慮,我們將通過一定的程序在年底或明年年初發放3G牌照 ...…

查看全部問答∨

誰知道有增益帶寬積達到100M以上的放大器?急...........

誰知道有增益帶寬積達到100M以上的放大器,并且可以放大直流信號? 謝謝大家了......................…

查看全部問答∨

ARM初學者求方法

     我之前主要從事MSP430單片機的開發,51和AVR也玩過,但對ARM一點都不懂,現在想開始自學ARM,并且手上有一套TI公司的LM3S3748開發板,在此想請教一下玩ARM的高手指教一下入門的方法,推薦一本適合我的書,或者其他什么資料的 ...…

查看全部問答∨

【顏工專欄】漫話LED照明燈具技術

    作為第四代的照明燈具,LED 照明燈具一經推出就成為照明市場的寵兒,節能降碳、長壽命成為其經典的賣點。LED 高節能:節省能源無污染即為環保,直流驅動,超低功耗(單管0.03 瓦-1 瓦)電光功率轉換接近 90%,相同照明效果比傳 ...…

查看全部問答∨

stm32定貨周期?

                                 剛才打電話給微芯力科,全系列芯片定貨周期都10周?象我們小公司沒有那么好的計劃,都不敢用了.…

查看全部問答∨

STM32外部RAM存儲數據JLINK無法調試

我講外部RAM存儲數據,內部RAM放堆棧,程序很簡單,就是將外部ram復制,同時讀取,讀取后用串口發出來,我用JLINK調試,程序始終停在串口等待處,查看賦值也不對。我手動復位板子,不用JLINK帶,STM32能夠對外部RAM賦值,并且能夠從串口輸出來 ...…

查看全部問答∨
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 西贡区| 兴国县| 莒南县| 富民县| 福贡县| 辉南县| 夏津县| 淮滨县| 津南区| 绍兴市| 金阳县| 定日县| 景泰县| 应城市| 惠东县| 开平市| 茶陵县| 奉节县| 合江县| 亳州市| 余姚市| 杭锦后旗| 鸡东县| 太原市| 崇礼县| 奎屯市| 武威市| 洛阳市| 七台河市| 太原市| 南部县| 大石桥市| 侯马市| 伊吾县| 达州市| 邳州市| 读书| 雅安市| 青冈县| 峨眉山市| 利辛县|