日韩一区二区三区精品,欧美疯狂xxxxbbbb牲交,热99re久久免费视精品频,人妻互换 综合,欧美激情肉欲高潮视频

歷史上的今天

今天是:2025年06月27日(星期五)

正在發(fā)生

2019年06月27日 | STM32復習筆記(八)PWM輸出和 輸入捕獲

發(fā)布者:溫暖夢想 來源: eefocus關(guān)鍵字:STM32  PWM輸出  輸入捕獲 手機看文章 掃描二維碼
隨時隨地手機看文章

一、STM32 PWM工作過程:

STM32 PWM工作過程(通道1為例)


CCR1:捕獲比較(值)寄存器(x=1,2,3,4):設置比較值。


CCMR1: OC1M[2:0]位:對于PWM方式下,用于設置PWM模式1【110】或者PWM模式2【111】


CCER:CC1P位:輸入/捕獲1輸出極性。0:高電平有效,1:低電平有效。


CCER:CC1E位:輸入/捕獲1輸出使能。0:關(guān)閉,1:打開。


二、PWM模式1 & PWM模式2:

寄存器TIMx_CCMR1的OC1M[2:0]位來分析:


void TIM_OC2PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload);


void TIM_ARRPreloadConfig(TIM_TypeDef* TIMx, FunctionalState NewState);


(1)自動重載的預裝載寄存器:


void TIM_ARRPreloadConfig(TIM_TypeDef* TIMx, FunctionalState NewState);


簡單的說,ARPE=1,ARR立即生效。。。APRE=0,ARR下個比較周期生效。

(2)STM32 定時器3輸出通道引腳:


Datasheet中表格會有詳細說明


三、PWM輸出庫函數(shù)概述:

(1)PWM輸出庫函數(shù):

void TIM_OCxInit(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct);


typedef struct

{

  uint16_t TIM_OCMode;  //PWM模式1或者模式2

  uint16_t TIM_OutputState; //輸出使能 OR失能

  uint16_t TIM_OutputNState;

  uint16_t TIM_Pulse; //比較值,寫CCRx

  uint16_t TIM_OCPolarity; //比較輸出極性

  uint16_t TIM_OCNPolarity; 

  uint16_t TIM_OCIdleState;  

  uint16_t TIM_OCNIdleState; 

} TIM_OCInitTypeDef;

TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //PWM模式2

TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比較輸出使能

TIM_OCInitStructure. TIM_Pulse=100;

TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //輸出極性:TIM輸出比較極性高

TIM_OC2Init(TIM3, &TIM_OCInitStructure);  //根據(jù)T指定的參數(shù)初始化外設TIM3 OC2

(2)設置比較值函數(shù):

void TIM_SetCompareX(TIM_TypeDef* TIMx, uint16_t Compare2);


(3)使能輸出比較預裝載:

void TIM_OC2PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload);


(4)使能自動重裝載的預裝載寄存器允許位:

void TIM_ARRPreloadConfig(TIM_TypeDef* TIMx, FunctionalState NewState);


四、PWM輸出配置步驟:

① 使能定時器3和相關(guān)IO口時鐘。


         使能定時器3時鐘:RCC_APB1PeriphClockCmd();


         使能GPIOB時鐘:RCC_APB2PeriphClockCmd();


② 初始化IO口為復用功能輸出。函數(shù):GPIO_Init();


        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;      


③ 這里我們是要把PB5用作定時器的PWM輸出引腳,所以要重映射配置,


     所以需要開啟AFIO時鐘。同時設置重映射。


        RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);


        GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE);


④  初始化定時器:ARR,PSC等:TIM_TimeBaseInit();


⑤  初始化輸出比較參數(shù):TIM_OC2Init();


⑥  使能預裝載寄存器: TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);


⑦  使能定時器:TIM_Cmd();


⑧  不斷改變比較值CCRx,達到不同的占空比效果:TIM_SetCompare2();


五、STM32 PWM工作過程---輸入捕獲:


附可直接使用的配置:(方便做各種智能車、擂臺等4PWM)

1、底層配置:

void speed_Init(void)    //TIM3_CH1->PC6 CH2->PC7 CH3->PC8 CH4->PC9

//**********電機驅(qū)動設置************//

TIM_OCInitTypeDef  TIM_OCInitStructure;

TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure ;

GPIO_InitTypeDef GPIO_InitStructure;

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);  //使能GPIO外設和AFIO復用功能模塊時鐘  

TIM_DeInit(TIM3);//初始化TIM3寄存器

 

GPIO_PinRemapConfig(GPIO_FullRemap_TIM3, ENABLE); //Timer3完全重映射  TIM3_CH1->PC6 CH2->PC7 CH3->PC8 CH4->PC9

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9; //TIM1_CH1  //設置該引腳為復用輸出功能,輸出TIM3 CH1的PWM脈沖波形 GPIOC.6

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //復用推挽輸出

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOC, &GPIO_InitStructure);//初始化GPIO                

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

//  定時器1設置: 72分頻,頻率10KHz,向上計數(shù),105是為了速度為100時,PWM占空比不會到100,方便電機驅(qū)動自舉生壓。一般PWM頻率大于1K,4-10K比較好。

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

    TIM_TimeBaseStructure.TIM_Period = 105-1;

    TIM_TimeBaseStructure.TIM_Prescaler = 71;

    TIM_TimeBaseStructure.TIM_ClockDivision = 0;

    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;

    TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);

 

// 主定時器T3為 PWM3 模式 

    TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;

    TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;

    TIM_OCInitStructure.TIM_Pulse = 0;  

    TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;

    TIM_OC1Init(TIM3, &TIM_OCInitStructure);

    TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);//使能的預裝載寄存器

    

    TIM_OCInitStructure.TIM_Pulse = 0; 

    TIM_OC2Init(TIM3, &TIM_OCInitStructure); 

    TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);//使能的預裝載寄存器

 

    TIM_OCInitStructure.TIM_Pulse = 0; 

    TIM_OC3Init(TIM3, &TIM_OCInitStructure); 

    TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable);//使能的預裝載寄存器

 

    TIM_OCInitStructure.TIM_Pulse = 0; 

    TIM_OC4Init(TIM3, &TIM_OCInitStructure); 

    TIM_OC4PreloadConfig(TIM3, TIM_OCPreload_Enable);//使能的預裝載寄存器

    

    TIM_ARRPreloadConfig(TIM3, ENABLE); //使能定時器3

    TIM_Cmd(TIM3, ENABLE);

}

2、函數(shù)調(diào)用:

#include "delay.h"

#include "sys.h"

#include "sumjess_pwm.h"

 int main(void)

 {   

int b = 0;

delay_init();

   speed_Configuration();


while(1) 

{

for(b=0;b<100;b+=10){

TIM_SetCompare1(TIM3,b);   delay_ms(100);}

for(b=100;b>1;b-=10){

TIM_SetCompare1(TIM3,b);   delay_ms(100);}

    TIM_SetCompare1(TIM3,0);  delay_ms(2000);

for(b=0;b<100;b+=10){

TIM_SetCompare2(TIM3,b);   delay_ms(100);}

for(b=100;b>1;b-=10){

TIM_SetCompare2(TIM3,b);   delay_ms(100);}

TIM_SetCompare2(TIM3,0);  delay_ms(2000);

for(b=0;b<100;b+=10){

TIM_SetCompare3(TIM3,b);   delay_ms(100);}

for(b=100;b>1;b-=10){

TIM_SetCompare3(TIM3,b);   delay_ms(100);}

    TIM_SetCompare3(TIM3,0);  delay_ms(2000);

for(b=0;b<100;b+=10){

TIM_SetCompare4(TIM3,b);   delay_ms(100);}

for(b=100;b>1;b-=10){

TIM_SetCompare4(TIM3,b);   delay_ms(100);}

    TIM_SetCompare4(TIM3,0);  delay_ms(2000);

}

}

☆注:該函數(shù)滿載為105,即:TIM_SetCompare1(TIM3,105);由于驅(qū)動半橋需要自舉升壓,占空比必須小于98%。最好在95%以下。所以寫者留出5%,使用時只需寫:0%~100%之間即可。

六、STM32 輸入捕獲工作過程(通道1為例):


一句話總結(jié)工作過程:通過檢測TIMx_CHx上的邊沿信號,在邊沿信號發(fā)生跳變(比如上升沿/下降沿)的時候,將當前定時器的值(TIMx_CNT)存放到對應的捕獲/比較寄存器(TIMx_CCRx)里面,完成一次捕獲。


(1)步驟1:設置輸入捕獲濾波器(通道1為例)



(2)步驟2:設置輸入捕獲極性(通道1為例)



(3)步驟三:設置輸入捕獲映射通道(通道1為例):


(4)步驟四:設置輸入捕獲分頻器(通道1為例):



(5)步驟五:捕獲到有效信號可以開啟中斷:



(6)最后:看看定時器通道對應引腳TIM5為例:


七、輸入捕獲通道初始化函數(shù):

void TIM_ICInit(TIM_TypeDef* TIMx, TIM_ICInitTypeDef* TIM_ICInitStruct);


typedef struct

{

  uint16_t TIM_Channel; //捕獲通道1-4   

  uint16_t TIM_ICPolarity; //捕獲極性

  uint16_t TIM_ICSelection; //映射關(guān)系

  uint16_t TIM_ICPrescaler; //分頻系數(shù)

  uint16_t TIM_ICFilter;  //濾波器

} TIM_ICInitTypeDef;

TIM5_ICInitStructure.TIM_Channel = TIM_Channel_1; TIM5_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;

TIM5_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; 

TIM5_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;

TIM5_ICInitStructure.TIM_ICFilter = 0x00;

TIM_ICInit(TIM5, &TIM5_ICInitStructure);


 


八、通道極性設置獨立函數(shù):

void TIM_OCxPolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPolarity);

九、獲取通道捕獲值

uint32_t TIM_GetCapture1(TIM_TypeDef* TIMx);

十、輸入捕獲的一般配置步驟:

① 初始化定時器和通道對應IO的時鐘。


② 初始化IO口,模式為輸入:GPIO_Init();


    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //PA0 輸入


③初始化定時器ARR,PSC


   TIM_TimeBaseInit();


④初始化輸入捕獲通道


   TIM_ICInit();


⑤如果要開啟捕獲中斷,


    TIM_ITConfig();


    NVIC_Init();


⑥使能定時器:TIM_Cmd();


⑦編寫中斷服務函數(shù):TIMx_IRQHandler();


關(guān)鍵字:STM32  PWM輸出  輸入捕獲 引用地址:STM32復習筆記(八)PWM輸出和 輸入捕獲

上一篇:STM32復習筆記(九)OLED的介紹和使用方法
下一篇:STM32復習筆記(六)看門狗

推薦閱讀

近日,俄羅斯圍繞軍用機器人等先進軍事科技,對外展示其在尖端科技領(lǐng)域的軍事實力和潛力。防長紹伊古表示,俄軍正加緊推進軍用機器人的研建和列裝工作,今年戰(zhàn)斗機器人可投入量產(chǎn);總參謀長格拉西莫夫稱,俄軍正通過研發(fā)機器人等人工智能裝備“發(fā)展非核手段戰(zhàn)略威懾力量”;總統(tǒng)普京也多次表達對軍用機器人等尖端科技產(chǎn)品的重視與信心??梢灶A期,“普京4.0...
孟樸:2019年是5G元年,我很高興能夠參加此次MWC上海,與各行各業(yè)的合作伙伴共同探討5G的發(fā)展、以及5G所帶來的重要機遇和創(chuàng)新未來。我們正迎來一個萬物智能互連的世界,這也和今年MWC上海的主題“智聯(lián)萬物”非常貼合。經(jīng)過產(chǎn)業(yè)的共同努力,我們在過去30年成功連接了人與人,未來30年,我們將智能地連接起世界上的萬事萬物。正如水電和煤炭催生了工業(yè)革命、...
一、 主要是驅(qū)動安裝問題有用戶反應驅(qū)動安裝不上,按照用戶手冊操作一直不能安裝成功??梢試L試如下步驟進行安裝。1. 雙擊設備管理器中無法安裝或者提示有錯誤的430仿真器設備選擇驅(qū)動程序——更新驅(qū)動程序選擇手動安裝選擇從電腦設備驅(qū)動列表中安裝彈出下面對話框找到端口選項,因為MSP430仿真器安裝的是默認為一個串口的點下一步找到texas instuments...
6月25日,第五屆集微半導體峰會在廈門海滄正式開幕,本屆峰會以“心芯本相印,變化有鯤鵬”為主題,共計2天。在第一天的集微政策峰會上,成都高新區(qū)做了《成都高新區(qū)電子信息產(chǎn)業(yè)推介》的主題分享。成都市高新區(qū)電子信息產(chǎn)業(yè)發(fā)展局黨組書記、副局長郭盛良演講中主要分享了成都高新區(qū)的產(chǎn)業(yè)發(fā)展情況。“成都是國家中心城市之一,區(qū)域面積14300平方公里,實...

史海拾趣

小廣播
設計資源 培訓 開發(fā)板 精華推薦

最新單片機文章

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發(fā)圈

 
機器人開發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號 京ICP備10001474號-1 電信業(yè)務審批[2006]字第258號函 京公網(wǎng)安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved