STM32-PWM

ピン配置

PWMを出力させることができるピンの一覧
8(PA8) 9(PA9) 10(PA10)
0(PA0) 1(PA1) 2(PA2) 3(PA3)
6(PA6) 7(PA7) 16(PB0) 17(PB1)
22(PB6) 23(PB7) 24(PB8) 25(PB9)

標準の周波数で動かす場合

標準の周波数(183Hz)で動かす場合、PWM出力したいピンをpinMode関数で指定します。pinModeでPWMモードに設定したピンは内部のモジュールが有効になり、PWM信号が出力されます。PWMのデューティ比の変更にはanalogWrite関数を使います。
標準の周波数で動かす場合65535にデューティ比をかけた値を指定します。
void setup(){
  pinMode(8,PWM);//8番ピンをPWMに設定
  analogWrite(8,65535 * 0.5);//デューティ比50%
}
void loop(){
}

周波数を変更して動かす場合

標準のPWM周波数は183Hz程度です。周波数を変更変更したい場合は対応するタイマーのsetPeriod関数を使います。
  • uint16 setPeriod(uint32 microseconds)
タイマーの周期を設定する関数です。内部でsetPrescaleFactor関数とsetOverflow関数
を呼び出しています。戻り値はanalogWrite関数で設定できる最大の値になります。
PWMピンとタイマーの関係
TIMER1 8(PA8) 9(PA9) 10(PA10)
TIMER2 0(PA0) 1(PA1) 2(PA2) 3(PA3)
TIMER3 6(PA6) 7(PA7) 16(PB0) 17(PB1)
TIMER4 22(PB6) 23(PB7) 24(PB8) 25(PB9)
デューティ比の変更にはanalogWrite関数を使います。
setPeriod関数かgetOverflow関数の戻り値にデューティ比をかけた値を使います。
何回も呼び出す場合はsetOverflow関数を推奨します。
HardwareTimer timer1(1);//8番ピンはTimer1と対応しているので初期化。
void setup(){
  timer1.setPeriod(1000 * 1000);//周波数を1Hzに設定
  pinMode(8,PWM);//8番ピンをPWMに設定
  analogWrite(8,timer1.getOverflow() * 0.5);//デューティ比50%
}
void loop(){
}
最終更新:2011年12月12日 00:47