Skip to content

Instantly share code, notes, and snippets.

@Tamakichi
Created February 7, 2017 06:32
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Tamakichi/0be432bf4fc37b1649125778048f03d5 to your computer and use it in GitHub Desktop.
Save Tamakichi/0be432bf4fc37b1649125778048f03d5 to your computer and use it in GitHub Desktop.
Arduino STM32 PWM制御中のGPIO出力の実験
/*
* Arduino STM32 PWM制御中のGPIO出力の実験
* 2017/02/07 by たま吉さん
*
* GPIOピンをPWMに設定した場合、digitalWite()による出力を行っても出力は変化しない
* GPIOピンをOUTPUTに設定した場合、TimerによるPWM出力は変化しなし。
* PWMとGPIO出力を併用する場合は、pinModeを随時切り替えばよい。
*
* ・HardwareTimer
* http://docs.leaflabs.com/static.leaflabs.com/pub/leaflabs/maple-docs/latest/lang/api/hardwaretimer.html
* ・APIs timer.h
* http://docs.leaflabs.com/static.leaflabs.com/pub/leaflabs/maple-docs/latest/libmaple/api/timer.html
*
*/
#include <libmaple/timer.h>
#define LED_PIN PB9 // TIMER4 4CH用出力ピン
// LED点灯
void ledOn() {
pinMode(LED_PIN, OUTPUT);
digitalWrite(LED_PIN, HIGH);
delay(500);
pinMode(LED_PIN, PWM);
}
void ledOff() {
pinMode(LED_PIN, OUTPUT);
digitalWrite(LED_PIN, LOW);
delay(500);
pinMode(LED_PIN, PWM);
}
void setup() {
Serial.begin(115200);
//while (!Serial.isConnected()) delay(100);
pinMode(LED_PIN, PWM);
ledOff();
// 初期化 4秒でリロード
timer_pause(TIMER4);
timer_init(TIMER4);
timer_set_prescaler(TIMER4, 10000);
timer_set_reload(TIMER4, 7200*4);
// 4秒周期でLEDを0.25秒間隔で点灯させる
timer_set_mode(TIMER4,4, TIMER_PWM);
timer_oc_set_mode(TIMER4,4,TIMER_OC_MODE_PWM_1,TIMER_OC_PE|TIMER_OC_CE|TIMER_OC_FE);
timer_set_compare(TIMER4,4,7200/4);
timer_cc_enable(TIMER4,4);
//timer_cc_set_pol(TIMER4,4,0);
// 割り込み実行
timer_generate_update(TIMER4);
timer_resume(TIMER4);
}
void loop() {
if (Serial.available()) {
uint8_t c = Serial.read();
if (c == '1') {
ledOn();
}
if (c == '0') {
ledOff();
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment