私は今NUCLEO-F446REのTIMレジスタを操作してPWM出力を作り、ボード上のLED(PA-5)の明るさを調整するコードを書いています。リファレンスを見ながら以下のように出力ピンとタイマの設定をしました。出力比較モードにてCCR1レジスタとCNTレジスタの値を比較してPWM信号を作成するまでは分かるのですが、その作られた信号がどのピンから出力されるのかが分かりません。どのようにレジスタを設定すれば、PA-5ピンへPWM信号が出力されるのでしょうか。
タイマはTIM2を用いています。CNTは1秒周期でARRに到達して0に戻るように設定しました。
また、CCR1レジスタの値はARRの50%としています。
C
1#include "stm32f4xx.h" 2 3int main(void){ 4 RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN; // PA-5ピンへのクロック供給の有効化 5 RCC->APB1ENR |= RCC_APB1ENR_TIM2EN; //TIM2へのクロック供給の有効化 6 7 /*GPIOピン(PA-5)の設定*/ 8 GPIOA->MODER &= (~GPIO_MODER_MODER5); 9 GPIOA->MODER |= (GPIO_MODE_OUTPUT_PP << GPIO_MODER_MODER5_Pos); 10 11 /*Timerの設定*/ 12 //TIM2のclockは16MHz...16000000回のクロックで1秒 13 TIM2->CR1 |= TIM_CR1_CEN;//CounterをENableにする 14 TIM2->DIER |= TIM_DIER_CC1IE;//Capture/Compare1InturruptをEnableにする 15 TIM2->ARR = 1599;//AutoReloadRegisterに1599を設定(0~1599=1600カウント) 16 TIM2->PSC = 9999;//PreSCalerに10000を設定(0~9999=10000クロックで1カウント) 17 TIM2->CCR1 = 799;//Capture/CounterRegister1に799を設定(0~799=800カウント)ARRの50% 18 19 /*main program*/ 20 while(1){ 21 22 } 23 return 0; 24}