STM32の学習PWM出力

// TIM3 PWM部分的に初期化
 // PWM出力の初期化
 // ARR:自動リロード値
 // PSC:クロックプリスケーラ番号
ボイドTIM3_PWM_Init(ARRのU16、U16 PSC)
{ 
GPIO_InitTypeDef GPIO_InitStructure; 
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; 
TIM_OCInitTypeDef TIM_OCInitStructure; 
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3 、)ENABLE; // ①タイマ3クロック(変化する)を有効 
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO、ENABLE); // ①有効GPIOと事実ゆえafio多重化機能クロック(変化する) 
GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3、ENABLE); //を② (プラスを再マップする必要があります)TIM3_CH2-> PB5を再マッピング
//多重出力、GPIOB.5 TIM3 CH2の出力PWMパルス波形、B5 GPIOを初期化する端子 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; // TIM_CH2(変化) GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; // 多重化プッシュプル出力 GPIO_InitStructure = .GPIO_Speed GPIO_Speed_50MHz; GPIO_Init(GPIOB、&GPIO_InitStructure); // ①GPIO(変化)を初期化 // 初期化TIM3の TIM_TimeBaseStructure.TIM_Period = ARR; // 設定オートリロードサイクルにおける値 TIM_TimeBaseStructure.TIM_Prescaler = PSC; // 設定分離前周波数値 TIM_TimeBaseStructure.TIM_ClockDivision = 0 ; //は、クロック分周設定:TDTS = Tck_timを = TIM_CounterMode_Up TIM_TimeBaseStructure.TIM_CounterMode; // TIMアップカウントモード TIM_TimeBaseInit(TIM3、&TIM_TimeBaseStructure); // ③初期TIMx(変化する) // 初期化TIM3チャンネル2 PWMモード TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; // 選択されたPWMモード2 TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; // コンパレータ出力イネーブル TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; // 出力極性ハイ TIM_OC2Init(TIM3、&TIM_OCInitStructure); // ④初期化周辺機器TIM3のOC2(OCX変更及びTIMx) TIM_OC2PreloadConfig(TIM3、TIM_OCPreload_Enable); // プリロードレジスタ(OCX変更とTIMx)を有効 (ENABLE、TIM3)TIM_Cmdを//⑤TIM3(変化)を有効 }
ボイドTIM3_Int_Init(ARRのU16、U16 PSC)
{ 
 TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; 
NVIC_InitTypeDef NVIC_InitStructure; 
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3、ENABLE); // ①TIM3クロック(変化)を有効
 
// タイマ初期TIM3 
TIM_TimeBaseStructure.TIM_Period = ARRを; //は、自動設定しますロードサイクルレジスタ値 
TIM_TimeBaseStructure.TIM_Prescaler = PSC; // クロックプリスケーラ値の分周設定 
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; // 設定されたクロック分周 
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; // TIMがカウントアップ 
TIM_TimeBaseInit(TIM3、&TIM_TimeBaseStructure)を; // ②初期TIM3(変化します)
TIM_ITConfig(TIM3、TIM_IT_Update、ENABLE); // ③割り込み更新(変更)を可能
 // 割り込み優先NVICが設けられ 
、NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn // TIM3割り込み(変化) 
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0 ; // プリエンプティブ優先度0をレベル 
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3 ; // 順序優先度3。 
NVIC_InitStructure.NVIC_IRQChannelCmdイネーブル=; // IRQチャネルがイネーブルされ 
NVIC_Init(&NVIC_InitStructureを); // ④初期NVICレジスタ 
TIM_Cmd(TIM3、イネーブル); // ⑤有効TIM3(変化する)
}
 // タイマ3割り込みサービスルーチン⑥ 
のボイドTIM3_IRQHandler(ボイド// TIM3割り込みを(変更)
{
 IF(!TIM_GetITStatus(TIM3、TIM_IT_Update)がRESETを=)// TIM3割り込みをチェック起こるかを更新(変更)
{ 
TIM_ClearITPendingBit(TIM3、TIM_IT_Update); // 割り込みクリア更新TIM3フラグ(変化する) 
LEDL =!LEDL; //(残り)
} 
}

 

おすすめ

転載: www.cnblogs.com/jdzhang1995/p/11007433.html
おすすめ