ご注文はSTM32の開発ですか??
~Is the order a development of STM32 ??~
目次
• 自己紹介
• STM32の開発
• なぜSTM32CubeHALなのか
• 高機能ペリフェラル例、様々なミドルウェア
• STM32開発のはじめ方
• Lチカしてみよう
• ちょっと便利な機能
• CANをCubeHALで使ってみる
• CAN-FDをCubeHALで使ってみる
• STM32G4について
• ブログの紹介
自己紹介
• ロボカップジュニア(2006~2015)
• 静岡大学ロボットファクトリー所属 電装班
• レスキューロボットコンテスト レスキュー工学大賞 他4件
• ロボットグランプリ 大道芸部門 準優勝、ランサー 技術賞
• 計測自動制御学会 SI2018 優秀講演賞
• ロボカップ小型リーグ(SSL) “ibis”
• ロボマスター “Setouchi Salamander“
• ベンチャー企業(C-Point)にて電動バイク開発
STM32の開発
• STM32CubeIDE
なぜ、STM32Cube・HALなのか
• GUIでピン設定、クロック設定を行い、
HALのひな型を吐いてくれる
→GUIでピンを決められるのでミスが少
ない&ソフト的にどこに使うかわかっ
たうえで回路が引ける
• STM32のすべての機能を使え、低レイヤ
まで触ることができる
→高機能ペリフェラルやメモリ管理が
しっかりできる。しかもポチポチだけで
→mbedではない機能もたくさん使える
高機能ペリフェラル例1(DMA)
• DMA(のダイレクト・メモリ・アクセス・コントローラ)
CPUに負荷をかけることなく、ペリフェラルおよびメモリ間 の
効率のよいデータ転送に対応できる
→感覚的にはDMAでペリフェ
ラルを動かすと入力であれば
勝手に配列にデータが入って
いて、出力であれば配列に
データを入れておけば勝手に
転送しておいてくれる感じ
使用例:UART、ADC、I2C
出典:
https://www.st.com/content/ccc/resource/sales_and_marketing/presentation/product_presentation/62/aa/eb/62/d5/a9/4b/bc/07.STM32L4-System-
Direct%20Memory%20Access%20(DMA)%20Final_JP.pdf/files/07.STM32L4-System-
Direct%20Memory%20Access%20(DMA)%20Final_JP.pdf/jcr:content/translations/en.07.STM32L4-System-Direct%20Memory%20Access%20(DMA)%20Final_JP.pdf
高機能ペリフェラル例2
(ARTアクセラレータ)
TCMバス経由でのフラッシュの読み出しウェイトを事実上0にす
るキャッシュ群みたいなもの
→実際flashの速度って80MHz程度が限界なので高速動作でき
ない。
→flashから大量に先読みして
バッファする
出典:https://eda360insider.files.wordpress.com/2011/09/stm32-f4-art-accelerator-block-diagram.jpg
高機能ペリフェラル例3
(タイマー)
• PWM
• エンコーダー入力
出典:https://www.stmicroelectronics.com.cn/content/ccc/resource/sales_and_marketing/presentation/product_presentation/group0/31/ad/bf/68/28/3b/46/fc/43.General-purpose%20timers%20(GPTIM)/files/43.STM32L4-WDG_TIMERS-
General%20Purpose%20Timer%20(GPTIM)%20Final_JP.pdf/jcr:content/translations/en.43.STM32L4-WDG_TIMERS-General%20Purpose%20Timer%20(GPTIM)%20Final_JP.pdf
さまざまなミドルウェアが使える
• LWIP:EthernetでIP通信するためのミドルウェア
• FatFs:ファイル操作
• FreeRTOS:組み込みシステム用のオープンソース
のリアルタイムオペレーティングシス
テム
• USB:USBいじるためのやつ(使ったことない)
出典:http://elm-chan.org/docs/fat.html
出典:https://es.wikipedia.org/wiki/FreeRTOS
STM32開発のはじめ方
①https://www.st.com/ja/development-tools/stm32cubeide.html
からSTM32CubeIDEをダウンロード&インストール
以上!!!!!!!!!
(まじで落としてインストールするだけで使える)
メリット :開発環境が一つにまとまってよい。STの公式サポート。
C++に対応した。
デメリット:ペリフェラル設定画面(以前のCubeMX画面)が1個までしか開けな
くて見比べながらとかができない。
その他の開発環境
• TureStudio+CubeMX:ちょっと前の最強の組み合わせ(個人的)
macだと動かないらしい(Eclipseなのにね)
• CoCoX:使ったことないけど中華製だけあってなんかびみょかった
• SW4STM32:STの有志社員が作ったからバグだらけ
• Keil:フリー版だと書けるサイズに上限があって使えない。
有料版買えた値段じゃない。高すぎ。けどバグはほぼない。
手始めにLチカしてみよう
ここでC++プロジェクトにして
おけば後で.cppに変えれる
ピン設定
• GPIOC,GPIO_PIN13:INPUT
(USERボタン)
• GPIOA,GPIO_PIN5:OUTPUT
(USER_LED)
• SYS →SWD
• RCC → BYPASS or Crystal
BYPASS:ST-Linkに載ってる水晶
からクロックをもらう
Crystal:外部水晶からクロックを
もらう
クロック設定・ジェネレート
内部、外部
選択
ベースクロック指定
Ctr+Sでジェネレートできる
コーディング
if(HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_13)){ //ボタン状態取得
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5,GPIO_PIN_SET); //ボタンが押されてないときLDE点灯
}
else{
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5,GPIO_PIN_RESET); //ボタンが押されたらLED消灯
}
Rename Resourceで.cから.cppに変えることでC++で書けるようになる。
→しかしながらCubeをジェネレートするとそこに上書きされずにmain.cが再
登場する。
書き込み(デバッグ開始)
ビルド
リビルド(初めからすべてビルド)
デバッグ
デバッグ設定(ビルドを一回してからまずここで設定
デバッグ
ブレイクポイントまでプログラムを流す
デバッグ終了
もう一度ビルドしてデバッグ再開
Expression(変数の内容が見れる)
レジスタの内容が見れる
緑になっているところの前まで実行した
ステップオーバー(1行進める)
ちょっと便利な機能1
• カーソルを関数のところに
載せると中身がみれる
• カーソルを変数のところに
合わせると定義が見れる
• F3を押すと定義や関数の
中身に飛べる
ちょっと便利な機能2
• ビルドアナライザー:
メモリの使用率が見れる
• デバッグ画面中のSFRs:
レジスタの生の値見れる&書き換えれる
• デバッグ画面中の式:
変数の値をステップしながら見れる
→ArudinoとかmbedでのPrintfによる
デバッグからの脱却
CANを使う
CANを使う その2
• 用意する変数、構造体等
CAN_TxHeaderTypeDef TxHeader; 送信ハンドラー
CAN_RxHeaderTypeDef RxHeader; 受信ハンドラー
uint8_t TxData[8]; 送信データ配列
uint8_t RxData[8]; 受信データ配列
uint32_t TxMailbox; 送信箱
• 送信フィルタ
TxHeader.StdId = 0x456; 送信ID
TxHeader.RTR = CAN_RTR_DATA;
TxHeader.IDE = CAN_ID_STD;
TxHeader.DLC = 3; 送信byte数
TxHeader.TransmitGlobalTime = DISABLE;
• 受信コールバック関数:
void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan)
• 受信読み出し関数:
HAL_CAN_GetRxMessage(&hcan1, CAN_RX_FIFO0, &RxHeader, RxData)
• 受信開始指令関数:
HAL_CAN_ActivateNotification(&hcan1,CAN_IT_RX_FIFO0_MSG_PENDING)
• 送信関数:
HAL_CAN_AddTxMessage(&hcan1, &TxHeader, TxData, &TxMailbox)
• CANフィルタの記述
→受信IDのフィルタは5bit左シフトして使う
CANを使う その3
CAN-FDを使う
出典:http://www.tij.co.jp/product/jp/TCAN1051G-Q1
• 用意する変数
FDCAN_TxHeaderTypeDef TxHeader;
FDCAN_RxHeaderTypeDef RxHeader;
uint8_t TxData[50];
uint8_t RxData[50];
uint32_t TxMailbox;
• 送信フィルタ
TxHeader.Identifier = 0x123; →送信ID
TxHeader.IdType = FDCAN_STANDARD_ID;
TxHeader.TxFrameType = FDCAN_DATA_FRAME;
TxHeader.DataLength = FDCAN_DLC_BYTES_32; →32byte一気に送れる
TxHeader.ErrorStateIndicator = FDCAN_ESI_ACTIVE;
TxHeader.BitRateSwitch = FDCAN_BRS_ON;
TxHeader.FDFormat = FDCAN_FD_CAN;
TxHeader.TxEventFifoControl = FDCAN_STORE_TX_EVENTS;
TxHeader.MessageMarker = 0x52;
CAN-FDを使う その2
CAN-FDを使う その3
• 受信コールバック関数:
void HAL_FDCAN_RxFifo0Callback(FDCAN_HandleTypeDef *hfdcan, uint32_t RxFifo0ITs)
• 受信読み出し関数:
HAL_FDCAN_GetRxMessage(hfdcan, FDCAN_RX_FIFO0, &RxHeader, RxData)
• 受信開始指令関数:
HAL_FDCAN_ActivateNotification(&hfdcan1,FDCAN_IT_RX_FIFO0_NEW_MESSAGE, 0)
• 送信関数:
HAL_FDCAN_AddMessageToTxFifoQ(&hfdcan1, &TxHeader, TxData)
• CANフィルタの記述
STM32G4について その1
• DSPおよびFPU命令による高い性能と高度な機能を備えた
ミックスド・シグナル・マイコン
• 最大170 MHzで動作するArm® Cortex®-M4(DSPおよび
FPU命令に対応)、3種類のハードウェア・アクセラレータ
• CAN-FDに対応
• CORDIC演算に対応 →双曲線関数と三角関数を計算する
ための単純で効率的なアルゴリズム
• 安い(G474が高いだけでそれ以外は大体600円程度)
STM32G4について その2
っで実際どうなの?編
• CAN-FDについて
→とりあえず使えてる。ボーレートもちゃんと2MBps出せた。
→今までのCANとは全然設定項目・名前が違った
→データ長は0~8、12、16、20、24、32、48、64バイトが選択
→実際に32バイト一気に送れた
• CORDIC演算
→とりあえず動いた。
→sin計算はmath.hの38倍くらいはやかった。
→固定小数点なので人間がパッと見て数値がわからん
→DMAで専用ハードに条件投げるだけなのでメインの処理
に関係なく演算ができる
ブログの紹介
• CubeHALのテストしたときの記事
のまとめ(リンク集)があります。
• その他STM32開発の記事を多めに
書いてます。
→URL埋め込まれてる
QRコード
ありがとうございました

ご注文はSTM32の開発ですか?