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

STM32F105RBT6 使用定時器TIM3輸出PWM波

這篇具有很好參考價值的文章主要介紹了STM32F105RBT6 使用定時器TIM3輸出PWM波。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

1. TIM3的GPIO口,查閱STM32F105RBT6 數(shù)據(jù)手冊,TIM3的4通道用的是PB1

STM32F105RBT6 使用定時器TIM3輸出PWM波

2. 初始化GPIO口和定時器TIM3

2.1 相關(guān)函數(shù)

RCC_APB1PeriphClockCmd、GPIO_Init、TIM_TimeBaseInit、TIM_OC4Init、TIM_OC4PreloadConfig、NVIC_Init、TIM_ITConfig、TIM_Cmd、

void TIM3_Init(void)
{
    GPIO_InitTypeDef GPIO_InitStruct;
    TIM_TimeBaseInitTypeDef TIM_InitStruct;
    TIM_OCInitTypeDef TIM_OCInitStruct;
    NVIC_InitTypeDef NVIC_InitStruct;

    // Enable clock for TIM3 and GPIOB
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3 | RCC_APB2Periph_GPIOB, ENABLE);

    // Initialize GPIOB to output PWM signal
    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_1;
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOB, &GPIO_InitStruct);

    // Initialize TIM3 for PWM generation with interrupt on update
      TIM_InitStruct.TIM_Prescaler = 0; // Set PWM frequency to 72MHz (72 MHz / (0 + 1))
    TIM_InitStruct.TIM_Period = 999;
    TIM_InitStruct.TIM_ClockDivision = TIM_CKD_DIV1;
    TIM_InitStruct.TIM_CounterMode = TIM_CounterMode_Up;
    TIM_TimeBaseInit(TIM3, &TIM_InitStruct);

    TIM_OCInitStruct.TIM_OCMode = TIM_OCMode_PWM1;
    TIM_OCInitStruct.TIM_OutputState = TIM_OutputState_Enable;
    TIM_OCInitStruct.TIM_OCPolarity = TIM_OCPolarity_High;
    TIM_OCInitStruct.TIM_Pulse = 500; // Duty cycle = 50%
    TIM_OC4Init(TIM3, &TIM_OCInitStruct);
    TIM_OC4PreloadConfig(TIM3, TIM_OCPreload_Enable);

    NVIC_InitStruct.NVIC_IRQChannel = TIM3_IRQn;
    NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 4;
    NVIC_InitStruct.NVIC_IRQChannelSubPriority = 0;
    NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStruct);

    TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE);
    TIM_Cmd(TIM3, ENABLE);
}

3. 中斷入口 TIM3_IRQHandler

3.1 在啟動文件里面找到TIM3 對應(yīng)的中斷入口函數(shù),也就是中斷服務(wù)函數(shù) TIM3_IRQHandler

STM32F105RBT6 使用定時器TIM3輸出PWM波

4. 編寫中斷服務(wù)函數(shù)

void TIM3_IRQHandler(void)
{
    if (TIM_GetITStatus(TIM3, TIM_IT_Update) == SET) // overflow interrupt
    {
        printf("龍傲天說,我三歲拳打南山不老院,四歲腳踢北海幼兒園\r\n");
    }
    TIM_ClearITPendingBit(TIM3,TIM_IT_Update); // clear interrupt flag

    // Handle interrupt by updating PWM duty cycle value
//    static uint16_t duty_cycle = 500; // Initial value of 50%
//    duty_cycle = duty_cycle < 950 ? duty_cycle + 50 : 0; // Increase duty cycle by 5% every period
//    TIM_SetCompare4(TIM3, duty_cycle);
}

4.1 中斷服務(wù)函數(shù)需要快速地執(zhí)行完畢。中斷服務(wù)函數(shù)應(yīng)該避免執(zhí)行太多的計(jì)算復(fù)雜度較高的操作,否則可能會導(dǎo)致中斷響應(yīng)時間過長,甚至因?yàn)檠舆t而導(dǎo)致系統(tǒng)不穩(wěn)定。

4.2 如果你需要在中斷服務(wù)函數(shù)中訪問全局變量,需要將這些變量定義為volatile類型。這是因?yàn)橹袛喾?wù)函數(shù)可能會在任何時間被外部中斷所打斷,如果沒有使用volatile類型,就有可能導(dǎo)致變量值不準(zhǔn)確。

4.3 在中斷服務(wù)函數(shù)的結(jié)尾處,需要調(diào)用NVIC_ClearPendingIRQ()函數(shù)來清除中斷掛起位。

4.4 中斷函數(shù)最好別用printf 函數(shù)等耗時、有可能阻塞的一些函數(shù),printf函數(shù)本身就比較耗時,在中斷服務(wù)函數(shù)中調(diào)用的話,可能會導(dǎo)致中斷響應(yīng)時間過長,使系統(tǒng)不穩(wěn)定。如果在中斷服務(wù)函數(shù)中使用了printf函數(shù),可能會導(dǎo)致printf函數(shù)與被打斷的低優(yōu)先級代碼發(fā)生沖突,造成數(shù)據(jù)異常。我這里用 printf 只是為了裝13,我龍傲天誰都不服

4.4 中斷服務(wù)函數(shù)需要快速、簡潔、有效地處理中斷,并且需要小心地處理共享資源和全局變量。

5. 主函數(shù)調(diào)用一下初始化函數(shù)就可以了

int main(void)
{
    TIM3_Init();
    while (1)
    {
    	printf("劍圣來了,快跑");
	}
}

5.1 如果沒有成功輸出pwm波,可能是初始化時序不對,前面已經(jīng)操作過該IO口了,我有很多的例程放在一起,搞混了,需要把原來的操作去掉,屏蔽掉,或者調(diào)整一下 TIM3_Init() 的位置,如果有很多別的初始化函數(shù),就把TIM3_Init() 放到后面一點(diǎn)試試

STM32F105RBT6 使用定時器TIM3輸出PWM波

6. 串口數(shù)據(jù)

STM32F105RBT6 使用定時器TIM3輸出PWM波

7. 拿示波器或者邏分儀去量PB1 引腳,看波形,有毛刺,我沒濾波的,可以處理掉

STM32F105RBT6 使用定時器TIM3輸出PWM波

STM32F105RBT6 使用定時器TIM3輸出PWM波

8. PWM 波頻率、周期計(jì)算

8.1 頻率 F = SYSCLK / ((TIM_Prescaler + 1) / (TIM_Period + 1))

8.2 周期 T = 1 / F

8.3 制造一個頻率是1 Hz的PWM 波,周期 1s, 占空比50%,改下面三個參數(shù)值就行了

	TIM_InitStruct.TIM_Prescaler = 7199;
   	TIM_InitStruct.TIM_Period = 10000;
    TIM_OCInitStruct.TIM_Pulse = 5000;  // 占空比50% = 5000 / (TIM_Period + 1)

STM32F105RBT6 使用定時器TIM3輸出PWM波

9. TIM3的四個通道輸出四路PWM,各個通道之間輸出的PWM是獨(dú)立的,頻率,占空比可單獨(dú)設(shè)置

void TIM3_Init(void)
{
   GPIO_InitTypeDef GPIO_InitStruct;
   TIM_TimeBaseInitTypeDef TIM_InitStruct;
   TIM_OCInitTypeDef TIM_OCInitStruct;

   RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3 | RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOC | RCC_APB2Periph_AFIO, ENABLE);

   GPIO_InitStruct.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;
   GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
   GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
   GPIO_Init(GPIOA, &GPIO_InitStruct);

   GPIO_InitStruct.GPIO_Pin = GPIO_Pin_4;
   GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
   GPIO_Init(GPIOC, &GPIO_InitStruct);

   GPIO_InitStruct.GPIO_Pin = GPIO_Pin_5;
   GPIO_Init(GPIOA, &GPIO_InitStruct);
   /*
    * Initialize TIM3 for generation PWM
    * Set PWM frequency to 72kHz (72 MHz / (999 + 1) / (0 + 1)), TIM3_FRQ = SYSCLK / ((TIM_Period + 1) * (TIM_Prescaler + 1))
    * STM32F105RBT6_PB1 - TIM3_Ch4
    */
   TIM_InitStruct.TIM_Prescaler = 7199; // 0, 7199
   TIM_InitStruct.TIM_Period = 9999; // 999, 9999
   TIM_InitStruct.TIM_ClockDivision = TIM_CKD_DIV1;
   TIM_InitStruct.TIM_CounterMode = TIM_CounterMode_Up;
   TIM_TimeBaseInit(TIM3, &TIM_InitStruct);

   TIM_OCInitStruct.TIM_OCMode = TIM_OCMode_PWM1;
   TIM_OCInitStruct.TIM_OutputState = TIM_OutputState_Enable;
   TIM_OCInitStruct.TIM_OCPolarity = TIM_OCPolarity_High;
   TIM_OCInitStruct.TIM_Pulse = 5000; // 500,5000 Duty cycle = 50%

   TIM_OC1Init(TIM3, &TIM_OCInitStruct);
   TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);

   TIM_OC2Init(TIM3, &TIM_OCInitStruct);
   TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);

   TIM_Cmd(TIM3, ENABLE);
}

主函數(shù)調(diào)用,使能每個通道輸出

while (1) {
		TIM_SetCompare1(TIM3, 5000);
        TIM_SetCompare2(TIM3, 5000);
        TIM_SetCompare4(TIM3, 5000);
}

STM32F105RBT6 使用定時器TIM3輸出PWM波文章來源地址http://www.zghlxwxcb.cn/news/detail-478375.html

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

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

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

相關(guān)文章

  • STM32F1定時器-PWM輸出

    STM32F1定時器-PWM輸出

    STM32 PWM工作過程 ARR寄存器決定PWM周期,CCR寄存器決定占空比 通道1為例 的PWM輸出電路圖 CCR1:捕獲比較(值)寄存器(x =1,2,3,4):設(shè)置比較值。 CCMR1:OC1M[2:0]位:對于PWM方式下,用于設(shè)置PWM模式1【110】 或者PWM模式2【111】 CCER:CC1P位:輸入/捕獲1輸出極性。0:高電平有效,1:低電平

    2024年02月09日
    瀏覽(21)
  • STM32f103入門(5)定時器中斷

    STM32f103入門(5)定時器中斷

    STM32 TIM(定時器/計(jì)數(shù)器)模塊的中斷流程如下: 配置TIM寄存器:首先,通過配置TIM相關(guān)的寄存器來設(shè)置計(jì)時器的基本參數(shù),例如預(yù)分頻系數(shù)、計(jì)數(shù)模式、計(jì)數(shù)器周期等。 使能TIM中斷:使用TIM_ITConfig函數(shù)或者直接操作TIM的相關(guān)寄存器,將所需的中斷使能位置1??梢赃x擇使能不

    2024年02月11日
    瀏覽(25)
  • STM32F4基礎(chǔ):時鐘系統(tǒng)、中斷及定時器

    STM32F4基礎(chǔ):時鐘系統(tǒng)、中斷及定時器

    ? ? ? ? 時鐘系統(tǒng)是CPU的脈搏, 由于STM32 本身非常復(fù)雜,外設(shè)非常的多,并不是所有外設(shè)都需要系統(tǒng)時鐘這么高的頻率,比如看門狗以及 RTC 只需要幾十 k 的時鐘即可,因此STM32F4 的時鐘系統(tǒng)比較復(fù)雜 ,不像簡單的 51 單片機(jī)一個系統(tǒng)時鐘就可以解決一切。 ? ? ? ? 如下圖所

    2023年04月09日
    瀏覽(21)
  • STM32F系列項(xiàng)目定時器配置-中斷觸發(fā)源詳解

    STM32F系列項(xiàng)目定時器配置-中斷觸發(fā)源詳解

    1.以高級定時器為例: ?2.觸發(fā)源選擇與極性選擇: ? 3.觸發(fā)源介紹 (282條消息) 【STM32技巧】(1)STM32定時器8種觸發(fā)源之ITR0~ITR3說明_stm32 定時器觸發(fā)定時器_小石頭有大內(nèi)涵的博客-CSDN博客 ITR0 內(nèi)部觸發(fā)0 ITR1 內(nèi)部觸發(fā)1 ITR2 內(nèi)部觸發(fā)2 ITR3 內(nèi)部觸發(fā)3 ITR3 ?

    2024年02月11日
    瀏覽(34)
  • STM32F407 ADC+DMA+定時器 定時采樣模擬量

    STM32F407 ADC+DMA+定時器 定時采樣模擬量

    項(xiàng)目中需要對多個通道的電壓進(jìn)行一定頻率的AD采樣,由于采樣過程貫穿整個任務(wù),為了使采樣過程盡可能不占用CPU資源,采用定時器觸發(fā)的多通道ADC掃描采樣,且采樣數(shù)據(jù)由DMA傳到RAM中的緩存。 這樣做有以下幾個好處:1、由定時器觸發(fā)ADC采樣,這樣采樣的頻率可控,且定時

    2024年02月14日
    瀏覽(22)
  • STM32F407高級定時器-死區(qū)時間研究-STM32CubeMX

    STM32F407高級定時器-死區(qū)時間研究-STM32CubeMX

    距離上次寫筆記,已經(jīng)過去好長時間了 中間也折騰過不少東西,但是都沒咋整理,主要是這中間都是在干活兒,不是自己想要研究的,也沒想著要寫。 從去年10月份開始想要學(xué)習(xí)FOC,10月份研究了一個月,到11月初,實(shí)現(xiàn)了SVPWM驅(qū)動BLDC電機(jī),使用串口實(shí)現(xiàn)開環(huán)下轉(zhuǎn)速和力矩調(diào)

    2023年04月23日
    瀏覽(27)
  • STM32F103學(xué)習(xí)筆記(5.1)——定時器時鐘

    STM32F103學(xué)習(xí)筆記(5.1)——定時器時鐘

    STM32F103RCT6上總共有8個定時器,其中TIM1和TIM8是高級定時器,它們掛載在APB2高速總線上。而TIM2、TIM3、TIM4、TIM5是通用定時器,TIM6、TIM7是基本定時器,它們都掛載在APB1上,基本定時器的功能最少,高級定時器功能最多。所以以學(xué)習(xí)通用定時器為主。 需要參考手冊第二章存儲器

    2024年02月15日
    瀏覽(28)
  • 【單片機(jī)】STM32單片機(jī)的各個定時器的定時中斷程序,標(biāo)準(zhǔn)庫,STM32F103

    【單片機(jī)】STM32單片機(jī)的各個定時器的定時中斷程序,標(biāo)準(zhǔn)庫,STM32F103

    高級定時器和普通定時器的區(qū)別(https://zhuanlan.zhihu.com/p/557896041): TIM1是高級定時器,使用的時鐘總線是RCC_APB2Periph_TIM1,和普通定時器不一樣。 timer.c timer.h 調(diào)用 timer.c timer.h 調(diào)用 timer.c timer.h 調(diào)用 timer.c timer.h 調(diào)用 timer.c timer.h 調(diào)用

    2024年02月07日
    瀏覽(27)
  • STM32F103RCT6——定時器簡單用法

    STM32F103RCT6——定時器簡單用法

    STM32F10xx參考手冊英文和中文版 百度網(wǎng)盤:https://pan.baidu.com/s/1Z2nB0WVJIxvm3VOI9MQiiw 提取碼:lxlx STM32F103RCT6數(shù)據(jù)手冊 鏈接:https://pan.baidu.com/s/1tRchgf-5C1MN4W58vQ9zPg 提取碼:lxlx STM32F103RCT6包括,高級控制定時器TIM1和TIM8,通用定時器TIM2-5,基本定時器TIM6和TIM7. 高級控制定時器TIM1,TI

    2024年02月08日
    瀏覽(99)
  • stm32f407單一定時器輸出四路PWM波

    stm32f407單一定時器輸出四路PWM波

    最近在玩遙控器多路pwm捕獲,順帶著寫了一下pwm波輸出的代碼,下面我來說一下407板子輸出pwm波的具體配置及函數(shù)說明。 輸出效果如下。PS:因?yàn)槲业姆治鰞x只能接一個,就只看一路的輸出 1、開啟時鐘及定時器引腳復(fù)用 在輸出PWM波時要開啟定時器時鐘及GPIO時鐘,本例以TI

    2024年02月12日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包