STM32 CAN Bus サンプルコード
UIROBOT CAN Bus 製品の STM32 開発サンプルコード。HAL ライブラリ、bxCAN、モータ制御。
# STM32 CAN Bus サンプルコード
このページでは、STM32 マイクロコントローラの内蔵 CAN コントローラ(bxCAN)を使用して UIROBOT CAN bus デバイスを制御するためのサンプルコードを提供します。
---
## Quick Selection
| 接続方法 | 対応製品 | ドキュメント |
|---------|---------|-------------|
| **bxCAN(内蔵)** | UIM342, UIM342A | [AN022] |
| **UART-CAN (UIM2513)** | UIM342, UIM342A, UIM1616 | [AN023] |
## セクション 1: bxCAN(内蔵 CAN)
### 背景
STM32F103 シリーズには内蔵の CAN コントローラ(bxCAN)が搭載されており、SN65HVD230 トランシーバを使用して CAN bus に接続します。
### HAL ライブラリ設定
```c
CAN_HandleTypeDef hcan;
void MX_CAN_Init(void) {
hcan.Instance = CAN1;
hcan.Init.Prescaler = 4;
hcan.Init.Mode = CAN_MODE_NORMAL;
hcan.Init.SJW = CAN_SJW_1TQ;
hcan.Init.BS1 = CAN_BS1_9TQ;
hcan.Init.BS2 = CAN_BS2_6TQ;
hcan.Init.AutoBusOff = ENABLE;
hcan.Init.AutoWakeUp = ENABLE;
hcan.Init.AutoRetransmission = ENABLE;
HAL_CAN_Init(&hcan);
}
void CAN_SendMotorCommand(uint8_t nodeId, uint16_t speed) {
CAN_TxHeaderTypeDef txHeader;
uint8_t data[8] = {0x01, speed >> 8, speed & 0xFF, 0, 0, 0, 0, 0};
txHeader.StdId = nodeId;
txHeader.IDE = CAN_ID_STD;
txHeader.RTR = CAN_RTR_DATA;
txHeader.DLC = 8;
uint32_t mailbox;
HAL_CAN_AddTxMessage(&hcan, &txHeader, data, &mailbox);
}
```
---
## ダウンロード
| アプリケーションノート | 説明 | ダウンロードリンク |
|---------------------|------|-----------------|
| AN022 | STM32 bxCAN + UIM342 | [Download ZIP](https://www.uirobot.com) |
| AN023 | STM32 + UIM2513 | [Download ZIP](https://www.uirobot.com) |
---
## 関連ドキュメント
- [STC89C52 サンプルコード](/docs/stc89c52-examples)
- [Arduino CAN Bus サンプルコード](/docs/arduino-examples)
- [UIM2513 RS232-CAN ゲートウェイ](/docs/uim2513)
---
*最終更新: 2026-07-03*