「回路系技術資料/STM32サンプル」の編集履歴(バックアップ)一覧はこちら
回路系技術資料/STM32サンプル - (2011/11/23 (水) 15:53:18) の1つ前との変更点
追加された行は緑色になります。
削除された行は赤色になります。
*STM32サンプルプログラム
**LED点滅
基板上のLEDを点滅させるスケッチです。
int ledPin1 = 40; // LED connected to PC8 (LED4 blue)
int ledPin2 = 41; // LED connected to PC9 (LED3 green)
void setup(){
pinMode(ledPin1, OUTPUT);
pinMode(ledPin2, OUTPUT);
}
void loop(){
digitalWrite(ledPin1, HIGH); // set the LED on
digitalWrite(ledPin2, HIGH); // set the LED on
delay(100); // wait for a second
digitalWrite(ledPin1, LOW); // set the LED off
digitalWrite(ledPin2, LOW); // set the LED off
delay(100); // wait for a second
}
**UARTループバック
UART3に送られてきたデータをそのまま返信するスケッチです。
void setup()[
Serial3.begin(9600);
}
void loop(){
if(Serial3.available()){
Serial3.write(Serial3.read());
}
}
**タイマー
#define LED_RATE 5000000//5秒間隔
HardwareTimer timer1(1);
void setup() {
pinMode(BOARD_LED_PIN, OUTPUT);
timer1.pause();
timer1.setPeriod(LED_RATE);//周期を5秒に設定
timer1.setChannel1Mode(TIMER_OUTPUT_COMPARE);
//タイマー1のチャンネル1をコンパレータモードに設定
timer1.setCompare(TIMER_CH1, 1);
//タイマーをresumeした瞬間に1回目の割り込みが入る。
//timer1.setCompare(TIMER_CH1, timer1.getOverflow());
//タイマーをresumeして5秒に1回目の割り込みが入る。
//timer1.setCompare(TIMER_CH1, timer1.getOverflow() * 0.5);
//タイマーをresumeして2.5秒に1回目の割り込みが入る。
timer1.attachCompare1Interrupt(handler_led);
timer1.refresh();
timer1.resume();
}
void loop() {
}
void handler_led(void) {//
toggleLED();//基板上の青LEDを点滅
}
**PWM
8番ピン(PA8)を1Hzで点滅させるスケッチです。
タイマー1の周期を変更しているので、タイマー1を使う他のプログラムと組み合わせて使う場合は注意してください。
HardwareTimer timer1(1);
void setup(){
timer1.setPeriod(1000 * 1000);//1Hzに設定
pinMode(8,PWM);//8番ピンをPWMに設定
analogWrite(8,timer1.getOverflow() * 0.5);//50%
}
void loop(){
}
また、PWM出力させるピンを変更する場合以下の表を参考にしてください。
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)|
*STM32サンプルプログラム
**LED点滅
基板上のLEDを点滅させるスケッチです。
int ledPin1 = 40; // LED connected to PC8 (LED4 blue)
int ledPin2 = 41; // LED connected to PC9 (LED3 green)
void setup(){
pinMode(ledPin1, OUTPUT);
pinMode(ledPin2, OUTPUT);
}
void loop(){
digitalWrite(ledPin1, HIGH); // set the LED on
digitalWrite(ledPin2, HIGH); // set the LED on
delay(100); // wait for a second
digitalWrite(ledPin1, LOW); // set the LED off
digitalWrite(ledPin2, LOW); // set the LED off
delay(100); // wait for a second
}
**UARTループバック
UART3に送られてきたデータをそのまま返信するスケッチです。
void setup()[
Serial3.begin(9600);
}
void loop(){
if(Serial3.available()){
Serial3.write(Serial3.read());
}
}
**タイマー
#define LED_RATE 5000000//5秒間隔
HardwareTimer timer1(1);
void setup() {
pinMode(BOARD_LED_PIN, OUTPUT);
timer1.pause();
timer1.setPeriod(LED_RATE);//周期を5秒に設定
timer1.setChannel1Mode(TIMER_OUTPUT_COMPARE);
//タイマー1のチャンネル1をコンパレータモードに設定
timer1.setCompare(TIMER_CH1, 1);
//タイマーをresumeした瞬間に1回目の割り込みが入る。
//timer1.setCompare(TIMER_CH1, timer1.getOverflow());
//タイマーをresumeして5秒に1回目の割り込みが入る。
//timer1.setCompare(TIMER_CH1, timer1.getOverflow() * 0.5);
//タイマーをresumeして2.5秒に1回目の割り込みが入る。
timer1.attachCompare1Interrupt(handler_led);
timer1.refresh();
timer1.resume();
}
void loop() {
}
void handler_led(void) {//
toggleLED();//基板上の青LEDを点滅
}
**PWM
8番ピン(PA8)を1Hzで点滅させるスケッチです。
タイマー1の周期を変更しているので、タイマー1を使う他のプログラムと組み合わせて使う場合は注意してください。
HardwareTimer timer1(1);
void setup(){
timer1.setPeriod(1000 * 1000);//1Hzに設定
pinMode(8,PWM);//8番ピンをPWMに設定
analogWrite(8,timer1.getOverflow() * 0.5);//50%
}
void loop(){
}
また、PWM出力させるピンを変更する場合以下の表を参考にしてください。
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)|