「回路系技術資料/STM32」の編集履歴(バックアップ)一覧はこちら

回路系技術資料/STM32 - (2011/11/23 (水) 16:08:46) の1つ前との変更点

追加された行は緑色になります。

削除された行は赤色になります。

*STM32 **STM32VLDISCOVERY STM32VLDISCOVERYとはSTマイクロ社の1000円ちょっとで買える学習用基板のことです。 機能としてはPWM15個、UART3個、SPI2個、タイマー9個(その他のモノも合わせると12個)と高専ロボコンで使うには十分すぎるくらいです。 **ピン配置 基板上にはリセットスイッチ、ユーザー用スイッチ、LED(赤、青)が載っていて 簡単な動作確認ができます。 以下は参考用のピン配置(テケトーに作ったので少し見にくいかも・・・) #ref(ピン配置.png) **STM32VLDISCOVERYをArduinoっぽく使うメモ 「Maple: STM32VLDiscoveryをMaple IDEで動かす」 http://avr.paslog.jp/article/2205201.html こちらのサイトを参考にしてMapleIDEで動かすようにしてみました。 (MapleとはArduino互換のSTM32を使った製品のことらしいです。) ***用意するもの(ハード) STM32VLDISCOVERY-秋月(1100円) USB-UART変換基板(3.3V品を使ってください。) (※なぜかcomポートが存在しないとエラー吐かれるようなのでUARTの実験を行わない場合でもとりあえず繋げておいたほうが良いようです) ***用意するもの(ソフト) 「STM32 ST-LINK utility」 http://www.st.com/internet/evalboard/product/219866.jsp 「ActivePython-2.6.7.20-win32-x86」(これは最新版を使っても良いと思います。) http://www.activestate.com/activepython/downloads/thank-you?dl=http://downloads.activestate.com/ActivePython/releases/2.6.7.20/ActivePython-2.6.7.20-win32-x86.msi 「maple-ide-0.0.11-windowsxp32-Ver2.rar」(パスワード:STM32) http://www1.axfc.net/uploader/P/so/99861 参考のサイトの手順+UART2,3の不具合、setPeriod関数のバグを取り除いてあります。 ***LED点滅までの流れ STM32 ST-LINK utilityとActivePython-2.6.7.20-win32-x86をインストーラに従ってインストール ↓ mapleIDEを解凍 ↓ STM32VLDISCOVERYとUSB-UART変換基板をパソコンに接続 (※STM32VLDISCOVERYはディスクとして認識されます。) ↓ maple-ide.exeを起動 ↓ メニュー->File->Examples->Maple Sketches->BlinkTestSTM32VLD2を選択 #ref(LEDテスト.png) ↓ メニュー->Tools->Board->STM32VLD to FLASHを選択 #ref(ボード選択.png) ↓ アップロードボタンを押して転送 #ref(アップロード.png) ↓ 基板のLEDが点滅すれば成功! **UARTの使い方 STM32VLDISCOVERYにはUARTが3つ搭載されています。 Arduinoであれば基板上にUART-USB変換ICが載っているので、何も接続せずに UARTのテストが出来るのですが、STM32VLDISCOVERYには載っていないの自分で USB-UART変換基板に接続する必要があります。 今回はXBeeエクスプローラUSB基板をSTM32VLDISCOVERYと接続してテストしました。 写真のようにジャンパ線で接続します。 #ref(IMG_1819-2.jpg) 次に以下のようなスケッチを書きます。 簡単なループバックテストプログラムになっています。 #ref(UARTテスト.png) スケッチが終わったら、プログラムをアップロードしたあと、UART-USB基板のcomポートを選択します。 #ref(シリアルポート選択.png) 最後にメニューからSerialMonitorを選んでtestを送信して帰ってくるか確認します。 #ref(シリアルポート.png) *PWM **周波数の変更 標準の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(){ } *関数 -void setup() 一番初めに実行される関数です。この中に初期化の処理を記述します。 -void loop() setup関数の実行が終わったら、この関数が繰り返し呼ばれます。 メイン処理はここに書きます。 -void pinMode(ピン番号、設定モード) ピンの入出力、モードの設定を行います。 ピン番号はこのページの上部の図を参考にしてください。 設定できるモードは以下の通りです。 OUTPUT 通常の出力モードです。 OUTPUT_OPEN_DRAIN オープンドレインの出力モードです。 INPUT 通常の入力モードです。 INPUT_ANALOG アナログ入力(ADC)を使う場合の入力モードです。 INPUT_PULLUP プルアップを行う入力モードです。 INPUT_PULLDOWN プルダウンを行う入力モードです。 INPUT_FLOATING INPUTと同様です。 PWM PWM出力を行うモードです。PWMの出力ができるピンのみで使えます。 PWM_OPEN_DRAIN PWM出力をオープンドレインで行うモードです。PWMの出力ができるピンのみで使えます。 -uint16 HardwareTimer::setPeriod(uint32 microseconds) タイマーの周期を設定する関数です。内部でsetPrescaleFactor関数とsetOverflow関数 を呼び出しています。戻り値はanalogWrite関数で設定できる最大の値になります。 限界は24MHzのSTM32マイコンの場合178,951,508くらい。 -uint16 HardwareTimer::getOverflow() タイマーがオーバーフローする値を取得します。0-65535 -uint16 HardwareTimer::setOverflow(uint16 val) タイマーがオーバフローする値を設定します。0-65535 *[[回路系技術資料/STM32私的メモ]]
*STM32 **STM32VLDISCOVERY STM32VLDISCOVERYとはSTマイクロ社の1000円ちょっとで買える学習用基板のことです。 機能としてはPWM15個、UART3個、SPI2個、タイマー9個(その他のモノも合わせると12個)と高専ロボコンで使うには十分すぎるくらいです。 **ピン配置 基板上にはリセットスイッチ、ユーザー用スイッチ、LED(赤、青)が載っていて 簡単な動作確認ができます。 以下は参考用のピン配置(テケトーに作ったので少し見にくいかも・・・) #ref(ピン配置.png) **STM32VLDISCOVERYをArduinoっぽく使うメモ 「Maple: STM32VLDiscoveryをMaple IDEで動かす」 http://avr.paslog.jp/article/2205201.html こちらのサイトを参考にしてMapleIDEで動かすようにしてみました。 (MapleとはArduino互換のSTM32を使った製品のことらしいです。) ***用意するもの(ハード) STM32VLDISCOVERY-秋月(1100円) USB-UART変換基板(3.3V品を使ってください。) (※なぜかcomポートが存在しないとエラー吐かれるようなのでUARTの実験を行わない場合でもとりあえず繋げておいたほうが良いようです) ***用意するもの(ソフト) 「STM32 ST-LINK utility」 http://www.st.com/internet/evalboard/product/219866.jsp 「ActivePython-2.6.7.20-win32-x86」(これは最新版を使っても良いと思います。) http://www.activestate.com/activepython/downloads/thank-you?dl=http://downloads.activestate.com/ActivePython/releases/2.6.7.20/ActivePython-2.6.7.20-win32-x86.msi 「maple-ide-0.0.11-windowsxp32-Ver2.rar」(パスワード:STM32) http://www1.axfc.net/uploader/P/so/99861 参考のサイトの手順+UART2,3の不具合、setPeriod関数のバグを取り除いてあります。 ***LED点滅までの流れ STM32 ST-LINK utilityとActivePython-2.6.7.20-win32-x86をインストーラに従ってインストール ↓ mapleIDEを解凍 ↓ STM32VLDISCOVERYとUSB-UART変換基板をパソコンに接続 (※STM32VLDISCOVERYはディスクとして認識されます。) ↓ maple-ide.exeを起動 ↓ メニュー->File->Examples->Maple Sketches->BlinkTestSTM32VLD2を選択 #ref(LEDテスト.png) ↓ メニュー->Tools->Board->STM32VLD to FLASHを選択 #ref(ボード選択.png) ↓ アップロードボタンを押して転送 #ref(アップロード.png) ↓ 基板のLEDが点滅すれば成功! **UARTの使い方 STM32VLDISCOVERYにはUARTが3つ搭載されています。 Arduinoであれば基板上にUART-USB変換ICが載っているので、何も接続せずに UARTのテストが出来るのですが、STM32VLDISCOVERYには載っていないの自分で USB-UART変換基板に接続する必要があります。 今回はXBeeエクスプローラUSB基板をSTM32VLDISCOVERYと接続してテストしました。 写真のようにジャンパ線で接続します。 #ref(IMG_1819-2.jpg) 次に以下のようなスケッチを書きます。 簡単なループバックテストプログラムになっています。 #ref(UARTテスト.png) スケッチが終わったら、プログラムをアップロードしたあと、UART-USB基板のcomポートを選択します。 #ref(シリアルポート選択.png) 最後にメニューからSerialMonitorを選んでtestを送信して帰ってくるか確認します。 #ref(シリアルポート.png) *PWM **周波数の変更 標準の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(){ } *[[回路系技術資料/STM32私的メモ]]

表示オプション

横に並べて表示:
変化行の前後のみ表示: