MCU微課堂
CKS32F107xx TIM(四)
第四十八期 2024.11.22
定時(shí)器同步
CKS32F107xx系列部分定時(shí)器在內(nèi)部是相連的,可用于定時(shí)器同步或鏈接,方便用戶配置不同的同步模式,以便在電機(jī)控制、數(shù)據(jù)采集和PWM信號(hào)生成等應(yīng)用中,實(shí)現(xiàn)復(fù)雜的時(shí)間序列和多通道的同步操作。本節(jié)課我們將圍繞定時(shí)器同步功能概述展開,并以其中一種功能為例——將定時(shí)器2給定時(shí)器3當(dāng)預(yù)分頻器,最終級(jí)聯(lián)同步PWM輸出。
依據(jù)《CKS32F107xx參考手冊(cè)》的從模式控制寄存器相關(guān)章節(jié)得知,并非任意兩個(gè)定時(shí)器都能任意級(jí)聯(lián),硬件方面是固定的,若某個(gè)產(chǎn)品中沒有相應(yīng)的定時(shí)器,則對(duì)應(yīng)的觸發(fā)信號(hào)ITRx也不存在。如下表1所示。
表1 普通輸入捕獲概覽圖
如下圖1所示,TIM2更新事件的輸出信號(hào)TRGO1可以連接到TIM3的內(nèi)部觸發(fā)信號(hào)線ITR1(可由表1查閱得知),作為TIM3 的時(shí)鐘輸入。
圖1 主從定時(shí)器示例
要使TIM2和TIM3級(jí)聯(lián)同步輸出PWM波形,我們還會(huì)用到控制寄存器2(TIMx_CR2)和從模式控制寄存器(TIMx_SMCR)。接下來我們簡單介紹下這兩個(gè)寄存器。
首先是控制寄存器2(TIMx_CR2),該寄存器的各位描述如下圖所示:
圖2 TIMx_CR2
關(guān)于該寄存器的詳細(xì)說明,請(qǐng)參照《CKS32F107xx參考手冊(cè)》。這里我們用到的是主模式選擇位域MMS,此部分由3位組成。共有8種模式可供選擇,因?yàn)槲覀兪褂玫氖歉履J?,所以必須設(shè)置為010。
接下來我們介紹從模式控制寄存器(TIMx_SMCR),該寄存器的各位描述如下圖所示:
圖3 TIMx_SMCR
在該寄存器中,我們用到了SMS和TS位域,均由3位組成,各有8種不同模式組合。其中SMS控制從模式選擇,這里我們配置成100,選擇門控模式,確保從定時(shí)器的開始和結(jié)束都是由主定時(shí)器的輸出信號(hào)控制。TS控制觸發(fā)選擇,根據(jù)表1描述得知,我們必須配置成001。
定時(shí)器級(jí)聯(lián)同步輸出PWM配置操作
通過上述對(duì)定時(shí)器功能的描述,下面我們要實(shí)現(xiàn)TIM2發(fā)生事件更新時(shí)發(fā)送觸發(fā)信號(hào)驅(qū)動(dòng)TIM3計(jì)數(shù),并使能兩個(gè)定時(shí)器在PWM1模式下由定時(shí)器通道1輸出PWM波形。編程的要點(diǎn)如下所示。
1、配置PA0和PA6引腳為復(fù)用輸出功能
我們調(diào)用如下函數(shù)實(shí)現(xiàn):
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配置為主定時(shí)器
TIM2配置為PWM1模式輸出,使能主從模式,并選擇更新事件作為觸發(fā)輸出,主要代碼如下:
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預(yù)分頻為8,因此主定時(shí)器TIM2計(jì)數(shù)器時(shí)鐘頻率為8MHz頻率,則TIM2頻率=TIM2計(jì)數(shù)器時(shí)鐘/(TIM2_Period + 1)=100KHz,占空比為TIM2_CCR1/(TIM2_ARR + 1) = 50%。
3、TIM3配置為從定時(shí)器
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);
}
從上述代碼可得知,從定時(shí)器TIM3頻率為(TIM2 frequency)/ (TIM3 period + 1)=20kHz,占空比為TIM3_CCR1/(TIM3_ARR + 1) = 40%。
4、主函數(shù)
初始化主從定時(shí)器,最終實(shí)現(xiàn)級(jí)聯(lián)同步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引腳的波形(注意共地);下載程序,調(diào)節(jié)示波器,可在示波器看到有PWM波形輸出,如下圖4所示:
圖4PWM波形輸出
-
電機(jī)控制
+關(guān)注
關(guān)注
3562文章
1939瀏覽量
270841 -
寄存器
+關(guān)注
關(guān)注
31文章
5403瀏覽量
122947 -
PWM
+關(guān)注
關(guān)注
116文章
5324瀏覽量
217577 -
定時(shí)器
+關(guān)注
關(guān)注
23文章
3274瀏覽量
116896
原文標(biāo)題:MCU微課堂|CKS32F107xx TIM(四)
文章出處:【微信號(hào):中科芯MCU,微信公眾號(hào):中科芯MCU】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
基于CKS32F4xx系列的MCU互補(bǔ)PWM方案

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

STM32定時(shí)器詳解
CKS32F4xx系列產(chǎn)品的定時(shí)器使用-基本特征和定時(shí)操作

CKS32F4xx系列產(chǎn)品Timer的基本使用方法-定時(shí)器脈沖計(jì)數(shù)

STM32各類系列定時(shí)器概覽
CKS32F4xx系列RNG功能設(shè)置

CKS32F4xx系列產(chǎn)品Timer的基本使用方法-定時(shí)器脈沖計(jì)數(shù)

CKS32F107xx系列時(shí)鐘系統(tǒng)具體配置方法講解

CKS32F107xx系列MCU中ADC介紹
CKS32F107xx系列MCU的GPIO內(nèi)部硬件結(jié)構(gòu)和工作模式

評(píng)論