STM32 PWM作業プロセス
例としてチャンネル 1 を取り上げます。
CCR1: キャプチャコンペア(値)レジスタ(x=1,2,3,4): コンペア値を設定します。
CCMR1: OC1M[2:0] ビット:
PWM モードの場合、PWM モード 1 [110] または PWM モード 2 [111] を設定するために使用されます。
CCER: CC1P ビット: 入力/キャプチャ 1 出力極性。0:Highレベルが有効、1:Lowレベルが有効。
CCER: CC1E ビット: 入力/キャプチャ 1 出力イネーブル。0: オフ、1: オン。
PWMモード1とPWMモード2
void TIM_OC2PreloadConfig( TIM_TypeDef * TIMx , uint16_t TIM_OCPreload );
void TIM_ARRPreloadConfig ( TIM_TypeDef * TIMx , FunctionalState NewState );
STM32タイマ3出力チャネル端子
PWM出力ライブラリ関数
void TIM_OCxInit ( TIM_TypeDef * TIMx , TIM_OCInitTypeDef * TIM_OCInitStruct );
比較値関数を設定します。
void TIM_SetCompareX ( TIM_TypeDef * TIMx , uint16_t Compare2);
出力比較のプリロードを有効にします。
void TIM_OC2PreloadConfig( TIM_TypeDef * TIMx , uint16_t TIM_OCPreload );
自動リロードを有効にするプリロード レジスタ イネーブル ビット:
void TIM_ARRPreloadConfig ( TIM_TypeDef * TIMx , FunctionalState NewState );
PWM出力実験:
タイマ 3 の PWM 機能を使用して、可変デューティ比の PWM 波を出力し、LED 照明を駆動します。これにより、LED [PB5] の明るさが暗いから明るい、明るいから暗いなどと変化します。
PWM 出力設定手順:
タイマー 3 クロックを有効にする: RCC_APB1PeriphClockCmd();
GPIOB クロックを有効にする: RCC_APB2PeriphClockCmd();
②IOポートを多重機能出力として初期化します 。関数: GPIO_Init ();
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP ;
③ここでは PB5をタイマーのPWM出力端子として使用するので、設定を再マップする必要があります。
したがって、AFIO クロックをオンにする必要があります。リマッピングも設定します。
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
GPIO_PinRemapConfig (GPIO_PartialRemap_TIM3、有効);
④初期化 タイマー:ARR、PSC等:TIM_TimeBaseInit ();
⑤ 出力比較パラメータの初期化: TIM_OC2Init();
⑥ プリロードレジスタを有効にする: TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable );
⑦ タイマーを有効にします。TIM_Cmd ();
⑧ 比較値 CCRx を継続的に変更して、さまざまなデューティ サイクル効果を実現します。TIM_SetCompare2();
重要なコード:
タイマー.c:
main.c:
プログラムをダウンロードすると、赤色のライトが暗いから明るい、明るいから暗いへと繰り返します。
要約する
PWM の原理や基本的な使い方については、大まかに理解しているとしか言えませんが、PWM 出力は後段でよく使うことになるので、この部分は学習後に改めて内容を整理したいと思います。その後の内容も!