*STM32 [[回路系技術資料/STM32サンプル]] サンプルと関数一覧はこちらへ。 [[回路系技術資料/STM32私的メモ]] MapleIDEの修正点、私的メモはこちらへ。 **STM32VLDISCOVERY STM32VLDISCOVERYとはSTマイクロ社の1000円ちょっとで買える学習用基板のことです。 機能としてはPWM15個、UART3個、SPI2個、タイマー9個(その他のモノも合わせると12個)と高専ロボコンで使うには十分すぎるくらいです。 **ピン配置 基板上にはリセットスイッチ、ユーザー用スイッチ、LED(赤、青)が載っていて 簡単な動作確認ができます。 以下は参考用のピン配置(テケトーに作ったので少し見にくいかも・・・) 右側はPB5以外5Vトレラント 下側は全部5Vトレラント 左側はトレラントではないピンが多いのでデータシートで確認してください。 #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の使い方>回路系技術資料/STM32UART]] *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サンプル]] サンプルと関数一覧はこちらへ。 *[[回路系技術資料/STM32私的メモ]] MapleIDEの修正点、私的メモはこちらへ。