精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

詳解CKS32F107xx系列的定時器同步功能

中科芯MCU ? 來源:中科芯MCU ? 2024-11-26 17:51 ? 次閱讀

MCU微課堂

CKS32F107xx TIM(四)

第四十八期 2024.11.22

定時器同步

CKS32F107xx系列部分定時器在內部是相連的,可用于定時器同步或鏈接,方便用戶配置不同的同步模式,以便在電機控制、數據采集和PWM信號生成等應用中,實現復雜的時間序列和多通道的同步操作。本節課我們將圍繞定時器同步功能概述展開,并以其中一種功能為例——將定時器2給定時器3當預分頻器,最終級聯同步PWM輸出。

依據《CKS32F107xx參考手冊》的從模式控制寄存器相關章節得知,并非任意兩個定時器都能任意級聯,硬件方面是固定的,若某個產品中沒有相應的定時器,則對應的觸發信號ITRx也不存在。如下表1所示。

表1 普通輸入捕獲概覽圖

bc64d562-a8a3-11ef-93f3-92fbcf53809c.png

如下圖1所示,TIM2更新事件的輸出信號TRGO1可以連接到TIM3的內部觸發信號線ITR1(可由表1查閱得知),作為TIM3 的時鐘輸入。

bc780cc2-a8a3-11ef-93f3-92fbcf53809c.png

圖1 主從定時器示例

要使TIM2和TIM3級聯同步輸出PWM波形,我們還會用到控制寄存器2(TIMx_CR2)和從模式控制寄存器(TIMx_SMCR)。接下來我們簡單介紹下這兩個寄存器。

首先是控制寄存器2(TIMx_CR2),該寄存器的各位描述如下圖所示:

bc7c3f36-a8a3-11ef-93f3-92fbcf53809c.png

bc842688-a8a3-11ef-93f3-92fbcf53809c.png

圖2 TIMx_CR2

關于該寄存器的詳細說明,請參照《CKS32F107xx參考手冊》。這里我們用到的是主模式選擇位域MMS,此部分由3位組成。共有8種模式可供選擇,因為我們使用的是更新模式,所以必須設置為010。

接下來我們介紹從模式控制寄存器(TIMx_SMCR),該寄存器的各位描述如下圖所示:

bc88dac0-a8a3-11ef-93f3-92fbcf53809c.png

bc8ead74-a8a3-11ef-93f3-92fbcf53809c.png

圖3 TIMx_SMCR

在該寄存器中,我們用到了SMS和TS位域,均由3位組成,各有8種不同模式組合。其中SMS控制從模式選擇,這里我們配置成100,選擇門控模式,確保從定時器的開始和結束都是由主定時器的輸出信號控制。TS控制觸發選擇,根據表1描述得知,我們必須配置成001。

定時器級聯同步輸出PWM配置操作

通過上述對定時器功能的描述,下面我們要實現TIM2發生事件更新時發送觸發信號驅動TIM3計數,并使能兩個定時器在PWM1模式下由定時器通道1輸出PWM波形。編程的要點如下所示。

1、配置PA0和PA6引腳為復用輸出功能

我們調用如下函數實現:

void TIM_GPIO_Configuration(void)

{

GPIO_InitTypeDef GPIO_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_6;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOA, &GPIO_InitStructure);

}

2、TIM2配置為主定時器

TIM2配置為PWM1模式輸出,使能主從模式,并選擇更新事件作為觸發輸出,主要代碼如下:

void TIM2_Master_Mode_Configuration(void)

{

TIM_TimeBaseInitTypeDef TIM2_TimeBaseStructure;

TIM_OCInitTypeDef TIM2_OCInitStructure;

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);

/* Time Base Configuration */

TIM2_TimeBaseStructure.TIM_Prescaler = 8;

TIM2_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;

TIM2_TimeBaseStructure.TIM_Period = 79;

TIM2_TimeBaseStructure.TIM_ClockDivision = 0;

TIM_TimeBaseInit(TIM2, &TIM2_TimeBaseStructure);

/* TIM2 Channel 1 Configuration in PWM1 mode */

TIM2_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;

TIM2_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;

TIM2_OCInitStructure.TIM_Pulse = 40 ;

TIM2_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;

TIM_OC1Init(TIM2, &TIM2_OCInitStructure);

TIM_SelectMasterSlaveMode(TIM2, TIM_MasterSlaveMode_Enable);

/* Master Mode selection */

TIM_SelectOutputTrigger(TIM2, TIM_TRGOSource_Update);

}

從上述代碼可得知,TIM2CLK固定為72MHz,TIM2預分頻為8,因此主定時器TIM2計數器時鐘頻率為8MHz頻率,則TIM2頻率=TIM2計數器時鐘/(TIM2_Period + 1)=100KHz,占空比為TIM2_CCR1/(TIM2_ARR + 1) = 50%。

3、TIM3配置為從定時器

TIM3配置為門控模式,并選擇ITR1作為輸入,主要代碼如下:

void TIM3_Slave_Mode_Configuration(void)

{

TIM_TimeBaseInitTypeDef TIM3_TimeBaseStructure;

TIM_OCInitTypeDef TIM3_OCInitStructure;

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);

/* Time Base Configuration */

TIM3_TimeBaseStructure.TIM_Prescaler = 0;

TIM3_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;

TIM3_TimeBaseStructure.TIM_Period = 4;

TIM3_TimeBaseStructure.TIM_ClockDivision = 0;

TIM_TimeBaseInit(TIM3, &TIM3_TimeBaseStructure);

/* TIM3 Channel 1 Configuration in PWM1 mode */

TIM3_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;

TIM3_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;

TIM3_OCInitStructure.TIM_Pulse = 2;

TIM3_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;

TIM_OC1Init(TIM3, &TIM3_OCInitStructure);

/* Slave Mode selection: TIM3 */

TIM_SelectSlaveMode(TIM3, TIM_SlaveMode_Gated);

TIM_SelectInputTrigger(TIM3, TIM_TS_ITR1);

}

從上述代碼可得知,從定時器TIM3頻率為(TIM2 frequency)/ (TIM3 period + 1)=20kHz,占空比為TIM3_CCR1/(TIM3_ARR + 1) = 40%。

4、主函數

初始化主從定時器,最終實現級聯同步PWM輸出,主要代碼如下:

int main(void)

{

TIM_GPIO_Configuration();

TIM3_Slave_Mode_Configuration();

TIM2_Master_Mode_Configuration();

TIM_Cmd(TIM2, ENABLE); /* Enable TIM2 Counter */

TIM_Cmd(TIM3, ENABLE); /* Enable TIM3 Counter */

while(1)

{

}

}

至此,用示波器測量PA0和PA6引腳的波形(注意共地);下載程序,調節示波器,可在示波器看到有PWM波形輸出,如下圖4所示:

bca40002-a8a3-11ef-93f3-92fbcf53809c.png

圖4PWM波形輸出

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 電機控制
    +關注

    關注

    3528

    文章

    1858

    瀏覽量

    268383
  • 寄存器
    +關注

    關注

    31

    文章

    5322

    瀏覽量

    120018
  • PWM
    PWM
    +關注

    關注

    114

    文章

    5147

    瀏覽量

    213413
  • 定時器
    +關注

    關注

    23

    文章

    3241

    瀏覽量

    114479

原文標題:MCU微課堂|CKS32F107xx TIM(四)

文章出處:【微信號:中科芯MCU,微信公眾號:中科芯MCU】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    CKS32F4xx系列ETH通信詳解

    CKS32F4xx系列芯片自帶以太網模塊,該模塊包括帶專用DMA控制的MAC 802.3(介質訪問控制)控制
    的頭像 發表于 11-10 11:13 ?959次閱讀
    <b class='flag-5'>CKS32F4xx</b><b class='flag-5'>系列</b>ETH通信<b class='flag-5'>詳解</b>

    基于CKS32F4xx系列的MCU互補PWM方案

    互補輸出實際跟比較輸出章節一樣使用的是定時器功能,所以相關的函數設置同樣在庫函數文件CKS32f4xx_tim.h和CKS32f4xx_tim.c文件中。 1)開啟TIM1和GPIO
    發表于 12-02 10:13 ?589次閱讀
    基于<b class='flag-5'>CKS32F4xx</b><b class='flag-5'>系列</b>的MCU互補PWM方案

    CKS32F4xx系列MCU SysTick定時器的原理及使用方法

    本課將為大家講解CKS32F4xx系列產品的SysTick定時器原理及使用方法。SysTick定時器也叫SysTick滴答定時器,屬于Cor
    的頭像 發表于 12-18 09:21 ?1259次閱讀
    <b class='flag-5'>CKS32F4xx</b><b class='flag-5'>系列</b>MCU SysTick<b class='flag-5'>定時器</b>的原理及使用方法

    STM32定時器詳解

    結合起來使用的話可以實現非常豐富的功能,可以測量輸入信號的脈沖寬度,可以生產輸出波形。定時器生產 PWM 控制電機狀態是工業控制普遍方法,這方面知識非常有必要深入了解。STM32F4xx系列
    發表于 08-18 06:17

    stm32f103zet6定時器詳解及應用

    大容量的STM32F103XX增強型系列產品包含最多2個高級控制定時器、4個普通定時器和2個基本定時器,以及2個看門狗
    發表于 11-10 13:26 ?2.4w次閱讀

    CKS32F4xx系列產品的定時器使用-基本特征和定時操作

    這一課我們將介紹CKS32F4XX系列產品的定時器使用,CKS32F4XX定時器功能十分強大,
    的頭像 發表于 05-19 09:18 ?865次閱讀
    <b class='flag-5'>CKS32F4xx</b><b class='flag-5'>系列</b>產品的<b class='flag-5'>定時器</b>使用-基本特征和<b class='flag-5'>定時</b>操作

    CKS32F4xx系列產品Timer的基本使用方法-定時器脈沖計數

    上一章我們介紹了CKS32F4的通用定時器定時操作的使用方法,這一章我們將向大家介紹通用定時器作為定時器脈沖計數的使用。在本章中,我們將用T
    的頭像 發表于 06-05 09:39 ?983次閱讀
    <b class='flag-5'>CKS32F4xx</b><b class='flag-5'>系列</b>產品Timer的基本使用方法-<b class='flag-5'>定時器</b>脈沖計數

    STM32各類系列定時器概覽

    本文檔:概述了 STM32F1xx、STM32F2xx、STM32F4xx、STM32L1xx 和 STM32F30/31/37/38x微控
    發表于 08-31 10:49 ?0次下載

    CKS32F4xx系列RNG功能設置

    ? MCU 微課堂 CKS32F4xx 系 列RNG功能 隨機數發生簡介 ? ? CKS32F4xx系列自帶了硬件隨機數發生
    的頭像 發表于 09-08 10:01 ?576次閱讀
    <b class='flag-5'>CKS32F4xx</b><b class='flag-5'>系列</b>RNG<b class='flag-5'>功能</b>設置

    CKS32F4xx系列DAC功能

    CKS32F4xx系列DAC功能
    的頭像 發表于 11-06 16:56 ?819次閱讀
    <b class='flag-5'>CKS32F4xx</b><b class='flag-5'>系列</b>DAC<b class='flag-5'>功能</b>

    CKS32F4xx系列產品Timer的基本使用方法-定時器脈沖計數

    CKS32F4xx系列產品Timer的基本使用方法-定時器脈沖計數
    的頭像 發表于 11-09 17:38 ?1019次閱讀
    <b class='flag-5'>CKS32F4xx</b><b class='flag-5'>系列</b>產品Timer的基本使用方法-<b class='flag-5'>定時器</b>脈沖計數

    CKS32F4xx系列產品Timer的基本使用方法-定時操作

    CKS32F4xx系列產品Timer的基本使用方法-定時操作
    的頭像 發表于 11-09 17:41 ?584次閱讀
    <b class='flag-5'>CKS32F4xx</b><b class='flag-5'>系列</b>產品Timer的基本使用方法-<b class='flag-5'>定時</b>操作

    CKS32F107xx系列時鐘系統具體配置方法講解

    上一章節對CKS32F107xx系列時鐘做了整體介紹,本章節以使用HSI內部高速時鐘為例對時鐘具體配置方法進行講解。
    的頭像 發表于 05-28 10:05 ?528次閱讀
    <b class='flag-5'>CKS32F107xx</b><b class='flag-5'>系列</b>時鐘系統具體配置方法講解

    CKS32F107xx系列MCU中ADC介紹

    CKS32F107xx系列產品提供2個12位的模擬/數字轉換(ADC),每個ADC共用多達16個外部通道,各通道的A/D轉換可以單次、連續、掃描或間斷模式執行。ADC的結果可以左對齊或右對齊方式存儲在16位數據寄存
    的頭像 發表于 06-22 11:04 ?628次閱讀

    CKS32F107xx系列MCU的GPIO內部硬件結構和工作模式

    16個引腳,如型號為CKS2F107VET6型號的芯片有GPIOA、GPIOB、GPIOC至GPIOE共5組GPIO,芯片一共100個引腳,其中GPIO就占了一大部分,所有的GPIO引腳都有基本的輸入輸出功能
    的頭像 發表于 07-22 09:23 ?616次閱讀
    <b class='flag-5'>CKS32F107xx</b><b class='flag-5'>系列</b>MCU的GPIO內部硬件結構和工作模式