// 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; //(残り) } }