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

歷史上的今天

今天是:2024年09月16日(星期一)

2021年09月16日 | 【STM32模塊化程序】PWM產生

發(fā)布者:虛擬現實迷 來源: eefocus關鍵字:STM32  模塊化程序  PWM產生 手機看文章 掃描二維碼
隨時隨地手機看文章

一、STM32的通用定時器介紹

STM32F103ZE 擁有 TIM2、TIM3、TIM4 和 TIM5 共 4 個通用定時器。


STM32F103C8擁有TIM2/TIM3/TIM4這三個通用定時器


通用定時器除了具備基本定時器的向上計數器功能外,還可以向下、向上/向下計數。


此外還具備獨立通道,能夠實現輸入捕獲、輸出比較、PWM 輸出、單脈沖輸出的功能。


二、輸出比較產生PWM

1、產生PWM的幾種方式

①、硬件實現。比如STM32 自帶的 PWM 輸出功能。


注意了,硬件實現的時候,外部接線需要接到通用定時器的外部通道上!


②、通用定時器的輸出比較實現軟件的PWM,這個軟件產生的PWM要比定時器模擬產生的PWM精確許多。


③、單純的定時器計數實現PWM。


2、STM32的輸出比較相關介紹

每個通用定時器擁有4路捕獲/比較通道。


每路通道都有一個捕獲/比較寄存器(TIMx_CCRx)用于裝載初值。

同時該寄存器包含兩個寄存器,一個是供用戶寫入比較值的,另一個是和計數器比較的當前捕獲/比較寄存器。


捕獲/比較模式寄存器 x(TIMx_CCMRx)中有輸出比較預裝載使能位(OCxPE ),開啟后只有當更新時間到來時, TIMx_CCRx寄存器的比較值,才會傳入到當前捕獲/比較寄存器。否則寫入的比較值將立即生效。


當計數器和捕獲/比較模式寄存器 x(TIMx_CCMRx)一樣時,會發(fā)生什么呢?


①、假如此時設置了事件產生寄存器(TIMx_EGR)中的 CCxG 位,會產生一個捕獲/比較事件。


②、設置了相應的中斷使能位TIMx_DIER 寄存器中的 CCxIE 位,則會產生一個捕獲/比較中斷。


3、輸出比較產生PWM代碼實現

timer.c



#include "timer.h"


/* TIM4中斷優(yōu)先級配置函數 */

void NVIC_TIM4Enable(void)

{

    NVIC_InitTypeDef NVIC_initstructure;


    NVIC_initstructure.NVIC_IRQChannel = TIM4_IRQn;           //選擇TIM4中斷通道

    NVIC_initstructure.NVIC_IRQChannelCmd = ENABLE;           //使能中斷通道

    NVIC_initstructure.NVIC_IRQChannelPreemptionPriority = 0; //設定搶占優(yōu)先級為0

    NVIC_initstructure.NVIC_IRQChannelSubPriority = 0;        //設定響應優(yōu)先級為0

    NVIC_Init(&NVIC_initstructure);

}


/* TIM4初始化函數*/

void TIM4Init(void)

{

    TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;


    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);        //使能TIM4時鐘

    TIM_TimeBaseStructure.TIM_Period = 255;                     //自動重裝載值設為255,方便產生0-255級RGB顏色等級

    TIM_TimeBaseStructure.TIM_Prescaler = 72*39-1;              //計數周期設為39us,以使RGB刷新達到100Hz無閃爍效果

    TIM_TimeBaseStructure.TIM_ClockDivision = 0;                //基本定時器沒有時鐘分頻功能,此項會被忽略

    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //設置向上計數模式

    TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);             //初始化TIM4

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

    TIM_SetCompare1(TIM4, 0);                                   //設定TIM4捕獲比較1寄存器值為0

    NVIC_TIM4Enable();                                          //初始化TIM4中斷優(yōu)先級

    TIM_ClearITPendingBit(TIM4, TIM_IT_Update|TIM_IT_CC1|TIM_IT_CC2|TIM_IT_CC3); //清除中斷標志位,否則啟動中斷會先進中斷服務函數

    TIM_ITConfig(TIM4, TIM_IT_Update|TIM_IT_CC1|TIM_IT_CC2|TIM_IT_CC3, ENABLE);  //使能TIM4更新中斷和捕獲/比較1、2、3的中斷源

    TIM_Cmd(TIM4, ENABLE);                                      //使能TIM4定時器

}


stm32f10x_it.c


...


/* TIM4中斷 */

void TIM4_IRQHandler (void)

{

    /* 采用直接寄存器操作,可以獲得比庫函數更高的執(zhí)行效率,節(jié)省中斷函數執(zhí)行時間 */

    if ((TIM4->SR & TIM_FLAG_Update) != 0) //檢測是否為定時器溢出中斷

    {

        TIM4->SR = ~TIM_FLAG_Update; //清除更新中斷標志位

        if (TIM4->CCR1 != 0)         //比較值(即占空比)不為0時,點亮小燈,下同

        {

            LED = 1;

        }

    }    

    else if ((TIM4->SR & TIM_IT_CC1) != 0) //檢測比較中斷產生時熄滅小燈,下同

    {

        TIM4->SR = ~TIM_IT_CC1; //清除捕獲/比較通道1中斷標志位

        LED = 0;

    }

}


此處只是簡單的驗證,所以在主函數通過設定比較值來改變占空比。


TIM_SetCompare1(TIM4, 5); //這里的設置的范圍是0~255(定時器設置的時候分了256級!)


//當然也可以直接采用寄存器的方式 TIM4->CCR1 = 5;


還需要注意的是通用定時器的分頻值,預計裝載值。具體解釋可以看<這里>。


三、硬件PWM

硬件實現的時候,外部接線需要接到通用定時器的外部通道上!當然也不可以,不在對應的外部通道上!(前提得能重映射!)


基本定時器不能輸出PWM,通用和高級定時器才可以。


而通用和高級的配置又有所不同,一個一個來看…


1、高級定時器的硬件PWM輸出

對應TIM1_CH1 - PA8 ; TIM_CH4 - PA11


void TIM1Init()

{

GPIO_InitTypeDef GPIO_InitStructure;

TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;

TIM_OCInitTypeDef  TIM_OCInitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE);  //使能GPIO外設時鐘使能

//設置該引腳為復用輸出功能,輸出TIM1 CH1 CH4的PWM脈沖波形

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_11; //TIM_CH1 //TIM_CH4

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

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOA, &GPIO_InitStructure);

TIM_TimeBaseStructure.TIM_Period = 255; //設置在下一個更新事件裝入活動的自動重裝載寄存器周期的值

TIM_TimeBaseStructure.TIM_Prescaler = 72*39-1; //設置用來作為TIMx時鐘頻率除數的預分頻值  不分頻

TIM_TimeBaseStructure.TIM_ClockDivision = 0; //設置時鐘分割:TDTS = Tck_tim

TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上計數模式

TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); //根據TIM_TimeBaseInitStruct中指定的參數初始化TIMx的時間基數單位

//TIM_OCMode;TIM_OCPolarity-對應輸出的占空比CCR。 TIM_OCMode=1;TIM_OCPolarity=High或者TIM_OCMode=2;TIM_OCPolarity=Low為正常

TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //選擇定時器模式:TIM脈沖寬度調制模式1

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

TIM_OCInitStructure.TIM_Pulse = 1;                            //設置待裝入捕獲比較寄存器的脈沖值;也就是剛上電的占空比

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

TIM_OC1Init(TIM1, &TIM_OCInitStructure);  //根據TIM_OCInitStruct中指定的參數初始化外設TIMx

TIM_OC4Init(TIM1, &TIM_OCInitStructure);  //根據TIM_OCInitStruct中指定的參數初始化外設TIMx

TIM_CtrlPWMOutputs(TIM1,ENABLE); //MOE 主輸出使能

TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);  //CH1預裝載使能  

TIM_OC4PreloadConfig(TIM1, TIM_OCPreload_Enable);  //CH4預裝載使能  

TIM_ARRPreloadConfig(TIM1, ENABLE); //使能TIMx在ARR上的預裝載寄存器

TIM_Cmd(TIM1, ENABLE);  //使能TIM1

}


2、通用定時器的硬件PWM輸出

對應TIM3_CH2 - PA7


void TIM3Init(void)

{

GPIO_InitTypeDef GPIO_InitStructure;

TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;

TIM_OCInitTypeDef TIM_OCInitStructure;

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);  //使能定時器 3 時鐘

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //使能 GPIOA時鐘

//設置該引腳為復用輸出功能,輸出 TIM3 CH2 的 PWM 脈沖波形  GPIOA.7

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7; //TIM_CH2

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

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

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

//初始化 TIM3

TIM_TimeBaseStructure.TIM_Period = 255; //設置在自動重裝載周期值

TIM_TimeBaseStructure.TIM_Prescaler = 72*39-1; //設置預分頻值

TIM_TimeBaseStructure.TIM_ClockDivision = 0; //設置時鐘分割:TDTS = Tck_tim

TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM 向上計數模式

TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //初始化 TIMx

//初始化 TIM3 Channel2 PWM 模式

TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //選擇 PWM 模式 1

TIM_OCInitStructure.TIM_Pulse = 255;

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

TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //輸出極性高

TIM_OC2Init(TIM3, &TIM_OCInitStructure); //初始化外設 TIM3 OC2

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

TIM_Cmd(TIM3, ENABLE); //使能 TIM3

}

關鍵字:STM32  模塊化程序  PWM產生 引用地址:【STM32模塊化程序】PWM產生

上一篇:KST-STM32學習之項目實戰(zhàn)RGB舞臺燈光
下一篇:KST-STM32學習之位帶操作

推薦閱讀

據外媒報道,Lithos Energy公司宣布推出第四代高壓液冷電池組,該電池組可提供更高的能量密度、更高的安全性并可快速實現大批量生產。Lithos第四代電池技術現在已應用于Lithos最新推出的高壓電池組中。該技術較之前技術有顯著的改進,與前幾代電池相比,能量增加了23%。此外,該新技術也提高了電池的安全性和可靠性。其先進設計具被動傳播功能,可防止熱...
蘋果本周舉辦新品發(fā)布會后,市值一飛沖天重登1萬億美元巔峰,堪稱富可敵國的超級大型企業(yè),這樣的成績即便是當年的賈伯斯,恐怕也難預料得到。然而,此次蘋果推出iPhone 11、iPhone 11 Pro以及iPhone 11 Pro Max三款新手機,雖然在效能上去年增強許多,與其他廠牌的手機相比,卻顯得缺乏創(chuàng)新,就連外觀都備受眾多美國網友嫌棄。而在連續(xù)兩年沒有出現...
集微網消息(文/隱德萊希),英偉達(Nvidia)宣布以400億美元的價格收購英國半導體IP公司Arm,一石激起千層浪。Arm聯合創(chuàng)始人之一Hermann Hauser創(chuàng)建了“拯救Arm”網站,并且今天在該網站上發(fā)表了對英國首相的公開信,呼吁以“國家經濟安全”的名義讓Arm重回英國懷抱,集微網全文翻譯此封公開信,以饗讀者。以下為公開信原文。尊敬的首相:作為Arm的創(chuàng)始...
隨著燃油車被電動車取代,機械連接越來越多地被電子信息所取代,需要一個車載網絡來促進通信。針對汽車和其他時間敏感的應用而出現的以太網似乎是首選。 但這一選擇是否已成定局?以太網會取代所有其他的車載網絡嗎?至少到目前為止,還不清楚。 Synopsys的高級市場經理Joe Mallett說:“現在對汽車以太網是否真的會成為首選的總線仍有爭議。它減少了線束...

史海拾趣

問答坊 | AI 解惑

模糊控制在基于CAN總線的數據采集與控制系統(tǒng)中的應用

介紹了如何的把把模糊算法與CAN部線結合起來應用于控制系統(tǒng);并設計了一種智能型模糊控制算法,給出了系統(tǒng)的整體結構和現場模糊控制單元的硬件實現電路及其軟件設計思路。系統(tǒng)的仿真結果表明,該系統(tǒng)實時性好、控制精度較高。…

查看全部問答∨

女孩子做電源這個行業(yè)是不是很難!

我本科畢業(yè)設計做的開關電源 感覺很喜歡這個東西 讀研究生一直不知道自己應該選哪個方向 快研二了,導師替我選了題目 開學要去清華做課題 出乎我的意外,居然是做脈沖電源 呵呵,很開心 但是依然很擔心自己的動手能力 導師說可能要自 ...…

查看全部問答∨

codevision avr最新版的注冊機誰有?

codevision avr最新版的注冊機誰有?謝謝!…

查看全部問答∨

三星提供的DNW太不穩(wěn)定了,能不能自己寫一個下載工具,那里有完整的DNW源碼?我看下載要用USB PORT/UBOOT功能,請問這一項用的USB協(xié)議是

三星提供的DNW太不穩(wěn)定了,能不能自己寫一個下載工具,那里有完整的DNW源碼?《通過網絡下到的都不是很全,都沒有UBOOT選項功能的實現》我看下載要用USB PORT/UBOOT功能,請問這一項用的USB協(xié)議是?如果不按這個UBOOT的USB協(xié)議來發(fā)送NK,那EBOOT里 ...…

查看全部問答∨

請教WINCE 屏保的事情

wince可以做屏保嗎? 如何實現呢?需要怎么樣的配置? 電腦里面的屏保程序可以運行在wince下面嗎?還是要單獨開發(fā)? 希望有經驗的同志們多多支招啊 發(fā)現wince還是很好玩的 每天問個問題,每天散點分,馬上要過年了,希望大家在新的一年里面快 ...…

查看全部問答∨

MLC Nand驅動的問題,急~~~~~~

最近改Nand driver,從SLC改為支持MLC。 但改完了發(fā)現一個問題: 1、全部先擦一遍 2、連續(xù)寫20個Page,每一個Page都是2K內容 + 64Byte的OOB (此時若將這20個Page讀出來,發(fā)現全部都是正確的) 3、將前8個Page的OOB部分寫入一些信息 (此時是 ...…

查看全部問答∨

Rt_thread mailbox lab

我暈。。這是寫第二次了,不明白今天是怎么回事了???、   哎,不管了,再寫一次了。   這個版塊冷得很了,我一個人可弄不起來。。國產的這塊其實非常不錯,我覺得學著用簡單實用。   大家出來耍耍吧。下面是我根據4.0版的 ...…

查看全部問答∨

本人收藏多年的單片機正版書籍,低價出售

我的家太小了,放不下了,孩子的書越來越多,只能騰騰地方,多放些孩子的書吧~這些書都是正版的,絕大部分是全新的,保存完好。低至3~5折,有需要的朋友來選購。郵費問題大家還是一人一半吧! 支付寶交易!我的QQ:1819815928部分清單:序號  ...…

查看全部問答∨

發(fā)現MDK5.0的BUG,請大家簽定一下

我下了MDK5.0,也知道跟以往不同的是多了個安裝包,問題隨之而來,我裝了STM32F0的包后,我新建工程就有STM32F0的芯片,但我要開發(fā)TI的芯片怎么辦呢,根本就沒有TI的包啊 再有開發(fā)STM32F1我以前的MDK4.幾,都是芯片容量可選,但在5.0卻不可選,只 ...…

查看全部問答∨

一個簡單的5110顯示問題

各位,我用launchpad調諾基亞5110屏的程序,程序中只要有  LCD_clear();  就無法執(zhí)行,屏蔽  LCD_clear(); 之后只能顯一部分,LCD_clear();檢查覺得也沒問題,可就是執(zhí)行不了,怎么解決? # include "msp430g25 ...…

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

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

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

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發(fā)圈

 
機器人開發(fā)圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業(yè)務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 广灵县| 额尔古纳市| 山丹县| 逊克县| 临夏市| 上思县| 吴桥县| 嘉义县| 莱西市| 博兴县| 玛纳斯县| 资源县| 安仁县| 宜春市| 昌图县| 纳雍县| 阳新县| 古交市| 宝兴县| 湛江市| 嘉兴市| 鸡泽县| 昌图县| 富顺县| 光泽县| 柘城县| 景洪市| 岐山县| 津市市| 崇文区| 小金县| 安化县| 昌图县| 商水县| 湄潭县| 浠水县| 南岸区| 长乐市| 柳江县| 晋江市| 鄂托克前旗|