暫不討論捕獲功能,簡化下面的描述方便閱讀理解。
--------------------------------------------------------------------------------
13.4.14 TIM1 比較暫存器 1(TIMx_CCR1)
CCR1[15:0]: 比較通道1的值 (Compare 1 value)
若CC1 通道配置為輸出:CCR1包含了裝入比較1暫存器的值(預裝載值)。
void TIM_SetCompare1(TIM_TypeDef* TIMx, u16 Compare1)
{
/* Check the parameters */
assert_param(IS_TIM_123458_PERIPH(TIMx));
/* Set the Capture Compare1 Register value */
TIMx->CCR1 = Compare1;
}
如果在TIMx_CCMR1暫存器(OC1PE位)中未選擇預裝載功能,寫入的數值會立即傳輸至當前暫存器中。
否則只有當更新事件()發生時,此預裝載值才傳輸至當前比較1暫存器中。
當前比較暫存器參與同計數器TIMx_CNT的比較,並在OC1埠上產生輸出訊號。
--------------------------------------------------------------------------------
13.4.10 TIM1 和TIM8 計數器(TIMx_CNT)
CNT[15:0]:計數器的值 (Counter value)
TIMx->CNT 是定時器配置好分頻、ARR之後自動按節拍加減的數值。
--------------------------------------------------------------------------------
13.4.12 TIM1 和TIM8 自動重灌載暫存器(TIMx_ARR)
自動重灌載的值 (Prescaler value) 位15:0
ARR包含了將要裝載入實際的自動重灌載暫存器的值。
詳細參考13.3.1節:有關ARR的更新和動作。當自動重灌載的值為空時,計數器不工作。
void TIM_SetAutoreload(TIM_TypeDef* TIMx, u16 Autoreload)
{
/* Check the parameters */
assert_param(IS_TIM_ALL_PERIPH(TIMx));
/* Set the Autoreload Register value */
TIMx->ARR = Autoreload;
}
--------------------------------------------------------------------------------
STM32 輸出方波的方法有兩種比較類似的,一個是PWM模式,一個是輸出比較模式。下面來看看這兩種模式的不同處在哪。
CCMRx暫存器
OCxM=000輸出保持電平
OCxM=001輸出有效電平
OCxM=010輸出無效電平
OCxM=011輸出翻轉電平
CCER暫存器
CCxP位
透過CCMR暫存器中的OCM位可以看出來這兩種模式的一點區別。
輸出比較模式下: CCR = CNT 時,翻轉輸出電平。
PWM模式下: CNT < CCR時輸出一種電平,CNT > CCR時輸出相反的電平。
透過圖片來直觀的看看這兩種模式的區別。
PWM模式下: ARR 決定輸出頻率 ,CCR決定輸出佔空比。
輸出比較模式下: ARR 決定輸出頻率 、CCRx 決定每個通道的初始相位。
兩種模式下最主要的差別就是CCR值代表的含義不一樣。PWM模式下CCR可以控制佔空比。輸出比較模式下CCR可以控制初始相位。
下面透過一個程式來對比一下這兩種模式
#include "pwm.h"
void TIM3_PWM_Init( u16 arr, u16 psc )
{
GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
RCC_APB1PeriphClockCmd( RCC_APB1Periph_TIM3, ENABLE ); //使能定時器3時鐘
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE ); //使能GPIO和AFIO複用功能模組時鐘
//設定TIM3 CH3
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init( GPIOB, &GPIO_InitStructure );
//初始化TIM3
TIM_TimeBaseInitStructure.TIM_Period = arr;
TIM_TimeBaseInitStructure.TIM_Prescaler = psc;
TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit( TIM3, &TIM_TimeBaseInitStructure );
//初始化TIM3_CH3 PWM 模式
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OC3Init( TIM3, &TIM_OCInitStructure );
//使能TIM3在CCR2上的預裝載暫存器
TIM_OC3PreloadConfig( TIM3, TIM_OCPreload_Enable );
//使能TIM3
TIM_Cmd( TIM3, ENABLE );
}
void TIM3_CMP_Init( u16 arr, u16 psc )
{
GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
RCC_APB1PeriphClockCmd( RCC_APB1Periph_TIM3, ENABLE ); //使能定時器3時鐘
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB , ENABLE ); //使能GPIOC時鐘
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
//初始化TIM3
TIM_TimeBaseInitStructure.TIM_Period = arr;
TIM_TimeBaseInitStructure.TIM_Prescaler = psc;
TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit( TIM3, &TIM_TimeBaseInitStructure );
//初始化TIM3_CH4 比較 模式 輸出比較翻轉觸發模式(當計數值與比較/捕獲暫存器值相同時,翻轉輸出引腳的電平)
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Toggle;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OC4Init( TIM3, &TIM_OCInitStructure );
TIM_OC4PreloadConfig( TIM3, TIM_OCPreload_Enable );
//使能TIM3
TIM_Cmd( TIM3, ENABLE );
}
輸出比較模式的佔空比為50%,是固定的不能修改佔空比。
透過上面實驗可以看到,這兩種模式的主要差別是。
PWM模式: ARR設定頻率,CCR設定佔空比,頻率和佔空比可以任意設定,起始相位不能設定。
輸出比較模式:ARR設定頻率,CCR設定相位,頻率和起始相位可以任意設定,佔空比不能設定。輸出頻率為理論計算值一半
————————————————
版權宣告:本文為博主原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處連結和本宣告。
原文連結:https://blog.csdn.net/qq_20222919/article/details/106564957