国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

STM32F1定時(shí)器-PWM輸出

這篇具有很好參考價(jià)值的文章主要介紹了STM32F1定時(shí)器-PWM輸出。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

定時(shí)器-PWM輸出

STM32 PWM工作過(guò)程

STM32F1定時(shí)器-PWM輸出

ARR寄存器決定PWM周期,CCR寄存器決定占空比

通道1為例的PWM輸出電路圖

STM32F1定時(shí)器-PWM輸出

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

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

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

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

PWM模式1和模式2的區(qū)別

捕獲/比較模式寄存器 1(TIMx_CCMR1)

STM32F1定時(shí)器-PWM輸出

有效電平并不是指高電平或者低電平,設(shè)置高電平有效還是低電平有效要看CCER寄存器的CC1P位

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

如果設(shè)置為高電平有效,那么在PWM模式1的向上計(jì)數(shù)時(shí),TIMx_CNT < TIMx_CCR1時(shí)通道1輸出的就是高電平

如果設(shè)置為低電平有效,那么在PWM模式1的向上計(jì)數(shù)時(shí),TIMx_CNT < TIMx_CCR1時(shí)通道1輸出的就是低電平

PWM模式

脈沖寬度調(diào)制模式可以產(chǎn)生一個(gè)由TIMx_ARR寄存器確定頻率、由TIMx_CCRx寄存器確定占空比的信號(hào)。

在TIMx_CCMRx寄存器中的OCxM位寫(xiě)入’110’(PWM模式1)或’111’(PWM模式2),能夠獨(dú)立地設(shè)置每個(gè)OCx輸出通道產(chǎn)生一路PWM。

必須設(shè)置TIMx_CCMRx寄存器OCxPE位以使能相應(yīng)的預(yù)裝載寄存器,對(duì)應(yīng)的庫(kù)函數(shù)是:

void TIM_OC2PreloadConfig(TIM_TypeDef*TIMx, uint16_t TIM_OCPreload);

最后還要設(shè)置TIMx_CR1寄存器的ARPE位,(在向上計(jì)數(shù)或中心對(duì)稱(chēng)模式中)使能自動(dòng)重裝載的預(yù)裝載寄存器,對(duì)應(yīng)的庫(kù)函數(shù)是:

void TIM_ARRPreloadConfig(TIM_TypeDef* TIMx,FunctionalState NewState);

自動(dòng)重載的預(yù)裝載寄存器

ARPE = 1時(shí)的更新事件,意思就是CNT計(jì)數(shù)器在計(jì)數(shù)時(shí),在到達(dá)ARR寄存器值溢出之前,人為的又往ARR寄存器里寫(xiě)入了新值,那這個(gè)新值會(huì)立即生效,計(jì)數(shù)到這個(gè)新值時(shí)產(chǎn)生溢出

STM32F1定時(shí)器-PWM輸出

ARPE = 0時(shí)更新事件,意思是在CNT計(jì)數(shù)器計(jì)數(shù)過(guò)程中,在計(jì)數(shù)溢出之前,人為改變了ARR寄存器的值,寫(xiě)入了新值,那這個(gè)新值會(huì)在下一個(gè)計(jì)數(shù)周期才生效,在寫(xiě)入新值的當(dāng)前周期里,還是計(jì)數(shù)到舊值就產(chǎn)生溢出

STM32F1定時(shí)器-PWM輸出

void TIM_ARRPreloadConfig(TIM_TypeDe* TIMx, FunctionalState NewStale);

簡(jiǎn)單的說(shuō), ARPE=1,ARR立即生效;APRE=0,ARR下個(gè)比較周期生效。

PWM輸出庫(kù)函數(shù)

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

結(jié)構(gòu)體類(lèi)型

typedef struct
{
	uint16_t TM_OCMode;			//PWM模式1或者模式2
    uint16_t TIM_OutputState;	//輸出使能/失能
    uint16_t TIM_OutputNState;
	uint16_t TIM_Pulse;			//比較值,寫(xiě)CCRx
    uint16_t TIM_OCPolarity; 	//比較輸出極性
    uint16_t TIM_OCNPolarity;
	uint16_t TIM_OCldleState;
    uint16_t TIM_OCNldleState;
} TIM_OCInitTypeDef;

初始化示例

TIM_OCInitStructure.TlM_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ù)初始化外設(shè)TIM3 OC2

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

void TIM_SetCompareX(TIM_TypeDef* TIMx, uint16_t Compare2);

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

void TIM_OC2PreloadConfig(TIM_TypeDef* TIMx,uint16_t TIM_OCPreload);

使能自動(dòng)重裝載的預(yù)裝載寄存器允許位:

void TIM_ARRPreloadConfig(TIM_TypeDef* TIMx, FunctionalState NewState);

實(shí)驗(yàn)

使用定時(shí)器3的PWM功能,輸出占空比可變的PWM波,用來(lái)驅(qū)動(dòng)LED燈,從而達(dá)到LED亮度由暗變亮,又從亮變暗,如此循環(huán)。

PWM輸出配置步驟:

1、使能定時(shí)器3和相關(guān)IO口時(shí)鐘。

? 使能定時(shí)器3時(shí)鐘:RCC_APB1PeriphClockCmd();
? 使能GPIOB時(shí)鐘:RCC_ APB2PeriphClockCmd();

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

? GPIO_InitStructure.GPIO Mode = GPIO_Mode_AF_PP;

3、這里我們是要把PB5用作定時(shí)器的PWM輸出引腳,所以要重映射配置,所以需要開(kāi)啟AFIO時(shí)鐘。同時(shí)設(shè)置重映射。

? RCC_APB2PeriphClockCmd(RCC_APB2Periph_ AFIO,ENABLE);
? GPIO_PinRemapConfig(GPIO_ PartialRemap_TIM3, ENABLE); //定時(shí)器3重映射到相應(yīng)的引腳

4、初始化定時(shí)器: ARR,PSC等: TIM_TimeBaselnit();

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

6、使能預(yù)裝載寄存器TIM_OC2PreloadConfig(TIM3,TIM_OCPreload_Enable);

7、使能定時(shí)器。TIM_Cmd();

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

定時(shí)器PWM初始化示例,C8T6的板

因?yàn)殚_(kāi)發(fā)板的LED燈引腳PA1同時(shí)也是TIM2_CH2引腳,這里使用了引腳復(fù)用功能,沒(méi)有重映射

/**
 * @name   TIM_PWM_Init
 * @brief  定時(shí)器PWM初始化
 * @param  arr:自動(dòng)重裝值
 *         psc:時(shí)鐘預(yù)分頻系數(shù)
 * @retval None
 */
void TIM_PWM_Init(u16 arr,u16 psc)
{
    GPIO_InitTypeDef GPIO_InitStructure;
    TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
    TIM_OCInitTypeDef TIM_OCInitTypeDefStructure;

    //使能定時(shí)器2時(shí)鐘
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);

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

    //PA1配置
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;     //設(shè)置為復(fù)用推挽輸出
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    
    //PA1初始化
    GPIO_Init(GPIOA,&GPIO_InitStructure);

    //把PA1用作定時(shí)器的PWM輸出引腳。初始化定時(shí)器
    TIM_TimeBaseInitStructure.TIM_Period = arr; //設(shè)置在下一個(gè)更新事件裝入活動(dòng)的自動(dòng)重裝載寄存器周期的值
    TIM_TimeBaseInitStructure.TIM_Prescaler = psc;//設(shè)置用來(lái)作為T(mén)IMx時(shí)鐘頻率除數(shù)的預(yù)分頻值
    TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;   //TIM向上計(jì)數(shù)模式
    TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1; //設(shè)置時(shí)鐘分割:TDTS = Tck_tim

    //定時(shí)器2初始化
    TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStructure);

    //通道2配置
    TIM_OCInitTypeDefStructure.TIM_OCMode = TIM_OCMode_PWM2;    //PWM模式2
    TIM_OCInitTypeDefStructure.TIM_OutputState = TIM_OutputState_Enable;    //比較輸出使能
    TIM_OCInitTypeDefStructure.TIM_Pulse = 100;
    TIM_OCInitTypeDefStructure.TIM_OCPolarity = TIM_OCPolarity_High;    //輸出極性:TIM輸出比較極性高

    //初始化輸出比較參數(shù)
    TIM_OC2Init(TIM2,&TIM_OCInitTypeDefStructure);

    //使能預(yù)裝載寄存器
    TIM_OC2PreloadConfig(TIM2,TIM_OCPreload_Enable);

    //使能定時(shí)器
    TIM_Cmd(TIM2,ENABLE);
}

main函數(shù)

因?yàn)閐ir初始化為1,所以進(jìn)入while循環(huán)后,led0pwmval++,等led0pwmval增加到大于300時(shí),dir 被置為 0,led0pwmval又開(kāi)始減少,減到0后,dir置為1,led0pwmval再增加,如此反復(fù)

調(diào)用TIM_SetCompare2函數(shù)往CCR2寄存器寫(xiě)入不斷變化的led0pwmval值,輸出PWM,LED燈呈呼吸燈的效果文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-489730.html

#include "PWM.h"
int main()
{
	u16 led0pwmval = 0;
	u8 dir = 1;
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);	//NVIC初始化分組
	LED_Init();		//LED初始化
	delay_init();	//延時(shí)初始化
	TIM_PWM_Init(899,0);	//不分頻。PWM頻率=72000000/900=80Khz
	while(1)
	{
		delay_ms(10);
		if(dir)
		{
			led0pwmval++;
		}
		else
		{
			led0pwmval--;
		}

		if(led0pwmval > 300){dir = 0;}
		if(led0pwmval == 0){dir = 1;}

		//往CCR2寄存器寫(xiě)入不斷變化的led0pwmval值,調(diào)整比較值,就能輸出不斷變化的占空比了
		TIM_SetCompare2(TIM2,led0pwmval);
	}
}

到了這里,關(guān)于STM32F1定時(shí)器-PWM輸出的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • STM32F407單一定時(shí)器輸出4路不同頻率及占空比的PWM波

    STM32F407單一定時(shí)器輸出4路不同頻率及占空比的PWM波

    程序效果演示 STM32單一定時(shí)器輸出四路不同頻率及占空比的PWM波 一、程序思路 因?yàn)槎〞r(shí)器只有一個(gè)CNT計(jì)數(shù)器所以只能有一個(gè)輸出頻率,若要實(shí)現(xiàn)多路不同頻率波形,只能通過(guò)在當(dāng)前CNT計(jì)數(shù)器的基礎(chǔ)上不斷累加自身CCR寄存器的值來(lái)觸發(fā)中斷在中斷中翻轉(zhuǎn)波形的方式,此時(shí)中斷

    2024年02月05日
    瀏覽(20)
  • 基于STM32F103C8T6的端口重映射及定時(shí)器輸出PWM控制

    基于STM32F103C8T6的端口重映射及定時(shí)器輸出PWM控制

    #一、端口重映射原理及部分/完全重映射 #二、端口重映射的配置 #三、PWM控制 ##1、通用定時(shí)器輸出PWM ##2、PWM的工作原理 ##3、PWM的內(nèi)部運(yùn)作機(jī)制 ##4、PWM的模式 ##5、自動(dòng)加載的預(yù)載寄存器 #四、定時(shí)器輸出PWM結(jié)構(gòu)體及庫(kù)函數(shù)的配置 #五、項(xiàng)目硬件 #六、項(xiàng)目代碼 一、端口重映射

    2024年02月13日
    瀏覽(22)
  • 定時(shí)器詳解 -- 定時(shí)器中斷、PWM輸出 --stm32

    定時(shí)器詳解 -- 定時(shí)器中斷、PWM輸出 --stm32

    STM32F103系列芯片擁有多種定時(shí)器,包括基本定時(shí)器、通用定時(shí)器和高級(jí)定時(shí)器,每種定時(shí)器都具有一些特定的功能。 向上計(jì)數(shù):計(jì)數(shù)器從0計(jì)數(shù)到自動(dòng)重裝載值(ARR),然后重新從0開(kāi)始計(jì)數(shù)并且產(chǎn)生一個(gè)計(jì)數(shù)器溢出事件。 向下計(jì)數(shù):計(jì)數(shù)器從自動(dòng)重裝載值(ARR)開(kāi)始向下計(jì)數(shù)

    2024年02月11日
    瀏覽(24)
  • GD32F303高級(jí)定時(shí)器輸出互補(bǔ)PWM-開(kāi)發(fā)筆記

    GD32F303高級(jí)定時(shí)器輸出互補(bǔ)PWM-開(kāi)發(fā)筆記

    ? 總通道數(shù):4; ? 計(jì)數(shù)器寬度:16位; ? 時(shí)鐘源可選:內(nèi)部時(shí)鐘,內(nèi)部觸發(fā),外部輸入,外部觸發(fā); ? 多種計(jì)數(shù)模式:向上計(jì)數(shù),向下計(jì)數(shù)和中央計(jì)數(shù); ? 正交編碼器接口:被用來(lái)追蹤運(yùn)動(dòng)和分辨旋轉(zhuǎn)方向和位置; ? 霍爾傳感器接口:用來(lái)做三相電機(jī)控制; ? 可編程

    2024年02月09日
    瀏覽(40)
  • STM32F1定時(shí)器(TIM1~TIM8)

    STM32F1定時(shí)器(TIM1~TIM8)

    STM32共11個(gè)定時(shí)器,2個(gè)高級(jí)控制定時(shí)器TIM1和TIM8,4個(gè)通用定時(shí)器TIM2~TIM5,兩個(gè)基本定時(shí)器TIM6和TIM7,兩個(gè)看門(mén)狗定時(shí)器和一個(gè)系統(tǒng)滴答定時(shí)器Systick. 高級(jí)定時(shí)器TIM1和TIM8的時(shí)鐘由APB1產(chǎn)生,其它六個(gè)通用定時(shí)器的時(shí)鐘由APB2產(chǎn)生。它們的最大頻率都可以配置成系統(tǒng)時(shí)鐘的頻率。 定

    2024年02月15日
    瀏覽(45)
  • STM32定時(shí)器輸出PWM脈沖

    STM32定時(shí)器輸出PWM脈沖

    一、什么是PWM脈沖? PWM (Pulse Width Modulation) 脈沖寬度調(diào)制,通常應(yīng)用于慣性系統(tǒng)中,( 不是不能即停的設(shè)備,因?yàn)槿绻O(shè)備不具有關(guān)心,那么運(yùn)動(dòng)是斷斷續(xù)續(xù)的,不具有連續(xù)性 ),通過(guò)脈寬調(diào)節(jié)輸出不同的波形作用域受控對(duì)象。 二、 PWM中三個(gè)重要的參數(shù) 1.頻率=1/Ts ;這個(gè)很

    2024年02月15日
    瀏覽(24)
  • STM32TIM定時(shí)器PWM輸出比較(適用于通用,高級(jí)定時(shí)器)

    STM32TIM定時(shí)器PWM輸出比較(適用于通用,高級(jí)定時(shí)器)

    在定時(shí)器中我們最常用的功能就是輸出PWM,大多是用在電機(jī)控制方面,目前網(wǎng)絡(luò)上相關(guān)資料也有很多,但是,很多不利于我們“現(xiàn)搜現(xiàn)用”我這里不是說(shuō)我寫(xiě)的有多好,而是你搜索到此類(lèi)文章時(shí)大部分是急于解決目前的問(wèn)題,一段相關(guān)代碼和講解就行,當(dāng)然不是學(xué)習(xí)背后的原

    2024年01月25日
    瀏覽(21)
  • STM32使用CubeMx配置定時(shí)器輸出PWM

    STM32使用CubeMx配置定時(shí)器輸出PWM

    ????????項(xiàng)目中經(jīng)常使用到STM32來(lái)輸出PWM,每次配置過(guò)后過(guò)不了多久就會(huì)忘記,稍微需要對(duì)配置做出修改時(shí)都要翻很久的手冊(cè),所以決定結(jié)合實(shí)例把PWM配置的詳細(xì)步驟記錄下來(lái),這樣在下次配置時(shí)可以很快的撿起來(lái)。 ????????本文檔的行文結(jié)構(gòu)如下,首先,說(shuō)明實(shí)際需

    2024年02月03日
    瀏覽(27)
  • STM32(7)-定時(shí)器輸出PWM的原理分析

    STM32(7)-定時(shí)器輸出PWM的原理分析

    概念+代碼 OC(Output Compare)輸出比較 輸出比較可以通過(guò)比較CNT與CCR寄存器值的關(guān)系,來(lái)對(duì)輸出電平進(jìn)行置1、置0或翻轉(zhuǎn)的操作,用于輸出一定頻率和占空比的PWM波形 每個(gè)高級(jí)定時(shí)器和通用定時(shí)器都擁有4個(gè)輸出比較通道 高級(jí)定時(shí)器的前3個(gè)通道額外擁有死區(qū)生成和互補(bǔ)輸出的功

    2024年02月04日
    瀏覽(17)
  • STM32使用高級(jí)定時(shí)器輸出互補(bǔ)pwm波

    STM32使用高級(jí)定時(shí)器輸出互補(bǔ)pwm波

    最近做的一個(gè)項(xiàng)目用到stm32,網(wǎng)上查了很多資料,也踩了很多坑,這里記錄一下配置的步驟和說(shuō)明 硬件使用的是stm32h750vbt6; 軟件用到了stm32cubemx和keil5; 打開(kāi)Debug模式方便調(diào)試,可以忽略,不影響代碼運(yùn)行 在用cube配置時(shí)鐘源時(shí),有下面三個(gè)選項(xiàng) Disable(禁用) BYPASS Clock Sou

    2024年02月16日
    瀏覽(20)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包