TOPPERS BASE PLATFORM (ST) V1.4.6

担当者

TOPPERS BASE PLATFORM (ST) REFERENCE MANUAL

竹内良輔（Educational WG）

変更履歴
リリース
1.0.0
1.0.1
1.1.0
1.1.1
1.2.0
1.2.1
1.3.0
1.4.0
1.4.1
1.4.2

日付
2016/05/28
2016/06/23
2016/08/26
2017/01/20
2017/07/07
2017/08/25
2018/05/31
2019/03/04
2020/05/11
2021/06/01

作成者
竹内良輔
竹内良輔
竹内良輔
竹内良輔
竹内良輔
竹内良輔
竹内良輔
竹内良輔
竹内良輔
竹内良輔

1.4.3

2022/04/18

竹内良輔

1.4.4

2023/04/13

竹内良輔

1.4.5

2024/01/12

竹内良輔

1.4.6

2024/02/27

竹内良輔

変更内容
STM32F4xx 版
STM32F746 の機能を追加,446/746-nucleo-144 を追加
USB OTG の対応/I2C プロトシールドを追加
USB OTG プログラム修正による改訂、CV 版と分離
STM32F767/STM32F769 ボード対応,spi 変更
SM32F091/STM32L073/STM32L476 ボード対応
TOPPERS USB MEDDLEWARE の対応
バージョンアップ、変更履歴詳細に記載
gdic ドライバ追加/lwip 対応、新ボード対応
WIFI 拡張/OpenAMP の対応/stmcube 変更、6.6,6.7 章
追加、BLE で不足のユーティリティを追記
PWM ドライバ追加、USB シールド変更、RTOS 隠蔽機
能、STM32G0B1 ボード対応、WB の BLE スタックを
1.2.0 に対応、STM32WB15 nucleo ボード対応
PWM ドライバに deinit 関数を追加、STM-USB デバイ
スの CDC のエンドポイントの不具合を修正、USB ミド
ルウェアの最適化、gdic に esp32 を追加、lwip を 2.1.3にバージョンアップ
lwIP の OPTTEST 用 TCPIP ロック機能を追加、標準出力処理の変更、ネットワークモニタ対応、USB デバイ
ス MSC を追加、WB15 の P2Pserver の対応をやめる
STM32WB55 の ble_remote アプリを修正、ワーニング
対応

TOPPERS BASE PLATFORM (ST) REFERENCE MANUAL

目次
変更履歴 ..................................................................................................................................................... 2
1 背景 ..................................................................................................................................................... 6
2 目的 ..................................................................................................................................................... 6
3 TOPPERS BASE PLATFORM (ST)仕様 .......................................................................................... 6
3.1
プラットフォームのターゲット .................................................................................................. 6
3.2
レイア構造 ................................................................................................................................. 12
3.3
開発環境 ..................................................................................................................................... 14
4 Device Driver 仕様 ........................................................................................................................... 14
4.1
Basic Driver .............................................................................................................................. 14
4.1.1
概要 ........................................................................................................................................ 14
4.1.2
ドライバ一覧 .......................................................................................................................... 14
4.1.3
GPIO ...................................................................................................................................... 14
4.1.3.1
データ仕様 .......................................................................................................................... 15
4.1.3.2
インターフェイス仕様........................................................................................................ 16
4.1.3.3
フローチャート .................................................................................................................. 16
4.1.4
DMA ....................................................................................................................................... 16
4.1.4.1
データ仕様 .......................................................................................................................... 16
4.1.4.2
インターフェイス仕様........................................................................................................ 21
4.1.4.3
フローチャート .................................................................................................................. 22
4.1.5
WATCH DOG ........................................................................................................................ 23
4.1.5.1
データ仕様 .......................................................................................................................... 23
4.1.5.2
インターフェイス仕様........................................................................................................ 24
4.1.6
TIMER ................................................................................................................................... 24
4.1.7
UART ..................................................................................................................................... 24
4.2
Standard Driver ....................................................................................................................... 24
4.2.1
概要 ........................................................................................................................................ 24
4.2.2
I2C ......................................................................................................................................... 24
4.2.2.1
データ仕様 .......................................................................................................................... 25
4.2.2.2
インターフェイス仕様........................................................................................................ 27
4.2.2.3
フローチャート .................................................................................................................. 28
4.2.3
SPI ......................................................................................................................................... 30
4.2.3.1
データ仕様 .......................................................................................................................... 31
4.2.3.2
インターフェイス仕様........................................................................................................ 34
4.2.3.3
フローチャート .................................................................................................................. 35
4.2.4
ADC........................................................................................................................................ 37
4.2.4.1
データ仕様 .......................................................................................................................... 37
4.2.4.2 インターフェイス仕様.............................................................................................................. 42
4.2.4.3 フローチャート......................................................................................................................... 42
4.2.5
QSPI....................................................................................................................................... 44
4.2.5.1
データ仕様 .......................................................................................................................... 44
4.2.5.2 インターフェイス仕様.............................................................................................................. 47
4.2.5.3 フローチャート......................................................................................................................... 48
4.2.6
RTC ........................................................................................................................................ 48
4.2.6.1
データ仕様 .......................................................................................................................... 48
4.2.6.2
インターフェイス仕様........................................................................................................ 50
4.2.6.3
設定手順 ............................................................................................................................. 50
4.2.7
USB OTG............................................................................................................................... 51
4.2.7.1
データ仕様 .......................................................................................................................... 51
4.2.7.2 インターフェイス仕様.............................................................................................................. 53
4.2.7.3 フローチャート......................................................................................................................... 54
4.3
F7 Depend Driver ..................................................................................................................... 59

4.3.1
概要 ........................................................................................................................................ 59
4.3.2
LTDC ..................................................................................................................................... 60
4.3.2.1
データ仕様 .......................................................................................................................... 60
4.3.2.2
インターフェイス仕様........................................................................................................ 62
4.3.2.3
設定手順 ............................................................................................................................. 63
4.3.3
TP ........................................................................................................................................... 64
4.3.4
SDMMC ................................................................................................................................. 64
4.3.4.1
データ仕様 .......................................................................................................................... 64
4.3.4.2
インターフェイス仕様........................................................................................................ 65
4.3.4.3
設定手順 ............................................................................................................................. 66
4.3.5
AUDIO ................................................................................................................................... 68
4.3.5.1
データ仕様 .......................................................................................................................... 68
4.3.5.2
インターフェイス仕様........................................................................................................ 73
4.3.5.3
設定手順 ............................................................................................................................. 74
4.3.6
DSI ......................................................................................................................................... 76
4.3.6.1
データ仕様 .......................................................................................................................... 76
4.3.6.2
インターフェイス仕様........................................................................................................ 77
4.3.6.3
設定手順 ............................................................................................................................. 78
4.3.7 EMAC ....................................................................................................................................... 79
4.3.7.1 データ仕様 ............................................................................................................................. 79
4.3.7.2 インターフェイス仕様.............................................................................................................. 80
4.3.7.3 フローチャート......................................................................................................................... 81
5 タスクモニタ ..................................................................................................................................... 83
5.1
概要 ............................................................................................................................................ 83
5.2
標準入出力 ................................................................................................................................. 83
5.3
標準デバッグコマンド ............................................................................................................... 84
5.4
デバッグコマンド拡張 ............................................................................................................... 85
5.4.1
データ仕様 ............................................................................................................................. 85
5.4.2
インターフェイス仕様 ........................................................................................................... 85
6 API 層 ............................................................................................................................................... 86
6.1
概要 ............................................................................................................................................ 86
6.2
ファイルシステム ...................................................................................................................... 86
6.2.1
ファイルライブラリ ............................................................................................................... 87
6.2.2
Storage Device Manager ...................................................................................................... 88
6.2.2.1
データ仕様 .......................................................................................................................... 88
6.2.2.2
インターフェイス仕様........................................................................................................ 89
6.2.3
FatFs...................................................................................................................................... 90
6.3
時間管理 ..................................................................................................................................... 90
6.3.1
データ仕様 ............................................................................................................................. 90
6.3.2
インターフェイス仕様 ........................................................................................................... 91
6.4
USB ミドルウェア..................................................................................................................... 91
6.4.1
USB ホスト機能..................................................................................................................... 91
6.4.2
USB デバイス機能 ................................................................................................................. 91
6.5
UI ミドルウェア ........................................................................................................................ 91
6.5.1
UI ディレクトリ .................................................................................................................... 92
6.6
LWIP ミドルウェア ................................................................................................................... 92
6.6.1
ポーティング方法 .................................................................................................................. 93
6.7
STM32Cube ミドルウェア........................................................................................................ 93
6.7.1
STM32_WPAN ディレクトリ ............................................................................................... 93
6.7.2
OpenAMP ディレクトリ ....................................................................................................... 94
6.8
RTOS 隠蔽機能.......................................................................................................................... 94
7 ファイルの構成 ................................................................................................................................. 94
4

7.1
共通部 ........................................................................................................................................ 94
7.2
STM32F4xx ドライバ ............................................................................................................... 95
7.3
STM32L4xx ドライバ ............................................................................................................... 95
7.4
STM32F7xx ドライバ ............................................................................................................... 96
7.5
STM32F0xx ドライバ ............................................................................................................... 97
7.6
STM32L0xx ドライバ ............................................................................................................... 97
7.7
STM32G0xx ドライバ ............................................................................................................... 98
7.8
STM32H7XX ドライバ ............................................................................................................. 98
7.9
STM32G4XX ドライバ.............................................................................................................. 98
7.10 STM32WBXX ドライバ ............................................................................................................ 99
7.11 STM32MP1XX ドライバ......................................................................................................... 100
7.12 GDIC ドライバ ........................................................................................................................ 100
8 変更履歴詳細 ................................................................................................................................... 101
Appendix A STM32F401RE Nucleo .................................................................................................. 103
Appendix B STM32F4 Discovery ...................................................................................................... 104
Appendix C STM32F746 Discovery .................................................................................................. 105
Appendix D STM32F446RE Nucleo-64 ............................................................................................ 106
Appendix E STM32F446ZE Nucleo-144 ........................................................................................... 107
Appendix F STM32F746ZG Nucleo-144 ........................................................................................... 109
Appendix G STM32F767ZIT6 Nucleo-144 ....................................................................................... 110
Appendix H STM32F769NIH6 Discovery ........................................................................................ 112
Appendix I STM32F091 Nucleo-64 ................................................................................................... 114
Appendix J STM32L073 Nucleo-64 .................................................................................................. 115
Appendix K STM32L476 Nucleo-64.................................................................................................. 116
Appendix L STM32L476 Discovery .................................................................................................. 118
Appendix M STM32F723 Discovery ................................................................................................. 119
Appendix N STM32F4R5 Nucleo-144 ............................................................................................... 120
Appendix O STM32G071/STM32G0B1 Nucleo-64 .......................................................................... 122
Appendix P STM32H743 Nucleo-144 ............................................................................................... 123
Appendix Q STM32G474/431 Nucleo-64 .......................................................................................... 125
Appendix R STM32WB55 Nucleo ..................................................................................................... 127
Appendix S STM32MP157C DK2 ..................................................................................................... 128

5

1 背景
TOPPERS 教育 WG では、組込み用ソフトウェアプラットフォーム用教材を基礎３コンテンツとして作成した。コンテンツとしては抽象的でわかりにくいものとなり、組込みプラットフォーム教材として満足のいくものではなかった。そこで新しい組込みプラットフォームの教材の作成に着手した。開発にあたり、アプローチ方法を大きく見直した。この教材を構築する前提として実際に商品レベルに使用可
能な組込みソフトウェアプラットフォームとドキュメント（本リファレンスマニュアル）を開発し、それをベースとして、新基礎２、新基礎３のセミナー部と、実習部を作成する手順とした。
旧基礎１，２，３コンテンツから新基礎１，２，３コンテンツの改訂にあたり、セミナー部とリファレンスシステムで使用するターゲットボードと実際にターゲットボード上で動作する組込みソフトウェアプラットフォームを TOPPERS BASE PLATFORM と呼称し、仕様書はリファレンスマニュアル
呼称することとなった。

2 目的
本リファレンスマニュアルは、ターゲットボードとターゲットボード上に作成した組込みソフトウェ
アプラットフォーム(TOPPERS BASE PLATFORM(ST))ついて記載する。
TOPPERS BASE PLATFORM(ST) は STM32F4SoC 対応のボードに対する機能を for STM32F4xxとして記載する。同様に、STM32F7SoC 対応のボードに対する機能を for STM32F7xx、STM32F0SoC
対応ボードに対する記載を STM32F0xx、
STM32L0SoC に対応する記載を STM32L0xx、
STM32H7SoCに対応する記載を STM32H7xx、STM32G4SoC に対する記載を STM32G4xx、STM32WB55SoC に対する記載を STM32WBxx とする。
■ターゲットボード
・STM32F407 Discovery for STM32F4xx
・STM32F401 Nucleo-64 for STM32F4xx
・STM32F446 Nucleo-64 for STM32F4xx
・STM32F446 Nucleo-144 for STM32F4xx
・STM32F746 Discovery for STM32F7xx
・STM32F746 Nucleo-144 for STM32F7xx
・STM32F767 Nucleo-144 for STM32F7xx
・STM32F769 Discovery for STM32F7xx
・STM32F091 Nucleo-64 for STM32F0xx
・STM32L073 Nucleo-64 for STM32L0xx
・STM32L476 Nucleo-64 for STM32L4xx
・STM32L476 Discovery for STM32L4xx
・STM32F723 Discovery for STM32F7xx
・STM32L4R5 Nucleo-144 for STM32L4xx
・STM32H743 Nucleo-144 for STM32H7xx
・STM32G474 Nucleo-64 for STM32G4xx
・STM32G431 Nucleo-64 for STM32G4xx
・STM32G071 Nucleo-64 for STM32G0xx
・STM32G0B1 Nucleo-64 for STM32G0xx
・STM32WB55 Nucleo for STM32WBxx
・STM32WB15 Nucleo for STM32WBxx
・STM32MP157C DK2 for STM32MP15xx

3 TOPPERS BASE PLATFORM (ST)仕様
本章では、TOPPERS BASE PLATFORM (ST)の仕様について記載する。

3.1 プラットフォームのターゲット
TOPPERS BASE PLATFORM(ST)は Arduino メインボードのようにシールドをつけて種々の形態

6

を持つようなシステムをターゲットとする。基礎１、２セミナー用の形態はプロトシールドをつけてセ
ミナーを行う。新基礎３では adafruit 製１．８インチ １８ｂｉｔカラーＴＦＴシールド with microSD &Joy stick をつけて、Arduino と同じように、これを制御する。

プロトシールド A-TYPE と B-TYPE

プロトシールド A-TYPE はブレッドボードとリセットＳＷのみのシールド、プロトシールド B-TYPE
は A-TYPE に加え、基礎１、基礎２セミナーで使用するユーザースイッチと２つの LED 回路を追加したシールド。
セミナーや実装開発用に、FlatOak 社製のプロトタイプシールド(TEB001)の使用を推奨する。このシールドは ST マイクロエレクトロニクス社の nucleo ボード専用に設計ボードでハンダ付なしに LED や
ユーザースイッチを使用できる。

FlatOak 社 TEB001 プロトタイプシールド
I2C 用の適切なシールドがないため、プロトタイプシールドに I2C 対応の LCD、温度センサー、
EEPROM を乗せた I2C プロトタイプシールド、及び、IWHI 1.54” LCD シールド(TEB002)の回路図を示す。

7

図 3.1 プロトシールド回路図8図 3.2 I2C プロトシールド

9図 3.3 USB シールド10

図 3.4 IWHI 1.54” LCD シールド(TEB002)

11

I2C プロトタイプシールド

I2C ブレッドボード(D15,14 を対応) IWHI 1.54LCD シールド

3.2 レイア構造
PLATFORM のハードウェアドライバは下層から３層のレイヤ構造を持ち、その上に API 層、ライブラリの I/F 層をもつ。これらの PLATFORM は、Realtime Kernel TOPPERS ASP-1.9.3 上に構築している。また、ASP のもつデバッグ機能以外に、教育ＷＧで提供するタスクモニタを標準に装備し、システムデバッグ
用にデバッグコマンドを用いて開発補助を行う。
V1.4.3 以 上 で は RTOS の サ ー ビ ス ・ コ ー ル の 隠 蔽 機 能 を 追 加 す る 。 デ ィ レ ク ト リ pdic 直 下 の
base_platform.h にて、サービス・コールのマクロ化を行い、μITRON 系の RTOS ならばマクロを書き換えることにより、種々の RTOS への対応が可能となる。対象は pdic/gdic のデバイスドライバとミドルウェア
である。
図 3.2.1 に BASE PLATFORM(STM) for STM32F4xx/STM32L4xx/STM32F0xx/STM32L0xx の構造図を示す。Standard Driver、SPI xDriver、File Library により、アプリケーションから以下の機能が使用可能になる。
① SD card File system(SPI)② SPI③ Wire(I2C)④ UART⑤ ADC⑥ QSPI⑦ RTC⑧ USB OTG

図 3.2.1 TOPPERS BASE PLATFORM(ST) for STM32F4xx/L4xx/F0xx/L0xx 構造図
図 3.2.2 に TOPPERS BASE PLATFORM(ST) for STM32F7xx の構造図を示す。F7 Depend driver の拡張により以下の機能が使用可能になる。
① jpeg-9b(JPEG ライブラリ)② libmad-0.15.1b(mp3 デコーダライブラリ)

12

③
④
⑤
⑥
⑦
⑧
⑨
⑩
⑪
⑫
⑬

lwip(TCP/IP プロトコルスタック)
SD card File system(SDMMC)
SDRAM
GLCD/touch panel
RTC
AUDIO
SPI
Wire(I2C)ADC
QSPI
USB OTG

図 3.2.2 TOPPERS BASE PLATFORM(ST) for STM32F7xx
以下に、レイア構造の概要を示す。
(1)basic driver ハードウェア仕様により API が変わるドライバ層(2)standard driver 拡張ボードの標準化により、API がある程度標準化されているドライバ層(3)GDIC driver 下位の driver を使用して構築する特定のデバイス用 driver(4)F7depend driver STM32F7xx のハード構成に従うドライバ層(F7 のみ)(5)BASE PLATFORM で標準化している API 層(6)open source のライブラリ等

PLATFORM(ST)
DeviceDriver(pdic)

Basic
DriverStandard
Driver

STM32F4/F0xx
STM32L4/L0xx
gpio
dma
watch doc(timer)
uart
i2c
spi
adc
(qspi)
rtc
usb OTGF7 Depend
Drivergdic
api
middlewarehigh driver
File
Systemfatfs
file libreary

STM32F7xx
gpio
dma
watch doc(timer)
uart
i2c
spi
adc
qspi
rtc
usbo
ltdc/dsi
tp
sdmmc
audio/dfsdm
emac
wifi
fatfs
file librarydetail

対象の講座

新基礎２

CLCD/senser/eeprom
GLCD/SD card
Joy stick
FLASH
Clock 機能MSC/HID
GLCD
SD card
有線 LAN
無線 LAN
Shield 依存
FAT
C language file

新基礎３
(Reference
Manual)新基礎３
Reference
System(Application Manual
Reference
Manual)13

Graphic UI(Opensource)library

stdio
ui
USB

LAN

stdio
ui
usb meddle
libjpeg(*1)
libmad(*1)
lwip(*2)

stdio
文字グラフィック描画
USB host/dev
JPEG
MP3
TCP/IP*1：api(posix 互換)のためソース未修正で実装：バージョンアップに追従*2：問題点対応用に patch ファイルを用意：バージョンは固定となる

3.3 開発環境
TOPPERS BASE PLATFORM は Windows7 以降のパソコンで cygwin または MSYS2 をインストール
し、コンパイラ環境は GCC-ARM の以下のバージョンをインストールし開発を行っている。
(1) gcc version 5.4(GCC ARM:2016q2-20160622)(2) gcc version 5.4(GCC ARM-2016q2-20160926)(3) gcc version 10.2.1(GCC ARM-2020q4-major)

4 Device Driver 仕様
ハードウェア用デバイスドライバの仕様について記載を行う。本 PLATFORM では、３種類のデバイ
スドライバを提供する。Basic Driver と Standard Driver は STM32Fxxx と STM32Lxxx で共通の仕様となる。M7 Depend Driver は STM32Fxx でサポートするハードウェア専用のデバイスドライバである。

4.1 Basic Driver
4.1.1 概要
Basic Driver は、
ハードウェアを制御する基本的なドライバ群である。
制御は簡単な制御手順ですが、初期化や拡張機能は、SoC によってまちまちの実装が行われており、標準的な API では作成できないものが多い。また、Basic Driver は直接ミドルウェアやアプリから制御を行うより、上位のドライバから使用機能として呼び出すケースが多い。逆に Basic Driver は他のドライバの呼び出しは行わない。Basic
Driver はハードウェアの依存性が大きいため、PLATFORM を別の SoC にポーティングする場合、別の API の実装となる。
TIMER と UART は、asp カーネルで使用されている。基本的には asp カーネルのドライバを使用する。差分のみを Basic Driver として記載する。

4.1.2 ドライバ一覧
Basic Driver として分類するドライバは以下の４つである。
(1) gpio
汎用ＩＯドライバ(2) dma
ダイナミック・メモリ・アクセスドライバ(3) timer
タイマードライバ(4) uart
シリアルドライバ

4.1.3 GPIO
GPIO は汎用のＩＯを制御するドライバである。GPIO はピン設定を入力または出力に設定し、ピンに対してデータを読み込むまたは書き込みことにより、外部のロジックとのデータ交換を行う機能を持つ。機能的には単純であるが、ピンアサイン、ベースの電圧設定、出力モード設定、割込みの対応等、初期化に関して SoC の設計により、設定仕様がまちまちであり、標準的な初期化手順を作ることが難しい。

14

4.1.3.1 データ仕様
STM 社 Cortex-M 系の GPIO の初期化に用いるデータと構造体について記載する。GPIO の初期化には表 4.1.3.1 の GPIO_Init_t 型を使用する。
番号

項目

型

機能

1
2
3
4
5

mode
pull
otype
speed
alternateuint32_t
uint32_t
uint32_t
uint32_t
uint32_t

対象のピンアサインの設定モード
出力 Pull-Up/Pull-Down 設定
出力タイプ Open-drain/Push-Pull 設定
出力スピード設定
アルタネート設定

表 4.1.3.1 GPIO_Init_t 型①

mode
モードはピンアサインの GPIO モードを設定する
定義

値

GPIO_MODE_INPUTGPIO_MODE_IT_RISINGGPIO_MODE_IT_FALLINGGPIO_MODE_IT_RISING_FALLINGGPIO_MODE_EVT_RISINGGPIO_MODE_EVT_FALLINGGPIO_MODE_EVT_RISING_FALLINGGPIO_MODE_OUTPUT_PP
GPIO_MODE_AF_PP
GPIO_MODE_ANALOG
GPIO_MODE_ANALOG_AD

0x00000000
0x10110000
0x10210000
0x10310000
0x10120000
0x10220000
0x10320000
0x00000001
0x00000002
0x00000003
0x00000007

内容

GPIO 入力モード
GPIO 入力 EXTI 立ち上がりエッジ割込み
GPIO 入力 EXTI 立下りエッジ割込み
GPIO 入力 EXTI 両エッジ割込み
GPIO 入力 EXTI 立ち上がりエッジ EVENTGPIO 入力 EXTI 立下りエッジ EVENTGPIO 入力 EXTI 両エッジ EVENTGPIO 出力モード
アルタネートピン設定
アナログピン設定
ADC アナルグピン(STM32L4xx のみ)

表 4.1.3.2 mode 設定値② pullpull はピンアサインが出力モード設定の場合、Pull-Up/Pull-Down の端子設定を行う。
定義

GPIO_NOPULLGPIO_PULLUPGPIO_PULLDOWN

値

0x00000000
0x00000001
0x00000002

内容

Pull-Up/Down 設定を行わない
Pull-Up 設定
Pull-Down 設定

表 4.1.3.3 pull 設定値③ otypeotype はピンアサインが出力モードの場合、Open-Drain/Push-Pull の端子設定を行う
定義

GPIO_OTYPE_PP
GPIO_OTYPE_OD

値0x00000000
0x00000001

内容

Push-Pull 設定
Open-Drain 設定

表 4.1.3.4 otype 設定値④ speedspeed はピンアサインが出力モードの場合、出力周波数の設定を行う。出力周波数はデバイス毎に最適値がある。
定義

GPIO_SPEED_LOW
GPIO_SPEED_MEDIUM

値

内容0x00000000
0x00000001

低速
中間

15

GPIO_SPEED_FAST
GPIO_SPEED_HIGH

0x00000002
0x00000003

速い
最高

表 4.1.3.5 speed 設定値⑤ altanate
アルタネートはピン設定をデバイスの入出力ピンとして使用する場合のアルタネート値を設定する。モードが GPIO_MODE_AF_PP の場合のみ有効となる。

4.1.3.2 インターフェイス仕様
GPIO を初期設定するドライバ関数を以下に示す。
関数名

型

引数

機能

備考

gpio_setup

void

uint32_t base
GPIO_Init_t *init
uint32_t pinbase アドレスと pin 番号で指定されたポートを初期化する。

アルタネー
トの設定デ
バイスピン
の初期化の
場合もある

表 4.1.3.6 GPIO 設定関数

4.1.3.3 フローチャート
基本的な GPIO の出力設定のフローチャートを以下に示す。

図 4.1.1.3.1 GPIO の設定フローチャート

4.1.4 DMADMA は CPU を通さず、直接メモリとデバイスまたはメモリ間でデータ転送を行う機構である。デバ
イスとメモリ間で高速にデータ通信した場合、オーバーラン・エラーやアンダーラン・エラーが発生するケースが多く、Standard Driver では DMA を使用している。

4.1.4.1

データ仕様

DMA ド ライ バは 初期設 定 用 に DMA_Init_t 型 、 制 御 を行 うた めに ハ ン ドラ とし て使 用する
DMA_Handle_t 型の二つの型を持つ。STM32F4xx / STMF7xx と STM32L4xx / STM32F0xx /STM32L0xx では IP が異なるため、構造体に若干の差異がある。
番号

項目

型

機能

1
2

ChannelDirection

uint32_t
uint32_t

DMA のチャネル番号
転送方向

16

3
4
5
6
7
8
9
10
11
12

PeriphInc
MemIncPeriphDataAlignment
MemDataAlignment
Mode
Priority
FIFOMode
FIFOThreshold
MemBurst
PeriphBurstuint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t

ペリフェラルインクリメントモード
メモリインクリメントモード
ペリフェラルのデータアラインメントを設定する
メモリのデータアラインメントを設定する
転送モード設定
優先順位設定FIFO の有効、無効を設定
FIFO のスレッシュホールドを設定
メモリ側のバースト設定
ペリフェラル側のバースト設定

表 4.1.4.1 DMA_Init_t 型(STM32F4xx/STM32F7xx)

番号

項目

型

機能

1
2
3
4
5
6
7
8

RequestDirection
PeriphInc
MemIncPeriphDataAlignment
MemDataAlignment
Mode
Priority

uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t

リクエストチャネル番号
転送方向
ペリフェラルインクリメントモード
メモリインクリメントモード
ペリフェラルのデータアラインメントを設定する
メモリのデータアラインメントを設定する
転送モード設定
優先順位設定表 4.1.4.2 DMA_Init_t 型(STM32F0xx/STM32L0xx/STM32L4xx)①

ChannelSTMF4/F7 では２つの DMA で各 8 つのチャネルが使用可能である。
定義

DMA_CHANNEL_0
DMA_CHANNEL_1
DMA_CHANNEL_2
DMA_CHANNEL_3
DMA_CHANNEL_4
DMA_CHANNEL_5
DMA_CHANNEL_6
DMA_CHANNEL_7

値

0x00000000
0x02000000
0x04000000
0x06000000
0x08000000
0x0A000000
0x0C000000
0x0E000000

内容

チャネル０
チャネル１
チャネル２
チャネル３
チャネル４
チャネル５
チャネル６
チャネル７

表 4.1.4.3 Channel 設定値②

Dirction
Dirction はデータ転送の種別と転送方向を指定する。
定義

DMA_PERIPH_TO_MEMORYDMA_MEMORY_TO_PERIPH
DMA_MEMORY_TO_MEMORY

値

0x00000000
DMA_SxCR_DIR_0
DMA_SxCR_DIR_1

内容メモリからペリフェラルへの転送
ペリフェラルからメモリへの転送
メモリからメモリへの転送

表 4.1.4.4 Direction 設定値③ PeriphInc
ペリフェラル転送時、インクリメントモード設定。

17

定義

DMA_PINC_ENABLE
DMA_PINC_DISABLE

値

DMA_SxCR_PINC
0x00000000

内容

ペリフェラルインクリメントモード有効ペリフェラルインクリメントモード無効

表 4.1.4.5 PeriphInc 設定値④ MemInc
メモリ転送時インクリメントモード
定義

DMA_MINC_ENABLE
DMA_MINC_DISABLE

値

DMA_SxCR_MINC
0x00000000

内容

メモリインクリメントモード有効
メモリインクリメントモード無効

表 4.1.4.6 MemInc 設定値⑤ PeriphDataAlignment
PeriphDataAlignment はペリフェラル側のデータアラインメントを設定する。
定義

値

DMA_PDATAALIGN_BYTE
0x00000000
DMA_PDATAALIGN_HALFWORDDMA_SxCR_PSIZE_0
DMA_PDATAALIGN_WORD
DMA_SxCR_PSIZE_1
表 4.1.4.7 PeriphDataAlignment 設定値

内容

アラインメントバイト設定
アラインメント２バイト設定
アラインメント４バイト設定⑥ MemDataAlignment
MemDataAlignment はメモリ側のデータアラインメントを設定する。
定義

値

DMA_MDATAALIGN_BYTE
0x00000000
DMA_MDATAALIGN_HALFWORDDMA_SxCR_MSIZE_0
DMA_MDATAALIGN_WORD
DMA_SxCR_MSIZE_1
表 4.1.4.8 MemDataAlignment 設定値

内容

アラインメントバイト設定
アラインメント２バイト設定
アラインメント４バイト設定⑦ Modeアルタネートはピン設定をデバイスの入出力ピンとして使用する場合のアルタネート値を設定する。モードが GPIO_MODE_AF_PP の場合のみ有効となる。
定義

DMA_NORMALDMA_CIRCULAR
DMA_PFCTRL

値

0x00000000
DMA_SxCR_CIRC
DMA_SxCR_PFCTRL

内容

ノーマルモード
サーキュラーモード
ペリフェラルフロー制御モード

表 4.1.4.9 Mode 設定値⑧ Priority
DMA の実行優先度設定を行う。
定義

DMA_PRIORITY_LOW
DMA_PRIORITY_MEDIUM
DMA_PRIORITY_HIGH
DMA_PRIORITY_VERY_HIGH

値0x00000000
DMA_SxCR_PL_0
DMA_SxCR_PL_1
DMA_SxCR_PL

内容

低い
中間
高い
非常に高い

表 4.1.4.10 Priority 設定値⑨ FIFOModeDMA の FIFO の有効、無効を設定する。

18

定義

値

DMA_FIFOMODE_DISABLE
DMA_FIFOMODE_ENABLE

内容

0x00000000
DMA_SxFCR_DMDISDMA FIFO 無効
DMA FIFO 有効

表 4.1.4.11 FIFOmode 設定値⑩ FIFOThreshold
FIFO のスレシュホールドを設定する。
定義

値

内容

DMA_FIFO_THRESHOLD_1QUARTERFULLDMA_FIFO_THRESHOLD_HALFFULL
DMA_FIFO_THRESHOLD_3QUARTERSFULLDMA_FIFO_THRESHOLD_FULL

0x00000000
DMA_SxFCR_FTH_0
DMA_SxFCR_FTH_1
DMA_SxFCR_FTH

1/4
1/2
3/4
フル

表 4.1.4.12 FIFOthreshold 設定値⑪ MemBurst
メモリ側の DMA バースト設定
定義

値

DMA_MBURST_SINGLE
DMA_MBURST_INC4
DMA_MBURST_INC8
DMA_MBURST_INC160x00000000
DMA_SxCR_MBURST_0
DMA_SxCR_MBURST_1
DMA_SxCR_MBURST

内容

シングル
インクリメント４
インクリメント８
インクリメント１６

表 4.1.4.13 MemBurst 設定値⑫ PeriphBurst
ペリフェラル側の DMA バースト設定
定義

値

DMA_PBURST_SINGLEDMA_PBURST_INC4
DMA_PBURST_INC8
DMA_PBURST_INC160x00000000
DMA_SxCR_PBURST_0
DMA_SxCR_PBURST_1
DMA_SxCR_PBURST

内容

シングル
インクリメント４
インクリメント８
インクリメント１６

表 4.1.4.14 PeriphBurst 設定値

番号

項目

型

機能

1
2
3
4
5
6
7
8
9

base
Init
sdid
xfercallback
xferhalfcallback
xferm1callback
errorcallback
ErrorCodelocaldata

uint32_t
DMA_Init_t
uint32_tvoid *func
void *func
void *func
void *func
uint32_tvoid*

DMA ストリームコントローラのベースアドレス
DMA 初期化情報
DMA ストリーム ID
転送終了時のコールバック関数
半分転送終了時のコールバック関数
Mem1 転送用コールバック関数
エラー発生時のコールバック関数
エラーコードローカル領域へのポインタ

表 4.1.4.15 DMA_Handle_t 型(STM32Fxx/STM32F7xx

番号

項目

型

機能

1

base

uint32_t

DMA ポートのベースアドレス（自動設定）

19

2
3
4
5
6
7
8
9
10
11

cbase
Init
chid
statusxfercallback
xferhalfcallback
xferm1callback
errorcallback
ErrorCodelocaldata

uint32_t
DMA_Init_t
uint32_t
uint32_tvoid *func
void *func
void *func
void *func
uint32_tvoid*

DMA チャネルのベースアドレス
DMA 初期化情報
DMA チャネル ID（自動設定）
DMA ステータス
転送終了時のコールバック関数
半分転送終了時のコールバック関数
Mem1 転送用コールバック関数
エラー発生時のコールバック関数
エラーコードローカル領域へのポインタ

表 4.1.4.16 DMA_Handle_t 型(STM32L40xx/STM32F0xx/STM32L0xx)① sdid/chid
STM32F4xx/STM32F7xx では DMA ストリーム ID を使用する。これの値は初期化時 base より自動設定される。DMA ストリームコントローラのシーケンシャルな番号である。
定義

DMA1STM0_SID
DMA1STM1_SID
DMA1STM2_SID
DMA1STM3_SID
DMA1STM4_SID
DMA1STM5_SID
DMA1STM6_SID
DMA1STM7_SID
DMA2STM0_SID
DMA2STM1_SID
DMA2STM2_SID
DMA2STM3_SID
DMA2STM4_SID
DMA2STM5_SID
DMA2STM6_SID
DMA2STM7_SID

値

(0)
(1)
(2)
(3)
(4)
(5)
(6)
(7)
(8+0)
(8+1)
(8+2)
(8+3)
(8+4)
(8+5)
(8+6)
(8+7)

内容

DMA1 STREAM0
DMA1 STREAM1
DMA1 STREAM2
DMA1 STREAM3
DMA1 STREAM4
DMA1 STREAM5DMA1 STREAM6DMA1 STREAM7
DMA2 STREAM0
DMA2 STREAM1
DMA2 STREAM2
DMA2 STREAM3
DMA2 STREAM4
DMA2 STREAM5DMA2 STREAM6DMA2 STREAM7

表 4.1.4.17 sdid 設定値
STM32L4xx/STM32F0xx/STM32L0xx ではチャネル ID を使用する。この値は初期化時 cbase より自動設定される。
定義

DMA1CH1_ID
DMA1CH2_ID
DMA1CH3_ID
DMA1CH4_ID
DMA1CH5_ID
DMA1CH6_ID
DMA1CH7_ID
DMA2CH1_ID
DMA2CH2_ID
DMA2CH3_ID
DMA2CH4_ID
DMA2CH5_ID
DMA2CH6_ID
DMA2CH7_ID

値

(0)
(1)
(2)
(3)
(4)
(5)
(6)
(7+0)
(7+1)
(7+2)
(7+3)
(7+4)
(7+5)
(7+6)

内容

DMA1 CHANNEL1
DMA1 CHANNEL2
DMA1 CHANNEL3
DMA1 CHANNEL4
DMA1 CHANNEL5
DMA1 CHANNEL6
DMA1 CHANNEL7
DMA2 CHANNEL1
DMA2 CHANNEL2
DMA2 CHANNEL3
DMA2 CHANNEL4
DMA2 CHANNEL5
DMA2 CHANNEL6
DMA2 CHANNEL7

表 4.1.4.18 chid 設定値

20

② xfercallback
DMA Mem0 転送終了時のコールバック関数③ xferhalfcallback
DMA Mem0 half 転送終了時のコールバック関数④ xferm1callback
DMA Mem1 half 転送終了時のコールバック関数⑤ errorcallback
DMA 転送エラー発生時のコールバック関数⑥ ErrorCode
DMA のエラー状態
定義

値

DMA_STATUS_BUSY
DMA_STATUS_READY_HMEM0DMA_STATUS_READY_HMEM1DMA_STATUS_READY_MEM0
DMA_STATUS_READY_ERROR

内容

0x00000001
0x00000002
0x00000004
0x00000008
0x00000100

DMA BUSY 状態
DMA Mem0 half 転送終了
DMA Mem1 half 転送終了
DMA Mem0 成功終了
DMA エラー終了

表 4.1.4.19 ErrorCode 設定値⑦ localdata
上位のドライバが自由に設定可能なポインタ領域

4.1.4.2

インターフェイス仕様

DMA を制御するドライバ関数を以下に示す。
関数名

型

引数

機能

dma_initER

DMA_Handler_t *hdma

dma_deinit
dma_startERER

dma_enddma_inthandler

ER
void

DMA_Handler_t *hdma
DMA_Handler_t *hdma
uint32_t SrcAddr
uint32_t DstAddr
uint32_t Length
DMA_Handler_t *hdma
DMA_Handler_t *hdma

ストリーム DMA の初期化を行う。初期値として DMA_Init_tと base の設定を行う。
初期化後、必要に応じてコールバック関数を設定する。
DMA を未使用状態に戻す
ストリーム DMA をスタートさせる。

備考

ストリーム DMA を停止させる。
ストリーム DMA の割込みハン asp の割込み
ドラ
サービスル
ーチンから
コールする

表 4.1.4.17 DMA 設定関数

21

4.1.4.3

フローチャート

DMA 処理は初期化と転送に分けられる。STM32 の場合、DMA は２つ用意されており、各 DMA に８つまたは７つのチャネルが割り当てられている。DMA を使用するペレフェラルごとに、どの DMAのどのチャネルを使用するかはハード的に決められている。
初期化のフローチャートを図 4.1.4.3.1 に示す。まず、静的 API を用いて DMA 割込みを設定する。
上記の通り、DMA 2×チャネル 8 = 16（または 7 = 14）の割込みが設定可能となる。割込みハンドラ
は割込みサービスルーチン（stream_dma_isr/channel_dma_isr）を使用する。割込みサービスルーチ
ンから割込みハンドラを取り出すために引数に sdid/chid を設定する必要がある。注１次に C 言語等による記載で、静的なデータとして DMA ハンドラを用意して、これを用いて DMA の設定を行う。ベース
アドレスとして Stream DMA のベースアドレスをセットし、ハンドラ内の DMA_Init_t の項目を設定したあと、dma_init 関数で初期設定を行う。対象の DMA を使用しない場は、ハンドラへのポインタを引数として dma_deinit 関数コールでペリフェラルを未動作状態に戻す。
注１）割込みの設定は静的 API を使用するため、C 言語に記載ではない。

図 4.1.4.3.1 DMA 初期化
DMA 転送開始のフローチャートを図 4.1.4.3.2 に示す。DMA の転送情報やエラー情報は転送開始後の割込みにて通知される。そのため、DMA ハンドラ中にコールバックルーチン設定領域が用意されている。割込みによる状態遷移が発生した場合、割込みサービスルーチンからコールバック関数が呼び出される。
コールバック関数中からセマフォ等を用いて DMA を使用しているタスクに対して通知を行う。
DMA 転送開始は dma_start 関数を用いて、ペリフェラルにキックをかける。DMA の停止はコールバ
ック関数からの通知を受けてタスク側で転送終了やエラー発生を判定して、DMA の停止処理 dma_end
関数を用いて処理する。

22

図 4.1.4.3.2 DMA 転送開始

4.1.5 WATCH DOG
WATCH DOG はシステムに異常が発生した場合、リセットを行う機能である。システムは WATCH
DOG TIMER を起動し、一定周期でタイマーのリセットを行うことにより WATCH DOG に正常動作を通知する。単一の Window WATCH DOG 機能を持ち、このドライバは Window WATCH DOG Timerの制御を行う。
注意：この機能を使用するには、2018 年 11 月以降にリリースされた TOPPERA ASP カーネルのCortexM 用の個別パッケージと組み合わせて使用する必要がある。

4.1.5.1

データ仕様

Window WATCH DOG は単一であるためポート番号１のみ有効である。ドライバ I/F はポート番号
を用いて制御を行う。ポートとは別に WATCH DOG コンフィギュレーション型を持ち、初期設定を行
う。
番号

項目

値

機能

1

WDOG1_PORTID

1

Window Watch Dog IP を示す

表 4.1.5.1.1 WATCH DOG ポート番号
MCounter は、WATCH DOG で設定したタイムアウトを MCounter 分延長するためのカウンタ。
番号

項目

型

機能

1
2
3

Window
CounterMCounteruint32_t
uint32_t
uint32_t

ダウンカウンタのコンペア値(0x40～0x7F)
ダウンカウンタの初期値(0x40～0x7F)
ダウンカウンタ拡張カウント

表 4.1.5.1.2 WATCH DOG コンフィギュレーション型

23

4.1.5.2

インターフェイス仕様

WATCH DOG を制御するドライバ関数は以下の通りである。WATCH DOG カウンタのプリスケール
設定は 8(PCLK1/8)に固定とする。
関数名

型

引数

機能

wdog_initER

wdog_deinit
wdog_resetERER

ID portid
WDOG_Init_t *pini
ID portid
ID portid

指定ポート ID の WATCH DOG ペ
リフェラルを初期化する
WATCH DOG を未使用状態に戻す
タイマーのリセットを行う

備考

表 4.1.5.2.1 WATCH DOG ドライバ関数

4.1.6 TIMER
TIMER は一般的に使用される周期タイマー割込み以外に特殊な機能を持つものもある。
例えば PWM
出力の設定のようなクロック生成にも使用されるため、ドライバの API を統一することは難しい。RTOSのシステムタイマーとして使用する場合は、asp-1.9.3 カーネル内に記述があるため、それを参照して頂きたい。周期タイマーの例として基礎１，２講座で使用するタイマードライバを参照して頂きたい。

4.1.7 UART
UART 用のデバイスドライバは asp-1.9.2 で実装済のデバイスドライバを使用しているため、ここでは記載しない。

4.2 Standard Driver
スタンダードドライバは拡張ボード（シールド）の標準化により、ドライバ API がデファクトスタン
ダードとなっているドライバを指す。但し、ペリフェラルの実装は標準化されたドライバ API 以上の機能を持つものが多く、ハードウェアを最大限に利用するのは拡張インターフェイスにて拡張を行う必要がある。

4.2.1 概要
TOPPERS BASE PLATFORM として、スタンダードドライバとしたのは、以下の７つのペリフェラ
ルである。いずれもインターフェイス用のペリフェラルであり、接続先にセンサー、LCD、GLCD、SD
card、ネットワークハードウェア等の機器の制御用に用いられる。個々のハードウェアのドライバは別途上位に GDIC ドライバを用意しなければならない。
① I2C
② SPI
③ ADC
④ RTC
⑤ USB OTG
⑥ QSPI⑦ USB
スタンダードドライバは、基本的にポート ID を指定してハンドラを取り出しハンドラを用いてペリフ
ェラルを制御する構成を取る。

4.2.2 I2C
I2C（アイ・スクエア・シー）は周辺機との通信用にフィリップス社が開発した低速なシリアルバス
である。メインボード側がマスタ、周辺機側がスレーブとなり、スレーブアドレスをキーにデータの送受信を行う。基本的な通信速度は 100kbit/sec の通常モードと 10kbit/sec の低速モードがあるが、基本
以上、または、基本以下の速度で通信を行う場合も多い。スレーブアドレスは通常は７ビットであるが、拡張として１０ビットのスレーブアドレスも通信可能となっている。

24

I2C は SCL（クロック）と SDA（データ）の２つの線で通信を行う、周辺機が複数ある場合はこの２つの線を共有する形となる。マスタ側が常に制御権を持っており基本のクロック SCL はマスタ側が設定する。但し、スレーブ側で待ちが必要な場合は、スレーブ側 SCL 信号を Low に落として待ち状態を作る。送信を行う場合は、送信側がクロックに合わせて SDA 上にデータ信号を乗せる。最後の８ビ
ット目で受信側が SDA を Low にした場合は ACK となり、Hi のままならば NACK となる。スレーブ
アドレス 7bit の一般的なデータ転送を図 4.2.2.1 に示す。

図 4.2.2.1 スレーブアドレス 7bit のデータ転送

4.2.2.1 データ仕様
I2C ドライバは初期化用の型として、
表 4.2.2.1.1 と表 4.2.2.1.2 の I2C コンフィギュレーション型と、
ハンドラとして表 4.2.2.1.3 の I2C ハンドラ型を持つ。
番号

項目

型

機能

1
2
3
4
5
6
7
8
9
10

ClockSpeed
DutyCycle
OwnAddress1
AddressingMode
DualAddressMode
OwnAddress2
GenealCallMode
NoStretchModesemid
smlockuint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
int
int

通信クロックスピード(bps)ディーティサイクル設定
スレーブアドレス１(スレーブの場合のみ)
アドレスモード(7bit or 10bit)
2 つのスレーブアドレスを持つかの設定(スレーブの場合のみ)
スレーブアドレス２(スレーブの場合のみ)

ジェネラルコールモード設定
ノースストレッジモード設定
通信用セマフォ ID（0 でセマフォなし）
排他制御用セマフォ ID(0 で排他制御なし)

表 4.2.2.1.1 STM32F4xx I2C コンフィギュレーション型

番号

項目

型

機能

1
2
3
4
5
6
7
8
9

TimingOwnAddress1
AddressingMode
DualAddressMode
OwnAddress2
GenealCallMode
NoStretchModesemid
smlockuint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
int
int

通信クロックタイミング設定
スレーブアドレス１(スレーブの場合のみ)
アドレスモード(7bit or 10bit)
2 つのスレーブアドレスを持つかの設定(スレーブの場合のみ)
スレーブアドレス２(スレーブの場合のみ)

ジェネラルコールモード設定
ノースストレッジモード設定
通信用セマフォ ID（0 でセマフォなし）
排他制御用セマフォ ID(0 で排他制御なし)

表 4.2.2.1.2 STM32F7xx I2C コンフィギュレーション型

25

番号

項目

型

機能

1
2
3
4
5
6
7
8
9
10

TimingOwnAddress1
AddressingMode
DualAddressMode
OwnAddress2Masks
OwnAddress2
GenealCallMode
NoStretchModesemid
smlockuint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
int
int

通信クロックタイミング設定
スレーブアドレス１(スレーブの場合のみ)
アドレスモード(7bit or 10bit)
2 つのスレーブアドレスを持つかの設定(スレーブの場合のみ)
スレーブアドレス２のマスク設定
スレーブアドレス２(スレーブの場合のみ)

ジェネラルコールモード設定
ノースストレッジモード設定
通信用セマフォ ID（0 でセマフォなし）
排他制御用セマフォ ID(0 で排他制御なし)

表 4.2.2.1.3 STM32F0xx/STM32L0xx/STML4xx I2C コンフィギュレーション型
コンフュギュレーション型は、SoC により若干異なる。
クロックスピードの設定を STM32F4xx では、ClockSpeed と DutyCycle で設定するが、STM32F7xx では、ベースクロックからの分周値で設定するように変更されているためである。STM32F0xx/STM32L0xx/STML4xx では、OwnAddress2Mask 設定が追加されている。
semid はセマフォ通信用のセマフォ番号、ゼロで設定なし。このセマフォは割込みとドライバ間の伝達用に使用するため、設定なしの場合、通信遅延が発生する。smlock は、ドライバの排他制御に使用するセマフォ番号を指定する。ゼロの設定で排他制御なしとなる。
番号

項目

型

機能

1
2
3
4
5

base
Init
pBuffPtr
XferSize
XferCount

I2C ベースアドレス
I2C コンフィギュレーション型
通信データ領域へのポインタ
通信バイト数
通信済みバイト数

6
7
8
9
10

writecallback
readcallback
errorcallback
i2cid
status11

ErrorCodeuint32_t
I2C_Init_t
uint8_t *uint16_t
volatile
uint16_t
void (*)()
void (*)()
void (*)()
ID
volatile
uint32_t
volatile
uint32_t

送信終了コールバック
受信終了コールバック
エラーコールバック
I2C ポート ID
I2C ドライバの状態
I2C エラーコード

表 4.2.2.1.4 I2C ハンドラ型(STM32F4xx/STM32F7xx)

番号

項目

型

機能

1
2
3
4
5
6

base
Init
pBuffPtr
XferOptions
XferSize
XferCount

I2C ベースアドレス
I2C コンフィギュレーション型
通信データ領域へのポインタ
通信オプション
通信バイト数
通信済みバイト数

7

XferCount2

8910AddrEventCountwritecallback
readcallback

uint32_t
I2C_Init_t
uint8_t *uint32_t
uint16_t
volatile
uint16_t
volatile
uint16_t
uint32_tvoid (*)()
void (*)()

通信済みバイト数
ADDR イベントカウンタ
送信終了コールバック
受信終了コールバック

26

11
12
13
14
15

listencallbak
addrcallback
errorcallback
i2cid
status16

ErrorCodevoid (*)()
void (*)()
void (*)()
ID
volatile
uint32_t
volatile
uint32_t

LISTEN コールバック（スレーブ専用）
ADDR コールバック（スレーブ専用）
エラーコールバック
I2C ポート ID
I2C ドライバの状態
I2C エラーコード

表 4.2.2.1.5 I2C ハンドラ型(STM32F0xx/STM32L0xx/STM32L4xx)①

DutyCycle

デューティサイクル設定。(STM32F4xx のみ)
定義

I2C_DUTYCYCLE_2
I2C_DUTYCYCLE_16_9

値

内容

0x00000000
I2C_CCR_DUTY

表 4.2.2.1.6 DutyCycle 設定値②

AddressingModeI2C のアドレッシング・モード、STM32F4xx と STM32F7xx では値が異なる。
定義

I2C_ADDRESSINGMODE_7BIT
I2C_ADDRESSINGMODE_10BIT値(32f4xx)

0x00004000
0x0000C000

内容

7 ビットモード
10 ビットモード

表 4.2.2.1.7 AddressingMode 設定値③ DualAddressMode
デュアルアドレスモード設定、STM32F4xx と STM32F746 では値が異なる。
定義

値(32f4xx)

内容

I2C_DUALADDRESS_DISABLE
0x00000000
I2C_DUALADDRESS_ENABLE
I2C_OAR2_ENDUAL
表 4.2.2.1.8 DualAddressMode 設定値

デュアルモード無効
デュアルモード有効④ GeneralCallMode
ジェネラルコールモード設定、STM32F4xx と STM32F746 では値が異なる。
定義

I2C_GENERALCALL_DISABLE
I2C_GENERALCALL_ENABLE

値(32f4xx)

0x00000000
I2C_CR1_ENGC

内容

ジェネラルコールモード無効ジェネラルコールモード有効

表 4.2.2.1.9 GeneralCallMode 設定値⑤ NoStretchMode
ノースストレッジモード設定、STM32F4xx と STM32F746 では値が異なる。
定義

値

I2C_NOSTRETCH_DISABLE
0x00000000
I2C_NOSTRETCH_ENABLE
I2C_CR1_NOSTRETCH
表 4.2.2.1.10 NoStretchMode 設定値

内容

ノースストレッジモード無効
ノースストレッジモード有効

4.2.2.2 インターフェイス仕様
I2C を制御するドライバ関数は以下の通りである。

27

関数名

型

引数

機能

i2c_init

I2C_Handler*

ID portid
I2C_Init_t *ii2ci2c_deinit
i2c_slavewriteERER

i2c_slavereadER

i2c_memwriteER

i2c_memreadER

i2c_ev_handler
i2c_er_handler
i2c_ev_isr

void
void
void

I2C_Handler* hi2c
I2C_Handler* hi2c
uint8_t *pData
uint16_t Size
I2C_Handler* hi2c
uint8_t *pData
uint16_t Size
I2C_Handler* hi2c
uint16_t DevAddr
uint16_t MemAddr
uint16_t MemAddSize
uint8_t *pData
uint16_t Size
I2C_Handler* hi2c
uint16_t DevAddr
uint16_t MemAddr
uint16_t MemAddSize
uint8_t *pData
uint16_t Size
I2C_Handler* hi2c
I2C_Handler* hi2c
intptr_t exinf

指定ポート ID の I2C ペリフェラルを初期化し、ハンドラへのポインタを返す
I2C を未使用状態に戻す
スレーブモードのデータ送信

i2c_er_isr
i2c_isrvoid
void

intptr_t exinf
intptr_t exinf

備考

スレーブモードのデータ受信

マスターモードのデータ送信、
MemAddSize をゼロにするとアドレス設定を行わない

マスターモードのデータ受信、
MemAddSize をゼロにするとアドレス設定を行わない

I2C イベント割込みハンドラ関数
I2C エラー割込みハンドラ関数
I2C イベント割込みサービスルーチ
ン
I2C エラー割込みサービスルーチン
I2C 割込み

F7/F4
F7/F4
F0/L0

表 4.2.2.2.1 I2C ドライバ関数

4.2.2.3 フローチャート
I2C の初期設定は、i2c_init 関数を指定して対象ポート番号と初期設定したコンフィギュレーション
構造体のポインタを指定します。BASE PLATFORM を使用する環境ではマスタとして使用しますので、マスタからペリフェラルとの通信方法について記載します。基本的に、このドライバでは割込みを使用
してデータの送受信を行う。また、スタート、ストップ、ACK 処理はペリフェラル側で処理するので、マスタの場合、スレーブアドレスと送受信するデータ領域へのポインタと転送サイズを指定する。スレーブの場合、初期化でスレーブアドレスをセットして 、送受信関数でバッファの設定を行う。
PLATFORM はスレーブなることはないと思われますのでスレーブの説明は行いません。
図 4.2.2.3.1 に初期化のフローチャートを示します。i2c_init で取得した I2C ハンドラへのポインタは
以後、I2C の制御用に使用する。

28

図 4.2.2.3.1 初期化フローチャート
図 4.2.2.3.2 にマスタのデータ送信のフローチャート、図 4.2.2.3.3 に受信のフローチャートを示す。
送信ならば i2c_memwrite、
受信ならば i2c_memread 関数を呼び出せば指定サイズの送受信が行える。
送受信の結果は、関数の戻り値確認できる。E_OK 以外の戻り値の場合エラー処理を行ってください。
ペリフェラルには、データアドレスを持つもの（EEPROM や RTC など）があり、送受信のとき、データアドレスの設定を行う必要がある。この場合、MemAddr でデータアドレス、MemAddSize でデー
タアドレスのバイトサイズを指定する。データアドレスの設定を行わない場合は、MemAddrSize をゼロして、送受信関数を呼び出す。
I2C ペリフェラルを終了させたい場合は、引数として I2C ハンドラへのポインタを指定して i2c_deinit関数を呼び出せば、ペリフェラルとハンドラは未使用状態に戻ります。
I2C の割込みはイベント割込みとエラー割込みがあり、イベント割込みは I2C 内部のデータ遷移用に使用され、エラー発生時のみエラー割込みが発生します。エラー内容は、ハンドラの ErrorCode に設定される。ErrorCode がゼロの場合はエラーなしで、エラーが発生した場合の ErrorCode の値は表
4.2.2.3.1 の ErrorCode の内容に示す。
定義

I2C_ERROR_NONE
I2C_ERROR_BERR
I2C_ERROR_ARLO
I2C_ERROR_AF
I2C_ERROR_OVR
I2C_ERROR_DMA
I2C_ERROR_TIMEOUT
I2C_ERROR_SIZE

値

0x00000000
0x00000001
0x00000002
0x00000004
0x00000008
0x00000010
0x00000020
0x00000040

内容

エラーなし
バスエラー
アービテーション・ロス・エラー
ACK フォルトエラー
オーバーランまたはアンダーラン・エラー
DMA 転送エラー（未実装）
転送タイムアウト（未実装）
転送サイズエラー（未実装）

表 4.2.2.3.1 ErrorCode の内容

29図 4.2.2.3.2 I2C 送信フローチャート

図 4.2.2.3.3 I2C 受信フローチャート

4.2.3 SPISPI はシリアル・ペリフェラル・インターフェイスの略で、I2C と同様にペリフェラル間の通信規格である。I2C が高速でも 400kbps であるのに比べ SPI は 1Mbps から 20Mbps まで高速転送が可能である。特に受信で使用する場合、ポーリングや割込みではオーバーラン・エラーとなってしまう場合が多い。SPI は４本の信号で通信を行う。スレーブが複数ある場合は、SS(Slave Select)を LOW にしたスレーブに対して通信を行う。そのため、SS 信号はスレーブの数だけ必要となる。また、双方向通信時は
MISO と MOSI は同時にデータ通信するので、同時にデータ交換が行われる形となる。
① SCLK
クロック信号② MISO
スレーブからのデータ信号③ MOSI
マスタからのデータ信号

30

④ SS

スレーブのセレクト信号

図 4.2.3.1 SPI 接続図
SPI 通信は、クロックの論理（正と負）、クロックに対するデータ設定タイミングにより４つのモードのデータ・タイミングが定義されている。
① モード０：正パルス、前縁ラッチ、後端シフト② モード１：正パルス、前縁シフト、後端ラッチ③ モード２：負パルス、前縁ラッチ、後端シフト④ モード３：負パルス、前縁シフト、後端ラッチ
図 4.2.3.2 はもっとも一般的なモード０の動作タイミングを示す。
SS

SCLK

MOSI
MSB

MISO

LSB

図 4.2.3.2 モード０、正パルス、前縁ラッチ、後端シフトのタイミング図

4.2.3.1 データ仕様
SPI ドライバは初期化用の型として、表 4.2.3.1.1 と表 4.2.3.1.2 の SPI コンフィギュレーション型と、
ハンドラとして表 4.2.3.1.3 の SPI ハンドラ型を持つ。
番号

項目

型

機能

1
2
3
4
5
6
7
8
9
10
11
12
13

Mode
Direction
DataSize
CLKPolarity
CLKPhase
NSS
Prescaler
SignBitTIModeCRC
CRCPolynoial
semid
smlockuint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
int
int

SPI マスタースレーブ設定
SPI 転送方向
SPI 転送データサイズ
SPI 転送クロックの極性
SPI クロック位相
SPI NSSSPI クロック分周設定
SPI MSB/LSB 設定
SPI TI モード
SPI CRC 演算設定
SPI CRC 多項式設定
通信用セマフォ ID（0 でセマフォなし）
排他制御用セマフォ ID(0 で排他制御なし)

31

表 4.2.3.1.1 STM32F4xx/STM32L0xx SPI コンフィギュレーション型
番号

項目

型

機能

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

Mode
Direction
DataSize
CLKPolarity
CLKPhase
NSS
Prescaler
SignBitTIModeCRC
CRCPolynoial
CRCLength
GpioCLKPull
GpioDataPull
TxDMAChannel(Stream)
RxDMAChannel(Stream)semid
smlockuint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
int32_tint32_tint32_tint32_t
int
int

SPI マスタースレーブ設定
SPI 転送方向
SPI 転送データサイズ
SPI 転送クロックの極性
SPI クロック位相
SPI NSSSPI クロック分周設定
SPI MSB/LSB 設定
SPI TI モード
SPI CRC 演算設定
SPI CRC 多項式設定
SPI CRC 長
SPI クロックの Pull 属性を指定(*)
SPI データの Pull 属性を指定(*)
SPI の TX-DMA のチャネルを指定(*)
SPI の RX-DMA のチャネルを指定(*)
通信用セマフォ ID（0 でセマフォなし）
排他制御用セマフォ ID(0 で排他制御なし)

表 4.2.3.1.2 STM32F7xx SPI コンフィギュレーション型(*STM32H7xx/STM32G4xx のみ)

番号

項目

型

機能

1
2
3
4
5
6
7
8
9
10
11
12
13
13
14

Mode
Direction
DataSize
CLKPolarity
CLKPhase
NSS
Prescaler
SignBitTIModeCRC
CRCPolynoial
CRCLength
NSSPMode
semid
smlockuint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
int
int

SPI マスタースレーブ設定
SPI 転送方向
SPI 転送データサイズ
SPI 転送クロックの極性
SPI クロック位相
SPI NSSSPI クロック分周設定
SPI MSB/LSB 設定
SPI TI モード
SPI CRC 演算設定
SPI CRC 多項式設定
SPI CRC 長
SPI NSSP モード
通信用セマフォ ID（0 でセマフォなし）
排他制御用セマフォ ID(0 で排他制御なし)

表 4.2.3.1.3 STM32F0xx/STM32L4xx SPI コンフィギュレーション型
コンフュギュレーション型は、STM32F4xx と STM32F746 で若干異なる。STM32F746 の方が SPI
ペリフェラルに若干の拡張がある。
semid はセマフォ通信用のセマフォ番号、ゼロで設定なし。このセマフォは割込みとドライバ間の伝達用に使用するため、設定なしの場合、通信遅延が発生する。smlock は、ドライバの排他制御に使用するセマフォ番号を指定する。ゼロの設定で排他制御なしとなる。
番号

項目

型

機能

1

base

uint32_t

SPI ベースアドレス

32

2
3
4
5
6
7
8
9
10
11
12

Init
pTxBuffPtr
TxXferSize
TxXferCount
pRxBuffPtr
RxXferSize
RxXferCount
hdmatxhdmarxxmode
status13

ErrorCodeSPI_Init_t
uint8_t *uint16_t
uint16_t
uint8_t *uint16_t
uint16_t
DMA_Handle_t*
DMA_Handle_t*volatile
uint32_t
volatile
uint32_t

SPI コンフィギュレーション型
送信データ領域へのポインタ
送信バイト数
送信済みバイト数
受信データ領域へのポインタ
受信バイト数
受信済みバイト数
送信用 DMA ハンドラ
受信用 DMA ハンドラ
SPI 転送モード
SPI ドライバの状態
SPI エラーコード

表 4.2.3.1.4 SPI ハンドラ型①

Mode

SPI のモード設定。
定義

SPI_MODE_SLAVESPI_MODE_MASTER

値

内容

0x00000000
SPI_CR1_MSTR|SPI_CR1_SSI

スレーブモード
マスターモード

表 4.2.3.1.5 Mode 設定値② Direction
SPI 通信方向設定のモード設定。
定義

値

SPI_DIRECTION_2LINESSPI_DIRECTION_2LINES_RXONLYSPI_DIRECTION_1LINE

0x00000000
SPI_CR1_RXONLYSPI_CR1_BIDIMODE

内容

２ラインモード
２ライン受信のみ
片方向モード

表 4.2.3.1.6 Direction 設定値③ DataSize
SPI データ転送ビットサイズ、STM32F4xx と STM32F746 で設定値が異なる。
定義

SPI_DATASIZE_8BIT
SPI_DATASIZE_16BIT

値(STM32F4xx)

0x00000000
SPI_CR1_DFF

内容

データサイズ８ビット
データサイズ１６ビット

表 4.2.3.1.7 Direction 設定値④ CLKPolarity
SPI 転送クロック極性定義。
定義

SPI_POLARITY_LOW
SPI_POLARITY_HIGH

値0x00000000
SPI_CR1_CPOL

内容極性 LOW
極性 HIGH

表 4.2.3.1.8 CLKPolarity 設定値⑤ CLKPhase
SPI 転送クロック位相定義。
定義

SPI_PHASE_1EDGE
SPI_PHASE_2EDGE

値

0x00000000
SPI_CR1_CPHA

内容

前縁ラッチ
後縁ラッチ

表 4.2.3.1.9 CLKPhase 設定値
⑥ NSS

33

SPI NSS 定義。
定義

SPI_NSS_SOFT
SPI_NSS_HARD_INPUTSPI_NSS_HARD_OUTPUT

値

内容

SPI_CR1_SSM
0x00000000
0x00040000

表 4.2.3.1.10 NSS 設定値⑦ Prescaler
SPI クロック分周比設定値。
定義

値

SPI_BAUDRATEPRESCALER_2
SPI_BAUDRATEPRESCALER_4
SPI_BAUDRATEPRESCALER_8
SPI_BAUDRATEPRESCALER_16
SPI_BAUDRATEPRESCALER_32
SPI_BAUDRATEPRESCALER_64
SPI_BAUDRATEPRESCALER_128
SPI_BAUDRATEPRESCALER_256

0x00000000
0x00000008
0x00000010
0x00000018
0x00000020
0x00000028
0x00000030
0x00000038

内容

2 分周
4 分周
8 分周
16 分周
32 分周
64 分周
128 分周256 分周表 4.2.3.1.11 Prescaler 設定値⑧ SignBit
SPI データ MSB/LSB 設定値。
定義

値

SPI_DATA_MSB
SPI_DATA_LSB

0x00000000
SPI_CR1_LSBFIRST

内容

転送データ MSB
転送データ LSB

表 4.2.3.1.12 SignBit 設定値⑨ TIMode
SPI NSS 定義。
定義

SPI_TIMODE_DISABLE
SPI_TIMODE_ENABLE

値

0x00000000
SPI_CR2_FRF

内容

TI モード無効
TI モード有効

表 4.2.3.1.13 TIMode 設定値⑩ CRC
SPI 自動 CRC 設定。
定義

SPI_CRC_DISABLE
SPI_CRC_ENABLE

値

0x00000000
SPI_CR1_CRCEN

内容

自動 CRC 無効
自動 CRC 有効

表 4.2.3.1.14 CRC 設定値⑪ CRCLength
SPI CRC 長設定、STM32F746 のみ。
定義

SPI_CRC_LENGTH_DATASIZE
SPI_CRC_LENGTH_8BIT
SPI_CRC_LENGTH_16BIT

値

0x00000000
0x00000001
0x00000002

内容

データサイズと同様
8 ビット
16 ビット

表 4.2.3.1.15 CRCLength 設定値

4.2.3.2 インターフェイス仕様
SPI を制御するドライバ関数は以下の通りである。SS の設定は、GPIO を使って別途制御しなければ34

ならない。
関数名

型

引数

機能

spi_init

SPI_Handler*

ID portid
SPI_Init_t *spii

spi_deinit
spi_transmit

ERER

spi_receiveER

spi_transrecv

ER

spi_wait
spi_handler
spi_isr

ER
void
void

SPI_Handler* hspi
SPI_Handler* hspi
uint8_t *pdata
uint16_t length
SPI_Handler* hspi
uint8_t *pdata
uint16_t length
SPI_Handler* hspi
uint8_t *ptxData
uint8_t *prxData
uint16_t length
SPI_Handler* hspi
SPI_Handler* hspi
intptr_t exinf

指定ポート ID の SPI ペリフェラルを初期化し、ハンドラへのポインタを返す
SPI を未使用状態に戻す
SPI 送信を行う

備考

SPI 受信を行う
SPI 送受信を行う

SPI 転送の終了待ちを行う
SPI 割込みハンドラ関数
SPI 割込みサービスルーチン

表 4.2.3.2.1 SPI ドライバ関数

4.2.3.3 フローチャート
SPI ドライバは、必ず送受信とも DMA を使用するように設計しています。スレーブの機能はありません。SPI の初期設定は、spi_init 関数を指定して対象ポート番号と初期設定したコンフィギュレーシ
ョン構造体のポインタを指定します。ペリフェラルには受信のみ、送信のみ、送受信があり、それぞれの転送関数を用意しています。
実際はほとんどの場合、spi_transsrev ですべての転送を行えます。V1.1.0
では転送の終了待ち用に spi_wait 関数を呼び出し関数内で終了待ちを必要があります。V1.2.0 以降ではコンパイルスイッチ SPI_WAIT_TIME に 0 を超える数値を設定すれば、
spi_transrev 内で転送 length
× SPI_WAIT_TIME(ms) の 待 ち を 実 行 し 、 spi_wait 関 数 を 使 用 す る 必 要 は あ り ま せ ん 。
SPI_WAIT_TIME を定義しない場合、または 0 を設定した場合は V1.1.0 と同等の仕様となります。
シリアル通信を行う場合、対象のペリフェラルの SS 信号を LOW に制御する必要があります。SS 信
号の操作は GPIO を直接制御します。
図 4.2.3.3.1 に SPI の初期化フローチャートを記載します。SPI 割込み、DMA 割込み、通信と排他制
御用セマフォの静的 API を用いて登録します。SS ポートの管理は SPI ドライバでは行わないため、複数のスレーブがある場合、また、スレーブ自体で SS 信号を要求している場合、SS ポートの GPIO 初期
化処理を行わなければならない。

35

図 4.2.3.3.1 SPI 初期化フローチャート
図 4.2.3.3.2 に SPI の送受信のフローチャートを記載します。複数のスレーブの対応を行う場合は、
SS の設定を行わなければならない。送受信の処理は、送信のみのスレーブや受信のみのスレーブであっても、spi_tranrecv 関数で処理を代用できる。送信のみのスレーブでこの関数を使用した場合、受信データとして 0xFF が受信され、受信のみのスレーブで、この関数を代用した場合、設定値が送信されるが、スレーブ側では受信しない。
送受信の場合、送信と同期して受信データが受信領域にセットされる。転送待ちは spi_wait 関数にて行う。戻り値が E_OK 以外はエラーが発生している。エラーの詳細は SPI ハンドラの ErrorCode にセットされる。

定義

SPI_ERROR_NONE
SPI_ERROR_MODF
SPI_ERROR_CRC
SPI_ERROR_OVR
SPI_ERROR_FRE
SPI_ERROR_DMA
SPI_ERROR_TIMEOUT

値

0x00000000
0x00000001
0x00000002
0x00000004
0x00000008
0x00000010
0x00000020

内容

エラーなし
モードフォルト判定
CRC エラー
オーバーラン・エラー
フレーム・エラー
DMA 転送エラー
ステート変更タイムアウト

表 4.2.3.3.1 ErrorCode の内容

36図 4.2.3.3.2 SPI 送受信フローチャート

4.2.4 ADC
ADC(アナログ・データ・コントローラ)は、アナログ入力データをデジタル・データに変換するドライバである。

4.2.4.1 データ仕様
ADC ドライバは初期化用の型として、表 4.2.4.1.1 の ADC コンフィギュレーション型と、ハンドラ
として表 4.2.4.1.4 の ADC ハンドラ型を持つ。ADC の設定後、チャネルの設定用に表 4.2.4.1.2 の ADC
チャネル設定型と、必ずしも設定の必要のない ADC ウォッチドック設定のための表 4.2.4.1.3 の ADC
ウォッチドック型がある。
番号

項目

型

機能

1
2
3
4
5
6

ClockPrescaler
Resolution
DataAlign
ScanConvMode
EOCSelection
ContinuousConvModeuint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t

ADC クロックプリスケーラ値(各 ADC にて共通値)
ADC のリゾリューション
ADC 結果データアライン設定
ADC スキャンコンバージョンモード
ADC EOC 設定
ADC 継続モード

37

7
8
9
10
11
12
13

DMAContinuousRequests
NumConversion
DiscontinuousConvMode
NumDiscConversion
ExternalTrigConv
ExternalTrigConvEdge
DMAChannel(Stream)

uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
int32_t

ADC-DMA モード
ADC コンバージョン数
ADC 非継続モード
ADC 非継続変換数
ADC 外部トリガ設定
ADC 外部トリガエッジ設定
STM32H7xx/STMG4xx に対して DMA を指定するアイテ
ムを追加する表 4.2.4.1.1 ADC コンフィギュレーション型
番号

項目

型

機能

1
2
3
4
5

ChannelRank
SamplingTime
GpioBase
GpioPinuint32_t
uint32_t
uint32_t
uint32_t
uint32_t

ADC チャンネル番号
ADC ランク番号(1-16)
ADC サンプリング時間
ADC-GPIO ベースアドレス
ADC-GPIO ピン番号

表 4.2.4.1.2 ADC チャネル設定型
番号

項目

型

機能

1
2
3
4
5

WatchdogMode
HighThreshold
LowThreshold
ChannelITModeuint32_t
uint32_t
uint32_t
uint32_t
uint32_t

ADC アナログウォッチドッグモード
ADC スレッシュホールド上限値
ADC スレッシュホールド下限値
ADC 対応チャネル番号
ADC アナログウォッチドック割込み設定

表 4.2.4.1.2 ADC ウォッチドック設定型
番号

項目

型

機能

1
2
3
4
5
6
7
8
9
10

base
Init
NumCurrentConversionRank
hdmarxxfercallback
xferhalfcallback
outofwincallback
errorcallback
statusErrorCodeuint32_t
ADC_Init_t
volatile uint32_t
DMA_Handle_t*void (*)()
void (*)()
void (*)()
void (*)()
volatile uint32_t
volatile uint32_t

ADC ペリフェラルのベースアドレス
ADC 初期化設定パラメータ
コンバージョンカウンタ
SPI 受信 DMA のハンドラ
転送完了時コールバック関数
ハーフ転送発生時のコールバック関数
ADC ウォッチドックのコールバック関数

ADC エラー発生時のコールバック関数
ADC の状態
ADC エラーコード

表 4.2.4.1.4 ADC ハンドラ型① ClockPrescaler
ADC クロック分周設定。
定義

値

ADC_CLOCK_SYNC_PCLK_DIV2 0x00000000
ADC_CLOCK_SYNC_PCLK_DIV4 ADC_CCR_ADCPRE_0
ADC_CLOCK_SYNC_PCLK_DIV6 ADC_CCR_ADCPRE_1
ADC_CLOCK_SYNC_PCLK_DIV8 ADC_CCR_ADCPRE
表 4.2.4.1.5 ClockPrescaler 設定値

内容

2 分周
4 分周
6 分周
8 分周

② Resolution
ADC リゾリューション（変換データのビット数）設定。
定義

ADC_RESOLUTION_12B

値

0x00000000

内容

12bit

38

ADC_RESOLUTION_10B
ADC_CR1_RES_0
ADC_RESOLUTION_8B
ADC_CR1_RES_1
ADC_RESOLUTION_6B
ADC_CR1_RES
表 4.2.4.1.6 Resolution 設定値

10bit
8bit
6bit

③ DataAlign
ADC 変換データの右詰、左詰めを設定。
定義

値

ADC_DATAALIGN_RIGHTADC_DATAALIGN_LEFT

内容

0x00000000
ADC_CR2_ALIGN

表 4.2.4.1.7 DataAlign 設定値④ ScanConvMode
ADC スキャンモード設定。
値

内容

ADC_SCANMODE_DISABLE
0x00000000
ADC_SCANMODE_ENABLE
ADC_CR1_SCAN
表 4.2.4.1.8 ScanConvMode 設定値

定義

無効
有効

⑤ EOCSelection
ADC EOC シーケンスモード設定。
値

内容

ADC_EOC_SEQ_DISABLE
0x00000000
ADC_EOC_SEQ_ENABLE
ADC_CR2_EOCS
表 4.2.4.1.9 EOCSelection 設定値

定義

無効
有効

⑥ ContinuousConvMode
ADC 継続モード設定。
値

内容

ADC_CONTINUOUS_DISABLE 0x00000000
ADC_CONTINUOUS_ENABLE ADC_CR2_CONT
表 4.2.4.1.10 ContinuousConvMode 設定値

定義

無効
有効

⑦ DMAContinuousRequests
ADC DMA 継続モード設定。
定義

値

ADC_DMACONTINUOUS_DISABLE
0x00000000
ADC_DMACONTINUOUS_ENABLE
ADC_CR2_DDS
ADC_DMACONTINUOUS_ENABLE2
ADC_CR2_DDS+1<<31
表 4.2.4.1.11 DMAContinuousRequests 設定値

内容

無効
有効(DMA CIRCULAR)
有効(DMA NORMAL)⑧ DiscontinuousConvMode
ADC 非継続モード設定。
定義

値

内容

ADC_DISCONTINUOUS_DISABLE
0x00000000
ADC_DISCONTINUOUS_ENABLE
ADC_CR1_DISCEN
表 4.2.4.1.12 DiscontinuousConvMode 設定値

無効
有効⑨ ExternalTrigConv
ADC 外部トリガソース設定。
定義

ADC_EXTERNALTRIGCONV_T1_CC1
ADC_EXTERNALTRIGCONV_T1_CC2

値0x00000000
ADC_CR2_EXTSEL_0

内容

T1 CC1T1 CC239

ADC_EXTERNALTRIGCONV_T1_CC3
ADC_EXTERNALTRIGCONV_T2_CC2
ADC_EXTERNALTRIGCONV_T2_CC3
ADC_EXTERNALTRIGCONV_T2_CC4
ADC_EXTERNALTRIGCONV_T2_TRGO
ADC_EXTERNALTRIGCONV_T3_CC1
ADC_EXTERNALTRIGCONV_T3_TRGO
ADC_EXTERNALTRIGCONV_T4_CC4ADC_EXTERNALTRIGCONV_T5_CC1
ADC_EXTERNALTRIGCONV_T5_CC2
ADC_EXTERNALTRIGCONV_T5_CC3
ADC_EXTERNALTRIGCONV_T8_CC1
ADC_EXTERNALTRIGCONV_T8_TRGO

ADC_CR2_EXTSEL_1
ADC_CR2_EXTSEL_1 |ADC_CR2_EXTSEL_0
ADC_CR2_EXTSEL_2
ADC_CR2_EXTSEL_2 |ADC_CR2_EXTSEL_0
ADC_CR2_EXTSEL_2 |ADC_CR2_EXTSEL_1
ADC_CR2_EXTSEL_2 |ADC_CR2_EXTSEL_1 |ADC_CR2_EXTSEL_0
ADC_CR2_EXTSEL_3
ADC_CR2_EXTSEL_3 |ADC_CR2_EXTSEL_0
ADC_CR2_EXTSEL_3 |ADC_CR2_EXTSEL_1
ADC_CR2_EXTSEL_3 |ADC_CR2_EXTSEL_1 |ADC_CR2_EXTSEL_0
ADC_CR2_EXTSEL_3 |ADC_CR2_EXTSEL_2
ADC_CR2_EXTSEL_3 |ADC_CR2_EXTSEL_2 |ADC_CR2_EXTSEL_0
ADC_CR2_EXTSEL_3 |ADC_CR2_EXTSEL_2 |ADC_CR2_EXTSEL_1
ADC_CR2_EXTSELADC_CR2_EXTSEL+1

T1 CC3T2 CC2T2 CC3T2 CC4
T2 TRGOT3 CC1T3 TRGO
T4 CC4T5 CC1
T5 CC2
T5 CC3
T8 CC1
T8 TRGO

ADC_EXTERNALTRIGCONV_Ext_IT11
ADC_SOFTWARE_START
表 4.2.4.1.13 ExternalTrigConv 設定値

外部 IT11
ソフトトリガ

⑩ ExternalTrigConvEdge
ADC 外部トリガエッジ設定。
定義

値

ADC_EXTERNALTRIGCONVEDGE_NONE
ADC_EXTERNALTRIGCONVEDGE_RISING
ADC_EXTERNALTRIGCONVEDGE_FALLING
ADC_EXTERNALTRIGCONVEDGE_RISINGFALLING
表 4.2.4.1.14 ExternalTrigConvEdge 設定値

内容0x00000000
ADC_CR2_EXTEN_0
ADC_CR2_EXTEN_1
ADC_CR2_EXTEN

なし
ライジング
フォーリング両エッジ⑪ Channel
ADC チャネル番号設定。
定義

値

ADC_CHANNEL_0
ADC_CHANNEL_1
ADC_CHANNEL_2
ADC_CHANNEL_3
ADC_CHANNEL_4
ADC_CHANNEL_5
ADC_CHANNEL_6
ADC_CHANNEL_7

0x00000000
ADC_CR1_AWDCH_0
ADC_CR1_AWDCH_1
ADC_CR1_AWDCH_1 | ADC_CR1_AWDCH_0
ADC_CR1_AWDCH_2
ADC_CR1_AWDCH_2 | ADC_CR1_AWDCH_0
ADC_CR1_AWDCH_2 | ADC_CR1_AWDCH_1
ADC_CR1_AWDCH_2 | ADC_CR1_AWDCH_1 |ADC_CR1_AWDCH_0
ADC_CR1_AWDCH_3
ADC_CR1_AWDCH_3 | ADC_CR1_AWDCH_0

ADC_CHANNEL_8
ADC_CHANNEL_9

内容チャネル 0チャネル 1チャネル 2チャネル 3チャネル 4チャネル 5チャネル 6チャネル 7チャネル 8チャネル 940

ADC_CHANNEL_10
ADC_CHANNEL_11

ADC_CR1_AWDCH_3 | ADC_CR1_AWDCH_1
ADC_CR1_AWDCH_3 | ADC_CR1_AWDCH_1
ADC_CR1_AWDCH_0
ADC_CHANNEL_12
ADC_CR1_AWDCH_3 | ADC_CR1_AWDCH_2
ADC_CHANNEL_13
ADC_CR1_AWDCH_3 | ADC_CR1_AWDCH_2
ADC_CR1_AWDCH_0
ADC_CHANNEL_14
ADC_CR1_AWDCH_3 | ADC_CR1_AWDCH_2
ADC_CR1_AWDCH_1
ADC_CHANNEL_15
ADC_CR1_AWDCH_3 | ADC_CR1_AWDCH_2
ADC_CR1_AWDCH_1 | ADC_CR1_AWDCH_0
ADC_CHANNEL_16
ADC_CR1_AWDCH_4
ADC_CHANNEL_17
ADC_CR1_AWDCH_4 | ADC_CR1_AWDCH_0
ADC_CHANNEL_18
ADC_CR1_AWDCH_4 | ADC_CR1_AWDCH_1
表 4.2.4.1.15 Channel 設定値|

チャネル 10チャネル 11|

チャネル 12チャネル 13|

チャネル 14|チャネル 15チャネル 16
チャネル VREFINT
チャネル VBAT⑫ SamplingTime
ADC チャネルサンプリングタイム設定。
定義

値

ADC_SAMPLETIME_3CYCLES
ADC_SAMPLETIME_15CYCLES
ADC_SAMPLETIME_28CYCLES
ADC_SAMPLETIME_56CYCLES
ADC_SAMPLETIME_84CYCLES
ADC_SAMPLETIME_112CYCLES
ADC_SAMPLETIME_144CYCLES

内容

0x00000000
ADC_SMPR1_SMP10_0
ADC_SMPR1_SMP10_1
ADC_SMPR1_SMP10_0 |ADC_SMPR1_SMP10_1
ADC_SMPR1_SMP10_2
ADC_SMPR1_SMP10_2 |ADC_SMPR1_SMP10_0
ADC_SMPR1_SMP10_2 |ADC_SMPR1_SMP10_1
ADC_SMPR1_SMP10

ADC_SAMPLETIME_480CYCLES
表 4.2.4.1.16 SamplingTime 設定値⑬ WatchdogMode3 サイクル
15 サイクル28 サイクル56 サイクル
84 サイクル
112 サイクル
144 サイクル
480 サイクル

ADC ウォッチドッグモード設定。
定義

ADC_ANALOGWATCHDOG_NONE
ADC_ANALOGWATCHDOG_SINGLE_REG
ADC_ANALOGWATCHDOG_SINGLE_INJEC
ADC_ANALOGWATCHDOG_SINGLE_REGINJEC
ADC_ANALOGWATCHDOG_ALL_REG
ADC_ANALOGWATCHDOG_ALL_INJEC
ADC_ANALOGWATCHDOG_ALL_REGINJEC

値

内容0x00000000
ADC_CR1_AWDSGLADC_CR1_AWDENADC_CR1_AWDSGLADC_CR1_JAWDENADC_CR1_AWDSGLADC_CR1_AWDENADC_CR1_JAWDENADC_CR1_AWDENADC_CR1_JAWDENADC_CR1_AWDENADC_CR1_JAWDEN

|
|
|
|

|

表 4.2.4.1.17 WatchdogMode 設定値⑭ ITMode
ADC アナログウォッチドック割込みモード設定。
定義

ADC_ANALOGWATCHDOG_ITMODE_DISABLE
ADC_ANALOGWATCHDOG_ITMODE_ENABLE
表 4.2.4.1.18 ITMode 設定値

値

0x00000000
ADC_CR1_AWDIE

内容

無効
有効

41

4.2.4.2 インターフェイス仕様
ADC を制御するドライバ関数は以下の通りである。入力ピンの設定は、GPIO を使って別途制御しなければならない。
関数名

型

引数

機能

adc_init

ADC_Handler*

ID portid
ADC_Init_t *pini

adc_deinit
adc_start_int
adc_end_int
adc_start_dma

ER
ER
ER
ER

adc_end_dma
adc_setupchannelERER

adc_setupwatchdocER

adc_handler
adc_int_handler

void
void

ADC_Handler* hadc
ADC_Handler* hadc
ADC_Handler* hadc
ADC_Handler* hadc
uint32_t *pdata
uint32_t length
ADC_Handler* hadc
ADC_Handler* hadc
ADC_ChannelConf_t*
sConfig
ADC_Handler* hadc
ADC_AnalogWDGConf_t*
AnalogWDGConfig
ADC_Handler* hadc
void

指定ポート ID の ADC ペリフ
ェラルを初期化し、ハンドラ
へのポインタを返す
ADC を未使用状態に戻す
ADC 割込みモード開始
ADC 割込みモード終了
ADC DMA モード開始

備考

ADC DMA モード終了
ADC チャネル設定
ADC ウォッチドック設定
ADC 割込みハンドラ関数
ADC 割込みハンドラ

表 4.2.4.2.1 ADC ドライバ関数

4.2.4.3 フローチャート
実行手順に影響を与えるモードは、以下の４つである。
(1) ScanConvMode
複数のチャネルが設定された場合、自動的にチャネルを変えながら AD 変換を行う設定(2) ContinuousConvMode
AD 変換回数を指定する。
回数は NumConversion にセットする。このモードを無効にした場合は single
mode になり、一度の AD 変換で終了。
Singe mode で NumConversion を設定した場合、割込みの停止回数設定となる。

(3) DiscontinuousConvMode
外部トリガの後、AD 変換を停止するチャネルの数を設定する。
(4) ExternalTrigConv
スキャンのタイミングを外部トリガで設定する。
ADC の複数機能を設定した場合、複雑なフローチャートのなるため、DMA を使用して１チャネルを１回変換するフローチャートを示す。
ADC の初期化(図 4.2.4.3.1)は、adc_init 関数にて ADC コントローラの初期化を行い。そのあと、ADC
チャネルの設定を行う。ADC 変換の実行(図 4.2.4.3.2)は adc_start_dma で起動、ハンドラ内の statusの値が ADC_STATUS_BUSY の間は実行中、終了すると ADC_STATUS_BUSY 以外の値に変わる。
ADC_STATUS_READY ならば正常終了であり、それ以外の値はエラーを示す。Adc_end_dma 関数で処理の停止を指定する。

42

図 4.2.4.3.1 ADC の初期設定

図 4.2.4.3.2 ADC 変換の実行

43

4.2.5 QSPIQSPI(クアッド・エスピーアイ)は、Quad SPI フラッシュメモリ等のシリアルメモリと通信を行うためのシリアル通信ドライバである。

4.2.5.1 データ仕様
QSPI ドライバは Quad SPI フラッシュメモリの通信定義用の型として、表 4.2.5.1.1 の QSPI コンフィギュレーション型と、ハンドラとして表 4.2.4.1.4 の QSPI ハンドラ型を持つ。QSPI コンフィギュレーション型は、QUAD SPI フラッシュメモリ種別毎に設定を行う必要がある。
番号

項目

型

機能

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32

manuf_id
type_capacity
clockprescaler
fifothresholdsampleshiftchipselecthightime
clockmode
flashiddualflashddrmodeddrholdhalfcycle
sioomode
addr_size
inst_type
inst_data_xfer_type
read_op_code
read_addr_xfer_type
read_data_xfer_type
read_dummy_cycle
write_op_code
write_addr_xfer_type
write_data_xfer_type
write_dummy_cycle
erase_counterase_size
erase_cmds
erase_secor_idx
device_size
init_func
enable_write_func
wait_func
friendly_nameuint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint8_tuint32_t x 2
uint8_t x 2
uint8_tuint32_t
ER (*)()ER (*)()ER (*)()
const char

Quad SPI フラッシュメモリのマニュファクチャ ID
Quad SPI フラッシュメモリのキャパシティタイプ
AHB に対するプリスケーラ
FIFO のスレッシュホールド値
CHIP Select High Time

クロックモード
FLASH ID
DUAL FLASH モード
DDR モード
DDR ホールドのハーフサイクル設定
スードモードアドレスサイズ設定
通常インストラクションのタイプ
通常インストラクションの転送タイプ
READ 処理のオペコード
READ 処理の転送アドレスタイプ
READ 処理の転送データタイプ
READ ダミーサイクル値
WRITE 処理のオペコード
WRITE 処理の転送アドレスタイプ
WRITE 処理の転送データタイプ
WRITE ダミーサイクル
ERASE 処理の数
ERASE の領域サイズ
ERASE オペコード
セクタ消去の番号
デバイスのバイトサイズ
初期化関数
ENABLE WRITE 関数
ERASE/WRITE 待ち関数
フラッシュメモリ名

表 4.2.5.1.1 QSPI コンフィギュレーション型
番号

項目

型

機能

1
2
3
4
5

InstructionMode
Instruction
AddressMode
AddressSize
Address

uint32_t
uint32_t
uint32_t
uint32_t
uint32_t

インストラクションモード
インストラクション・オペコード
アドレスモード
アドレスサイズ
アドレス

44

6
7
8
9
10
11

AlternateByteMode
AlternateBytesSize
AlternateBytes
DummyCycles
DataMode
NbDatauint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t

アルティネートバイトモード
アルティネートバイトサイズ
アルティネートバイト
ダミーサイクル
データモード
データ長

表 4.2.5.1.2 QSPI コマンド生成型
番号

項目

型

機能

1
2
3
4
5
6

Match
Mask
Interval
StatusBytesSize
MatchMode
AutomatchStop

uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t

マッチデータマッチデータのマスク値
READ とオートマチックポーリング間のインターバル
ステータスのバイト長
マッチモードマッチ後の自動停止設定

表 4.2.4.1.3 QSPI オートポーリング型
番号

項目

型

機能

1
2
3
4
5
6
7
8
9
10
11
12

base
Init
pBuffPtr
XferSize
XferCounttimeoutcallback
errorcallback
istatus
timeout
semidstatuserrorcode

uint32_t
QSPI_Init_t
uint32_t *uint32_t
uint32_t
ER (*)()ER (*)()
uint32_t
uint32_t
int
uint32_t
volatile
uint32_t

QSPI ペリフェラルのベースアドレス
QSPI コンフィギュレーション設定パラメータ
データ転送領域のポインタ
指定転送サイズ
現在の転送データカウント
タイムアウト時のコールバック関数
エラーのコールバック関数

最後に発生した割込みステータスの値
デフォルトタイムアウト値(ms)
通信セマフォ ID
QSPI の状態
QSPI エラーコード

表 4.2.5.1.4 QSPI ハンドラ型① sampleshiftsample shift 設定。
定義

値

QSPI_SAMPLE_SHIFTING_NONE
QSPI_SAMPLE_SHIFTING_HALFCYCLE

内容0x00000000
QUADSPI_CR_SHIFT

シフトなし
1/2 クロックシフト

表 4.2.5.1.5 sampleshift 設定値② chipselecthightime
コマンド間の CS STAY HIGH 設定のクロックサイクルを設定。
定義

値

内容

QSPI_CS_HIGH_TIME_1_CYCLEQSPI_CS_HIGH_TIME_2_CYCLEQSPI_CS_HIGH_TIME_3_CYCLEQSPI_CS_HIGH_TIME_4_CYCLEQSPI_CS_HIGH_TIME_5_CYCLEQSPI_CS_HIGH_TIME_6_CYCLEQSPI_CS_HIGH_TIME_7_CYCLEQSPI_CS_HIGH_TIME_8_CYCLE

0x00000000
QUADSPI_DCR_CSHT_0
QUADSPI_DCR_CSHT_1
QUADSPI_DCR_CSHT_0|QUADSPI_DCR_CSHT_1
QUADSPI_DCR_CSHT_2
QUADSPI_DCR_CSHT_2|QUADSPI_DCR_CSHT_0
QUADSPI_DCR_CSHT_2|QUADSPI_DCR_CSHT_1
QUADSPI_DCR_CSHT

1cycle2cycle3cycle4cycle5cycle6cycle7cycle8cycle

表 4.2.5.1.6 chipselecthightime 設定値

45③ clockmode
クロックモードを設定。
定義

QSPI_CLOCK_MODE_0
QSPI_CLOCK_MODE_3

値

内容0x00000000
QUADSPI_DCR_CKMODECS 設定時 LOW
CS 設定時 HIGH に遷移

表 4.2.5.1.7 clockmode 設定値④ flashselectFLASH 選択設定。
定義

QSPI_FLASH_ID_1
QSPI_FLASH_ID_2

値

内容0x00000000
QUADSPI_CR_FSEL

FLASH 1
FLASH 2

表 4.2.5.1.8 flahselect 設定値⑤ dualflashmode
Dual Flash モード設定。
定義

QSPI_DUALFLASH_DISABLE
QSPI_DUALFLASH_ENABLE

値

内容0x00000000
QUADSPI_CR_DFM

無効
有効

表 4.2.5.1.9 dualflashmode 設定値⑥ ddrmode
Double data rate mode 設定。
定義

QSPI_DDR_MODE_DISABLE
QSPI_DDR_MODE_ENABLE

値

内容0x00000000
QUADSPI_CCR_DDRM

無効
有効

表 4.2.5.1.10 ddrmode 設定値⑦ ddrholdhalfcycle
DDR モード時、データ出力デレィ設定。
定義

値

QSPI_DDR_HHC_ANALOG_DELAYQSPI_DDR_HHC_HALF_CLK_DELAY

0x00000000
QUADSPI_CCR_DHHC

内容

アナログデレィ
1/2 clock cycle

表 4.2.5.1.11 ddrholdhalfcycle 設定値⑧ sioomode
送信インストラクションモード設定。
定義

値

QSPI_SIOO_INST_EVERY_CMD

0x00000000

QSPI_SIOO_INST_ONLY_FIRST_CMD

QUADSPI_CCR_SIOO

内容

すべての転送にインストラクショ
ン送信
転送の最初のみ

表 4.2.5.1.12 sioomode 設定値⑨ AddressMode
コマンド生成、アドレスモード設定。
定義

QSPI_ADDRESS_NONE
QSPI_ADDRESS_1_LINE
QSPI_ADDRESS_2_LINESQSPI_ADDRESS_4_LINES

値

内容

0x00000000
QUADSPI_CCR_IMODE_0
QUADSPI_CCR_IMODE_1
QUADSPI_CCR_IMODE

なし
1 lne
2 lines
4 lines

表 4.2.5.1.13 AddressMode 設定値⑩

AddressSize

46

コマンド生成、アドレスサイズ設定。
定義

値

QSPI_ADDRESS_8_BITS
QSPI_ADDRESS_16_BITS
QSPI_ADDRESS_24_BITS
QSPI_ADDRESS_32_BITS

内容

0x00000000
QUADSPI_CCR_ADSIZE_0
QUADSPI_CCR_ADSIZE_1
QUADSPI_CCR_ADSIZE

8 ビットアドレス
16 ビットアドレス
24 ビットアドレス
32 ビットアドレス

表 4.2.5.1.14 AddressSize 設定値⑪ InstructionMode
コマンド生成、インストラクションモード設定。
定義

値

QSPI_INSTRUCTION_NONE
QSPI_INSTRUCTION_1_LINE
QSPI_INSTRUCTION_2_LINESQSPI_INSTRUCTION_4_LINES

内容

0x00000000
QUADSPI_CCR_IMODE_0
QUADSPI_CCR_IMODE_1
QUADSPI_CCR_IMODE

なし
1line
2lines4lines

表 4.2.5.1.15 InstructionMode 設定値⑫
AlternateBytesMode
コマンド生成、アルタネートバイトモード設定。
定義

値

内容

QSPI_ALTERNATE_BYTES_NONE
QSPI_ALTERNATE_BYTES_1_LINE
QSPI_ALTERNATE_BYTES_2_LINESQSPI_ALTERNATE_BYTES_4_LINES

0x00000000
QUADSPI_CCR_ABMODE_0
QUADSPI_CCR_ABMODE_1
QUADSPI_CCR_ABMODE

なし
1line
2lines4lines

表 4.2.5.1.16 AlternaleBytesMode 設定値⑬ DataMode
コマンド生成、データモード設定。
定義

値

QSPI_DATA_NONE
QSPI_DATA_1_LINE
QSPI_DATA_2_LINESQSPI_DATA_4_LINES

内容

0x00000000
QUADSPI_CCR_DMODE_0
QUADSPI_CCR_DMODE_1
QUADSPI_CCR_DMODE

なし
1line
2lines4lines

表 4.2.5.1.17 DataMode 設定値

4.2.5.2 インターフェイス仕様
QSPI を制御するドライバ関数は以下の通りである。データの読み出しは関数を使って読み出す
INDIRECT READ とメモリ参照で読み出す DIRECT READ がある。
関数名

型

引数

機能

qspi_init

QSPI_Handler*

ID portid
QSPI_Init_t *pini

qspi_deinit

ER

ADC_Handler* hqspi

qspi_readER

qspi_write

ER

QSPI_Handler* hqspi
void *dest
uint32_t src
uint32_t size
QSPI_Handler* hspi
uint32_t dest
void *src

指定ポート ID の QSPI ペリフェ
ラルを初期化し、ハンドラへのポ
インタを返すQSPI ドライバを未使用状態に戻す
QSPI INDIRECT READ

備考

QSPI INDIRECT WRITE

47

qspi_eraseERqspi_erase_sectorERqspi_direct_disable
qspi_direct_enable
qspi_handler
qspi_isr

ER
ER
void
void

uint32_t size
QSPI_Handler* hqspi
uint32_t address
uint32_t size
QSPI_Handler* hqspi
uint32_t address
QSPI_Handler* hqspi
QSPI_Handler* hspi
QSPI_Handler* hspi
intptr_t exinf

アドレス指定消去

セクタ単位消去
DIRECT READ 無効
DIRECT READ 有効QSPI 割込みハンドラ関数
QSPI 割込みサービスルーチン

表 4.2.5.2.1 QSPI ドライバ関数

4.2.5.3 フローチャートQSPI 制御は初期化を行い。ERASE/WRITE/READ の関数を使ってデータの消去、書き込み、読み出しを行えばよい。注意点はデータ書き込む領域には、ERASE 関数で領域を消去する必要がある。
QSPI コンフィギュレーションデータは、以下の対応となるこれ以外の QSPI フラッシュメモリを使用する場合は、コンフィギュレーションデータを自作する必要がある。
① STM32F769 Discovery：MICRON N25Q512A13GSF40E② STM32L476 Discovery：MICRON N25Q128A13EF840E③ STM32F723 Discovery：MACRONIX MX25L51245G

4.2.6 RTC
RTC(Real-time clock)は時刻を管理するハードウェアである。ST マイクロエレクトロニクス社のボードでは RTC 用のクロックは実装されているが、バックアップ用バッテリは実装されていないため電源を落とすと時刻はリセットされる。RTC は時刻管理以外にアラート機能があり、アラート時刻を設定す
ると割込みにより、アラート通知を受け取ることができる。
RTC は（書き込みを行う）ファイル操作には必須の機能であるためサポートを行う。また、他のドラ
イバのように複数のロジックを持つことはないためポート管理は行わない。

4.2.6.1 データ仕様
RTC では UNIX で使用されている時刻管理構造体 tm と共有して時刻データのやり取りを行えるように表 4.2.6.1.1 として構造体名を変えた tm2 構造体を定義する。この構造体は tm 構造体と混在して使用されても定しくデータの受け渡しを行える。
RTC のアラーム動作設定用に表 4.2.6.1.2 として RTC アラーム型を用意する。割込みとして割込み番号(16+41)の IRQ_VECTOR_RTC_ALARM を使用する。
番号

項目

型

機能

1
2
3
4
5
6
7
8
9

tm_sectm_mintm_hour
tm_mdaytm_montm_yeartm_wdaytm_ydaytm_isdst

int
int
int
int
int
int
int
int
int

秒(0～59)分(1～60)時(0～23)
月の中の日
月
年(1970 を 0 とした年数)
曜日
年の中の日
夏時間：０以外の値

表 4.2.6.1.1 tm2 構造体
番号

項目

型

機能

1

alarm

uint32_t

アラーム選択

48

2
3
4
5
6

alarmmask
subsecondmask
dayselectsubsecnd
callback

uint32_t
uint32_t
uint32_t
uint32_t(*)(void)

アラームマスク設定
アラームサブセコンドマスク
アラーム日付設定
アラームサブセコンド
アラームコールバック

表 4.2.6.1.2 RTC_Alarm 型① alarm
アラームレジスタを指定する
定義

RTC_ALARM_A
RTC_ALARM_B

値

内容

RTC_CR_ALRAE
RTC_CR_ALRBE

アラームＡレジスタを指定
アラームＢレジスタを指定

表 4.2.6.1.3 alarm 設定値② dayselect
垂直同期極性設定をする。
定義

ALARMDAYSEL_DATEALARMDAYSEL_WEEKDAY

値

内容0x00000000
0x40000000

月中の日を指定
ウィークディを指定

表 4.2.6.1.4 dayselect 設定値③ alarmmask
アラームのマスク設定を行う。
定義

ALARMMASK_NONE
ALARMMASK_DATESELALARMMASK_HOURS
ALARMMASK_MINUTESALARMMASK_SECONDS値

内容

0x00000000
RTC_ALRMAR_MSK4
RTC_ALRMAR_MSK3
RTC_ALRMAR_MSK2
RTC_ALRMAR_MSK1

マスクなし
日のアラームをマスク
時のアラームをマスク
分のアラームをマスク
秒のアラームをマスク

表 4.2.6.1.5 alarmmask 設定値④ subsecondmask
サブセコンドマスク設定をする。
定義

ALARMSSMASK_ALL
ALARMSSMASK_SS14_1
ALARMSSMASK_SS14_2
ALARMSSMASK_SS14_3
ALARMSSMASK_SS14_4
ALARMSSMASK_SS14_5
ALARMSSMASK_SS14_6
ALARMSSMASK_SS14_7
ALARMSSMASK_SS14_8
ALARMSSMASK_SS14_9
ALARMSSMASK_SS14_10
ALARMSSMASK_SS14_11
ALARMSSMASK_SS14_12
ALARMSSMASK_SS14_13
ALARMSSMASK_SS14
ALARMSSMASK_NONE

値

0x00000000
0x01000000
0x02000000
0x03000000
0x04000000
0x05000000
0x06000000
0x07000000
0x08000000
0x09000000
0x0A000000
0x0B000000
0x0C000000
0x0D000000
0x0E000000
0x0F000000

内容ｓ

サブセコンドとのマッチをしない
SS[0]がマッチでアラーム
SS[1:0]がマッチでアラームSS[2-0]がマッチでアラームSS[3-0]がマッチでアラームSS[4-0]がマッチでアラームSS[5-0]がマッチでアラームSS[6-0]がマッチでアラームSS[7-0]がマッチでアラームSS[8-0]がマッチでアラームSS[9-0]がマッチでアラーム
SS[10-0]がマッチでアラーム
SS[11-0]がマッチでアラーム
SS[12-0]がマッチでアラーム
SS[13-0]がマッチでアラーム
SS[14-0]がマッチでアラーム

49

表 4.2.6.1.6 subsecondmask 設定値

4.2.6.2

インターフェイス仕様

RTC を設定するドライバ関数を以下に示す。
関数名

型

引数

機能

rtc_init
rtc_set_time
rtc_get_time
rtc_setalarm

void
ER
ER
ER

RTC の初期化を行う。引数に意味なし
時刻をセットする
時刻を取り出す
アラートをセットする

rtc_stopalarm
rtc_getalarmERER

rtc_handler

void

intptr_exinf
struct tm2 *pt
struct tm2 *pt
RTC_alarm_t *parm
struct tm2 *ptm
uint32_t Alarm
RTC_alarm_t *parm
struct tm2 *ptm
uint32_t Alarm
void

備考

アラートを停止する
アラート情報を取り出す

割込みハンドラ

表 4.2.6.2.1 RTC 設定関数

4.2.6.3

設定手順

初期化は rtc_init 関数を用いて行う。ATT_INI を使用して設定が行えるように引数を用意したが、この引数に意味はない。使用は以下の手順に従う。
① rtc_set_time
時刻の設定を行う。tm2 構造体中に設定に使用するのは以下の６つの項目で他の項目は意味を持たない。
(1) tm_year(2) tm_mon(3) tm_mday(4) tm_hour(5) tm_min(6) tm_sec② rtc_get_time
時刻を取り出す。tm2 構造体中に実際に設定される項目は以下の７つの項目である。
他の設定も設定したい場合は mktime 関数を用いて設定を行う必要がある。
(1) tm_year(2) tm_mon(3) tm_mday(4) tm_wday(5) tm_hour(6) tm_min(7) tm_sec③ rtc_setalarm
アラームの設定を行う。アラームレジスタはＡとＢの二つがあり別個に設定ができる。
アラームは時刻との比較と、サブセコンドとの比較の二種類がある。
時刻との比較の場合、tm2 構造体に比較の時刻設定を行い。マスク設定でマスクのない項目との比較で一致した場合割込みが発生する。コールバック関数をセットすれば割込み時コールバック関数が呼び出される。
サブセコンドとの比較の場合、一致のセコンド値と比較しないマスク設定を行い、一致すれば割込みが発生する。

50

④ rtc_stopalarm
アラームを停止する。停止するアラームレジスタを引数として渡す。
⑤ rtc_getalarm
引数の Alarm にアラームレジスタを設定する。現在のレジスタ内容から RTC_Alarm 型を生成する。

4.2.7 USB OTG
USB OTG は、ホスト、デバイスの USB 管理を行うドライバである。USB ホストとして動作させるためには USB ホストクラスドライバ、USB デバイスとして動作させるためには USB デバイスライブ
ラリを上位のモジュールとして用意する必要がある。

4.2.7.1 データ仕様
USB OTG ドライバは初期化用の型として、表 4.2.7.1.1 の USB OTG 初期設定定義型と、ハンドラ
として表 4.2.7.1.4 の USB OTG ハンドラ型を持つ。内部の型としてエンドポイントを管理するための表 4.2.7.1.2 のエンドポイント定義型と、ホストチャネルを管理するための表 4.2.7.1.3 のホストクラス
定義型をもつ。エンドポイントとホストクラス定義は、USB の上位層のモジュールで設定を行う必要がある。この実装では、Stm32Cube 中の USB ミドルウェアが設定を行っている。
初期設定定義型の有効無効設定は、1 が有効、0 が無効の設定となる。
番号

項目

型

機能

1
2
3
4
5
6
7
8
9
10
11
12

usb_otg_mode
dev_endpoints
host_channels
speed
dma_enable
phy_itface
sof_enable
low_power_enable
lpm_enable
vbus_sessing_enable
use_dedicated_ep1
use_external_vbus

uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t

USB OTG の実行モード指定
デバイス用のエンドポイントの数(1-15)
ホストチャネルの数(1-15)
USB コアスピード
USB DMA 機能の有効無効設定

PHY の指定
デバイスモードでの SOF 割込みの有効無効設定
LOW POWER モードの有効無効設定
LPM 機能の有効無効設定
VBUS のセンシング機能の有効無効設定
エンドポイント 1 専用割込みの有効無効設定
外部 VBUS の有効無効設定

表 4.2.7.1.1 USB OTG 初期設定定義型
番号

項目

型

機能

1
2
3
4
5
6
7
8
9
10
11
12

num
is_in
is_stalltype
data_pid_starteven_off_frame
tx_fifo_num
maxpacket
xfer_buff
dma_addr
xfer_len
xfer_countuint8_tuint8_t : 1
uint8_t : 1
uint8_t : 2
uint8_t : 1
uint8_t : 1
uint16_t
uint16_t
uint8_t *uint32_t
uint32_t
uint32_t

エンドポイント番号(0-15)
エンドポイントのディレクション(1:IN 0:OUT)
スティール状態(1:スティール状態)
通信タイプ
スタートの PID(0 または 1)
フレームのパリティ(0:EVEN 1:ODD)
送信 FIFO 番号
最大パケットサイズ(64KB 以内)
送受信バッファへのポインタ
DMA アドレス(4 バイトのアライン値)
現在転送サイズ
指定の転送サイズ

表 4.2.7.1.2 エンドポイント定義型

51

番号

項目

型

機能

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

dev_addr
ch_numep_numep_is_inspeed
do_ping
process_ping
ep_typemax_paket
data_pid
xfer_buff
xfer_len
xfer_counttoggle_intoggle_out
dma_addr
err_count
urb_state
state

uint8_tuint8_tuint8_tuint8_tuint8_tuint8_tuint8_tuint8_tuint16_t
uint8_tuint8_t *uint32_t
uint32_t
uint8_tuint8_tuint32_t
uint32_t
uint8_tuint8_t

デバイスアドレス(1-255)
ホストチャネル番号(1-15)
エンドポイント番号(1-15)
エンドポイントのディレクション(1:IN 0:OUT)
USB ホストのスピード
HS モード時の PING プロトコルの有効無効設定
PING プロトコル実行状態
エンドポイントの型
最大パケットサイズ(64KB 以内)
初期設定データ PID
通信バッファ領域へのポインタ
現在の通信サイズ
指定通信サイズIN 通信のトグルフラグ
OUT 通信のトグルフラグ
DMA モードでのデータアドレス(4 バイトのアライン)
エラー発生数URB ステータス
ホストステータス

表 4.2.7.1.2 ホストクラス定義型
番号

項目

型

機能

1
2
3
4
5
6
7
8
9
10
11
12
13
14

base
Init
hc[15]
IN_ep[15]OUT_ep[15]Setup[12]BESL
lpm_state
lpm_active
hostsofcallback
hostconnectcallback
hostdisconnectcallback
hostchangeurbcallback
devsetupstagecallback

uint32_t
USB_OTG_Init_t
USB_OTG_HCTypedef
USB_OTG_EPTypedef
USB_OTG_EPTypedef
uint32_t
uint32_t
uint8_tuint8_tvoid (*)()
void (*)()
void (*)()
void (*)()
void (*)()

USB-OTG ペリフェラルのベースアドレス
USB-OTG 初期化設定パラメータ
ホストチャネル領域
IN エンドポイント領域
OUT エンドポイント領域
セットアップパケット保存領域
BESL データの保存領域

15

devdataoutstagecallback

void (*)()

16

devdatainstagecallback

void (*)()

17
18
19
20
21
22
23
24
25

devsofcallback
devresetcallback
devsuspendcallback
devresumecallback
devisooutcallback
devisoincallback
devconnectcallback
devdisconnectcallback
devlpmcallback

void (*)()
void (*)()
void (*)()
void (*)()
void (*)()
void (*)()
void (*)()
void (*)()
void (*)()

LPM の状態
LPM 機能有効無効設定
ホスト用 SOF 割込みコールバック関数
ホストコネクト時コールバック関数
ホストディスコネクト時コールバック関数
ホスト URB 変更時コールバック関数
デバイスセットアップステージコールバッ
ク関数
デバイスデータアウトステージコールバッ
ク関数
デバイスデータインステージコールバック
関数
デバイス SOF 割込みコールバック関数
デバイスリセットコールバック関数
デバイスサスペンドコールバック関数
デバイスレジュームコールバック関数
デバイス ISOOUT コールバック関数
デバイス ISOIN コールバック関数
デバイスコネクトコールバック関数
デバイスディスコネクトコールバック関数
デバイス LPM コールバック関数

52

26
27

pHost
pDev

void *
void *

上位ホストハンドラ格納領域
上位デバイスハンドラ格納領域

表 4.2.5.1.4 USB OTG ハンドラ型② usb_otg_mode

USB OTG の設定モードを指定する。
定義

値

USB_OTG_MODE_DEVICE
USB_OTG_MODE_HOST
USB_OTG_MODE_DRD

0
1
2

内容

USB DEVICE 固定
USB HOST 固定
OTG モード

表 4.2.7.1.5 usb_otg_mode 設定値③ speed
USB の転送スピードを設定する。
定義

値

USB_SPEED_HIGH
USB_SPEED_FULL

0
3

内容

HIGH スピード指定
FULL スピード指定

表 4.2.7.1.6 speed 設定値④ phy_inface

PHY 種別設定を行う。
定義

値

USB_PHY_ULPI
USB_PHY_EMBEDDED

1
2

内容

ULPI-PHY
EMBEDDED-PHY

表 4.2.7.1.7 phy_inface 設定値

4.2.7.2 インターフェイス仕様
USB OTG を制御するドライバ関数は以下の通りである。
関数名

型

引数

機能

usbo_init

USB_OTG_
Handler*

ID portid
USB_OTG_Init_t *piniusbo_deinit

ER

USB_OTG_Handler* husb

usbo_getcurrentframeusbo_setcurrentmodeuint32_t

USB_OTG_Handler* husb

ER

USB_OTG_Handler* husb

usbo_coreinit

ER

USB_OTG_Handler* husb

usbo_enableglobalintER

USB_OTG_Handler* husb

usbo_disableglobalintER

USB_OTG_Handler* husb

usbo_flushTxFifo

ER

usbo_flushRxFifo

ER

USB_OTG_Handler* husb
uint32_t num
USB_OTG_Handler* husb

usbo_iniFifo
usbo_hc_initERER

指 定 ポ ー ト ID の
USB-OTG ペ リ フ ェ ラ
ルを初期化
USB モジュールの無効化
現在実行中のフレーム
番号を取りだず
USB-OTG の モ ー ド 設
定を行う
USB-OTG コ ア の 初 期
化
USB-OTG グ ロ ー バ ル
割込みを有効に設定
USB-OTG グ ロ ー バ ル
割込みを無効に設定
送信 FIFO をフラッシュする
受信 FIFO をフラッシュする
送信 FIFO 初期化設定
ホストチャネルを初期化する

USB_OTG_Handler* husb
USB_OTG_Handler* husb
uint8_t ch_num
uint8_t epnum

備考53usbo_hc_startxfer

ERusbo_hc_haltERusbo_resetportER

usbo_drivevbus

ERusbo_hostinit
usbo_starthostusbo_stophostusbo_gethostspeed

ER
ER
ER
uint32_t

USB_OTG_Handler* husb
uint8_t state
USB_OTG_Handler* husb
USB_OTG_Handler* husb
USB_OTG_Handler* husb
USB_OTG_Handler* husb

usbo_hcd_irqhandler

void

USB_OTG_Handler* husb

usbo_devconnect
usbo_devdisconnect
usbo_activateEndpoi
nt
usbo_disactivateEnd
point
usbo_epsetStall

ER
ER
ER

usbo_epclearStallER

usbo_setDevAddressERusbo_getDevSpeed

uint8_t

USB_OTG_Handler* husb
USB_OTG_Handler* husb
USB_OTG_Handler* husb
USB_OTG_EPTypedef *ep
USB_OTG_Handler* husb
USB_OTG_EPTypedef *ep
USB_OTG_Handler* husb
USB_OTG_EPTypedef *ep
USB_OTG_Handler* husb
USB_OTG_EPTypedef *ep
USB_OTG_Handler* husb
uint8_t address
USB_OTG_Handler* husb

usbo_ep0_outstartER

usbo_ep0startxfer

ERusbo_epstartxfer

ERusbo_devinit
usbo_stopdevice
usbo_init_lpm
usbo_pcd_irqhandler

ER
ER
ER
void

USB_OTG_Handler* husb
uint8_t *psetup
USB_OTG_Handler* husb
USB_OTG_EPTypedef* ep
USB_OTG_Handler* husb
USB_OTG_EPTypedef* ep
USB_OTG_Handler* husb
USB_OTG_Handler* husb
USB_OTG_Handler* husb
USB_OTG_Handler* husb

usb_otg_isr

void

intptr_t exinf

usb_otg_wkup_isr

void

intptr_t exinf

ER
ER

USB_OTG_Handler* husb
uint8_t ch_num
USB_OTG_Handler* husb
uint8_t ch_num
USB_OTG_Handler* husb

ホストチャネル送信要求
ホ スト チ ャ ネ ルを
HALT 状態にする
ホストポートをリセッ
トする
ホスト用 VBUS のオン
オフ設定を行う
ホストの初期化を行う
ホストを開始する
ホストを停止する
ホストのコアスピード
を取り出す
USB-OTG ホ ス ト 割 込
み処理
USB デバイス接続要求
USB デバイス切断要求
エンドポイントアクテ
ィベイト要求エンドポイントディス
アクティベイト要求
エンドポイントをステ
ィール状態に設定
エンドポイントのスティール状態解除
デバイスアドレスを設定する
USB デバイススピードを取り出す
エンドポイント 0-OUT
開始要求
エンドポイント 0 の転送
開始要求
エンドポイントの転送
開始要求
USB デバイス初期化
USB デバイス停止
LPM の初期化
USB デバイスの割込み処理
USB-OTG 割 込 み サ ー
ビスルーチン
USB-OTG WKUP 割込
みサービスルーチン

表 4.2.7.2.1 USB-OTG ドライバ関数

4.2.7.3 フローチャート
USB-OTG はホスト機能とデバイス機能をもつペリフェラルである。ホスト機能をデバイスの接続を待って以下の機能を実行する。
(1) ホスト初期化
USB-OTG ハードウェア、上位モジュールの初期化を行い、USB ホストをスタートする。USB の54

状態遷移は割込み関数からのコールバックで実行される。

図 4.2.7.3.1 USB ホスト初期化(2) ホスト接続とエナミュネーション
USB ホストの初期化が終了すると、デバイスの接続待ち状態に移行する。状態遷移は割込み関数中のコールバック関数で上位モジュールに伝達される。USB ホストで使用されるコールバック関数は以下の４つである① hostsofcallback
SOF のタイミングで割込みを発生する。USB は 1ms 単位に SOF を発行するため 1ms 間隔に
コールバックされる。
② hostconnectcallback
ホストのポート変化割込み(USB_OTG_GINTSTS_HPRTINT)が発生し、ポート接続チェックを行いコールバックする。
③ hostdisconnectcallback
ホストのディスコネクト割込み(USB_OTG_GINTSTS_DISCINT)が発生時、コールバックする。
④ hostchangeurbcallback
ホストチャネル割込み(USB_OTG_GINTSTS_HCINT)が発生時、コールバックする。
接続の検知は hostconnectcallback 関数呼び出しから開始する。コールバック関数はイベント通知
のみで、処理はタスクレベルで実行される。

55

図 4.2.7.3.2 接続処理
(3) ホストクラスの選択と確認
上位モジュールでエナミュネーションにより取得した bInterfaceClass からクラスモジュールを選択する。対応するクラスモジュールがない場合は処理中止となる。クラスモジュールが決定された場
合は、クラスモジュールで定めらえた手順で Init（通信用のエンドポイントの設定等）→Requests（クラスで使用するパラメータの取得等）を実行し、正常終了すればクラスモジュールの通常プロセスを実行する。これらの処理はクラスモジュール毎に異なるので、統一したフローチャートで記載はできない。ここで状態遷移に用いるコールバック関数は hostchangeurbcallback 関数である。
(4)ホスト切断
切断が行われた場合、USB ホストの割込みから hostdisconnectcallback が行われる。このコールバックにより、上位モジュールが呼ばれ上位モジュールの切断手順が行われる。手順は以下のフローチャートの通りである。クラスモジュールの Deinit 移行はタスクレベルで行われ、終了後接続待ちとなる。

56

切断あり

hostdisconnectcallback

usbo_stophost関数でホストを停止
内部のチャネル管理データを破棄

usbo_enableglobalint関数でグローバル割込みを許可
usbo_drivevbus関数でVBUSをオン

実行していたクラスモジ
ュールのDeInit関数を呼び出す

usbo_resetport関数でポートリセットを行う

接続待ち

図 4.2.7.3.3 切断処理
デバイス側はホスト機能に対応する動作を行う。また、設定によっては、USB 割込み内で処理を完結可能である。状態の遷移は USB デバイスからのコールバックによって行われる。
① devsetupstagecallback
OUT エンドポイントの SETUP パケット通知割込み(USB_OTG_DOEPINT_STUP)からのコー
ルバック② devdataoutstagecallback
OUT エンドポイントの転送割込み(USB_OTG_DOEPINT_XFRC)からのコールバック③ devdatainstagecallback
IN エンドポイントの送信終了割込み(USB_OTG_DIEPINT_XFRC)からのコールバック④ devsofcallback
SOF 割込み(USB_OTG_GINTSTS_SOF)からのコールバック⑤ devresetcallback
ENUMERATION 終了割込み(USB_OTG_GINTSTS_ENUMDNE)からのコールバック⑥ devsuspendcallback
SUSPEND 割込み(USB_OTG_GINTSTS_USBSUSP)からのコールバック⑦ devresumecallback
RESUME 割込み(USB_OTG_GINTSTS_WKUINT)からのコールバック⑧ devisooutcallback
ISO-OUT 未完結割込み(USB_OTG_GINTSTS_PXFR_INCOMPISOOUT)からのコールバック⑨ devisoincallback
ISO-IN 未完結割込み(USB_OTG_GINTSTS_IISOIXFR)からのコールバック⑩ devconnectcallback
コネクション割込み(USB_OTG_GINTSTS_SRQINT)からのコールバック⑪ devdisconnectcallback
ディスコネクション割込み(USB_OTG_GINTSTS_OTGINT)からのコールバック⑫ devlpmcallback
LPM をサポートする場合の状態遷移コールバック

57

(5)デバイス初期化
USB デバイスの初期化手順を以下の表に示す。

図 4.2.7.3.4 USB デバイスの初期化(6) デバイス接続とエナミュネーション
USB の接続は、SUSPEND、RESUME のコールバックが何度か続いた後、リセットコールバック(devresetcallback)により、接続を開始する。これも、接続の状態で何度と発生する可能性がある。まず、エナミュレーションを行うためにエンドポイント 0 の IN/OUT を作成する。作成後、以下のコールバッ
クが発生し、内容に従って、デバイス情報の通信を行う。
① devsetupstagecallback
SETUP ステージの要求② devdataoutstagecallback
データ受信要求③ devdatainstagecallback
データ送信要求
最後に、SET CONFIGURATION を受信したら、USB クラスの通信に移行する。

58

図 4.2.7.3.5 USB デバイスの接続(7)SUSPEND と RESUMEUSB デバイスの場合、通信確立後も SUSPEND と RESUME の要求により、必要な電源操作を行わなければならない。これらの移行は以下のコールバック関数によって要求される。切断、接続時も、これらのコールバック関数が呼ばれるので注意が必要である。
① devsuspendcallback
省エネモード要求② devresumecallback
省エネ復帰要求(8)デバイス切断
USB デバイスの切断は切断コールバック(devdisconnectcallback)の呼び出しにより行う。このコール
バックの前に SUSPEND もコールバックも発生する。

図 4.2.7.3.6 USB デバイスの切断

4.3 F7 Depend Driver
4.3.1 概要
F7 Depend Driver は、STM32F746 ハードウェア専用のデバイスドライバである。F7 専用ドライバ
として以下のドライバをサポートする。
(1) ltdc
ROCKTECH 4.3-inch 480x272 LCD-TFT 用デバイスドライバ(2) tp
FT5336 を用いた touch panel インターフェイスドライバ(3) sdmmc
SoC 内の SDMMC1 を用いた MicroSD card 用デバイスドライバ(4) audio
SoC 内の SAI と WM8994 を用いたオーディオ用デバイスドライバ
59

4.3.2 LTDC
LTDC(LCD-TFT Controller)は LCD-TFT 用のパラレル RGB で制御するコントローラである。
入力は以下のデータに対応する。
(1) ARGB8888(2) RGB888(3) RGB565(4) ARGB1555(5) ARGB4444(6) L8(8-bit Luminance or CLUT)(7) AL44 (4-bit alpha + 4-bit luminance)(8) AL88 (8-bit alpha + 8-bit luminance)
出力は 24-bit RGB Parallel Pixel Output, 8 bits-per-pixel(RGB888)

4.3.2.1 データ仕様
LTDC の初期化に用いるデータと構造体について記載する。色の設定を表 4.3.2.1.1 の Color_t で定義する。LTDC の初期化には表 4.3.2.1.2 の LTDC_Init_t 型を使用する。レイア設定を表 4.3.2.1.3 のLTDC_LayerCfg_t 型を使用する。表 4.3.2.1.4 に LTDC ハンドラを定義する。
番号

項目

型

機能

1
2
3
4

Blue
Green
Red
Reserved

uint8_tuint8_tuint8_tuint8_t

青色
緑色
赤色
リザーブ

表 4.3.2.1.1 Color_t 型
番号

項目

型

機能

1
2
3
4
5
6
7
8
9
10
11
12
13

HSPolaiity
VSPolarity
DEPolarity
PCPolarity
HorizontalSync
VerticalSync
AccumulatedHBP
AccumulatedVBP
AccumulatedActiveW
AccumulatedActiveH
TotalWidth
TotalHeight
Backcolor

uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
Color_t

水平同期極性設定
垂直同期極性設定
データ許可極性設定
ピクセルクロック極性設定
水平同期設定(-1 の値を設定)
垂直同期設定(-1 の値を設定)
計算上の水平バックポーチ値(-1 の値を設定)
計算上の垂直バックポーチ値(-1 の値を設定)
計算上のアクティブ幅値(-1 の値を設定)
計算上のアクティブ高さ値(-1 の値を設定)
トータルの幅値(-1 の値を設定)
トータルの高さ値(-1 の値を設定)
バックグラウンド色

表 4.3.2.1.2 LTDC_Init_t 型
番号

項目

型

機能

1
2
3
4
5
6
7
8
9

WindowX0
WindowX1
WindowY0
WindowY1
PixelFormat
Alpha
Alpa0
BlendingFactor1
BlendingFactor2

uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t

Window の水平スタート位置
Window の水平ストップ位置
Window の垂直スタート位置
Window の垂直ストップ位置
ピクセルのファーマット
アルファ定数値
デフォルトアルファ値
ブランディングファクター１
ブランディングファクター２

60

10
11
12
13

FBStartAddress
ImageWidth
ImageHeight
Backcolor

uint32_t
uint32_t
uint32_t
Color_t

ビットマップメモリのスタートアドレス
イメージのピクセル数
イメージのピクセル高さ
バックグラウンド色

表 4.3.2.1.3 LTDC_LayerCfg_t 型

番号

項目

型

機能

1
2

Init
LayerCfg[MAX_LAYER]

LTDC_Init_t
LTDC_LayerCfg_t

初期化型
レイヤ型

表 4.3.2.1.4 LTDC_Handle_t 型

図 4.3.2.1.1 LTDC 設定値① HSPolarity
水平同期極性設定を設定する
定義

LTDC_HSPOLARITY_AL
LTDC_HSPOLARITY_AH

値0x00000000
LTDC_GCR_HSPOL

内容

アクティブロー
アクティブハイ表 4.3.2.1.5 HSPolerty 設定値② VSPolarity
垂直同期極性設定をする。
定義

値

LTDC_VSPOLARITY_AL
0x00000000
LTDC_VSPOLARITY_AH
LTDC_GCR_VSPOL
表 4.3.2.1.6 VSPolarity 設定値

内容

アクティブロー
アクティブハイ61

③ DEPolarity
データ許可極性設定を行う。
定義

値

内容

LTDC_DEPOLARITY_AL
0x00000000
LTDC_GCR_DEPOL
LTDC_DEPOLARITY_AＨ
表 4.3.2.1.7 DEPolarity 設定値

アクティブロー
アクティブハイ

④ PCPolarity
ピクセルクロック極性設定を設定する。
定義

値

内容

LTDC_PCPOLARITY_IPC
0x00000000
LTDC_PCPOLARITY_IIPC
LTDC_GCR_PCPOL
表 4.3.2.1.8 PCPolarity 設定値

Input pixel clock
Inverted input pixel clock⑤ BlendingFactor1
ブランディングファクター１を設定する。
定義

値

LTDC_BLENDING_FACTOR1_CA
0x00000400
LTDC_BLENDING_FACTOR1_PAxCA
0x00000600
表 4.3.2.1.9 BlendingFactor1 設定値

内容

Cte Alpha
Cte Alpha x Pixel Alpha⑥ BlendingFactor2
ブランディングファクター１を設定する。
定義

値

LTDC_BLENDING_FACTOR2_CA
0x00000005
LTDC_BLENDING_FACTOR2_PAxCA
0x00000007
表 4.3.2.1.10 BlendingFactor2 設定値

内容

Input pixel clock
Cte Alpha x Pixel Alpha

4.3.2.2 インターフェイス仕様
LTDC を設定するドライバ関数を以下に示す。
関数名

型

引数

機能

備考

ltdc_init
ltdc_configlayer

ER
ER

LTDC の初期化を行う
index に対応したレイヤ設定を設定する

必須
必須

ltdc_setalphaER

LTDC_handle_t *phandle
LTDC_handle_t *phandle
LTDC_LayerCfg_t *pconfg
uint32_t index
LTDC_handle_t *phandle
uint32_t Alphauint32_t index

オプション

ltdc_setaddress

ER

LTDC_handle_t *phandle
uint32_t Adress
uint32_t index

ltdc_setwindowsize

ER

LTDC_handle_t *phandle
uint32_t XSize
uint32_t YSize
uint32_t index

ltdc_setwindowpositionERltdc_configcolorkeying

ER

LTDC_handle_t *phandle
uint32_t X0
uint32_t Y0
uint32_t index
LTDC_handle_t *phandle
uint32_t RGBValueindex に対応したレイヤのアルファ値を変更する
index に対応したレイヤのスタートアドレスを変更する
index に対応したレイヤの Window サイズとイ
メージ幅、高さを変更する
index に対応したレイヤの Window の 起 点 を(X0,Y0)に変更する
index に対応したレイヤのカラーキーイング値

オプション

オプション

オプション

オプション

62

ltdc_enablecolorkeyingERltdc_disablecolorkeyingER

uint32_t index
LTDC_handle_t *phandle
uint32_t index
LTDC_handle_t *phandle
uint32_t index

を設定する
index に対応したレイヤのカラーキーイング設定を有効にする
index に対応したレイヤのカラーキーイング設定を無効にする

オプション

オプション

表 4.3.2.2.1 LTDC 設定関数

4.3.2.3 設定手順
本開発環境では、LTDC の設定は Stm32Cube_FW_F7 中の stm32746_discovery_lcd.c の BSP 機能を用いて設定している。これは GUI として BSP の機能をそのまま流用するためである。ボードで使用している 4.3-inch 480x272 のカラーLCD を用に LTDC の設定を行うためには、LCD に対応した設定
パラメータを LTDC_Init_t 型を介してハンドラに設定し、ltdc_init 関数を用いて行い。レイヤの設定
を、ltdc_configlayer 関数を用いて行えばよい。設定後は表示データに対応した RAM 領域を描画内容
に従って書き換えれば、その内容が表示データとして LCD に表示される。
番号

項目

設定値

1
2
3
4
5
6
7
8
9

HSPolaiity
VSPolarity
DEPolarity
PCPolarity
HorizontalSync
VerticalSync
AccumulatedHBP
AccumulatedVBP
AccumulatedActiveW

10

AccumulatedActiveH

11

TotalWidth12

TotalHeight13

Backcolor

LTDC_HSPOLARITY_AL
LTDC_VSPOLARITY_AL
LTDC_DEPOLARITY_AL
LTDC_PCPOLARITY_IPC
RK043FN48H_HSYNC(41) - 1
RK043FN48H_VSYNC(10) - 1
RK043FN48H_HSYNC - RK043FN48H_HBP(13) - 1
RK043FN48H_VSYNC - RK043FN48H_VBP(2) - 1
RK043FN48H_WIDTH(480) + RK043FN48H_HSYNC
RK043FN48H_HBP - 1
RK043FN48H_HEIGHT(272) + RK043FN48H_VSYNC
RK043FN48H_VBP - 1
RK043FN48H_WIDTH+
RK043FN48H_HSYNC
RK043FN48H_HBP + RK043FN48H_HFP(32) - 1
RK043FN48H_HEIGHT+
RK043FN48H_VSYNC
RK043FN48H_VBP + RK043FN48H_VFP(2) - 1
オールゼロ

+
+
+
+

表 4.3.2.3.1 480x272LCD の LTDC_Init_t 型の設定値
番号

項目

機能

1
2
3
4
5
6
7
8
9
10
11
12
13

WindowX0
WindowX1
WindowY0
WindowY1
PixelFormat
Alpha
Alpa0
BlendingFactor1
BlendingFactor2
FBStartAddress
ImageWidth
ImageHeight
Backcolor

0RK043FN48H_WIDTH(480)0RK043FN48H_HEIGHT(272)
LTDC_PIXEL_FORMAT_ARGB8888
255
0
可変
可変
メモリアドレス（可変）RK043FN48H_WIDTH
RK043FN48H_HEIGHT
オールゼロ

表 4.3.2.3.2 480x272LCD の LTDC_LayerCfg_t 型の設定値

634.3.3 TP
TP(touch panel Controller)は FT5336 を使用しており、LCD をタッチした場合、その座標を読み取ることができる。ドライバ自体は StmCube で供給されており、I2C ポート３に接続されている。I2Cの制御に関しては、BSP 中の stm32746g_discovery.c が一括して管理し、TP 部の制御は BSP 中の
stm32746g_discovery_ts.c 中のインターフェイス関数を、そのまま使用している。

4.3.4 SDMMC
SDMMC(SD/SDIO/MMC card host interface)は SD カードメモリや SDIO とのインターフェイスを行うペリフェラルである。STM32F746 Discovery ボードではマイクロ SD カードソケットに実装されているため SD カード、SDHC カードとのインターフェイスを行うように設計している。SD カードとの通信には送受信とも DMA を使用している。Cortex-F7 ではデータキャッシュ機能を持つため、キャッシュ処理も同時に行っている。

4.3.4.1 データ仕様
SDMMC ドライバは SD カード用に設計している。表 4.3.4.1.1 に SDMMC ドライバ用のハンドラ型
SDMMC_Handle_t を示す。表 4.3.4.1.2 に SD カード情報を設定する SDMMC_CardInfo_t 型を定義す
る。
番号

項目

型

機能

1
2
3
4
5
6
7
8
9
10
11
12

base
ClockMode
BusWideRetryCount
cardtype
RCA
CSD[4]
CID[4]
status
SdCmd
hdmarx
hdmatx

uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
volatile uint32_t
volatile uint32_t
DMA_Handle_t *DMA_Handle_t *SDMMC レジスタベースアドレス
指定クロックモード
指定バス幅
リトライ回数
カード種類
RCA 値
CSD 値
CID 値
転送状態
転送指定コマンド
受信用 DMA ハンドラ
送信用 DMA ハンドラ

表 4.3.4.1.1 SDMMC_Handle_t 型
番号

項目

型

機能

1
2
3
4
5
6

capacity
blocksize
maxsector
RCA
cardtype
statusuint64_t
uint32_t
uint32_t
uint16_t
uint8_tuint8_t

容量(バイト)ブロックサイズブロックの数SD RCA 値
カード種類
ステータス

表 4.3.4.1.2 SDMMC_CardInfo_t 型① ClockMode
クロックモードを設定する。
定義

SDMMC_TRANSFER_CLK_DIV

値

0x0

内容

DIV なし表 4.3.4.1.3 ClockMode 設定値② BusWidth
SDMMC の使用データバス幅を設定する。
定義

値

内容

64

SDMMC_BUS_WIDE_1B
SDMMC_BUS_WIDE_4B
SDMMC_BUS_WIDE_8B

0x00000000
SDMMC_CLKCR_WIDBUS_0
SDMMC_CLKCR_WIDBUS_1

1 ビット
4 ビット
8 ビット

表 4.3.4.1.4 BusWidth 設定値③ cardtype
カード情報取得後判定したカード種類
定義

値

SD_CARD_V11
SD_CARD_V20
SD_CARD_HC
MMC_CARD
SD_IO_CARD
HS_MM_CARD
SD_IO_COMBO_CARD
MMC_CARD_HC

0
1
2
3
4
5
6
7

内容

SD CARD V1.1
SD CARD V2.0
SDHC CARD
MMC CARD(未対応)
SD IO CARD(未対応)
HS MMC CARD(未対応)
SD IO CARD(未対応)
MM HC CARD(未対応)

表 4.3.4.1.5 cardtype 設定値
ドライバの返り値を ER コードで設定しているが、SDMMC 独自エラーが発生した場合の拡張定義を表
4.3.4.1.6 に示す。
定義

値

E_SDCOM
E_SDCRC
E_SDECMD
E_SDVOL
E_SDTRS

-80
-81
-82
-83
-84

内容

コマンドエラー
CRC エラーコマンドインデックスエラー
電圧エラー
通信エラー

表 4.3.4.1.6 エラーコード拡張

4.3.4.2 インターフェイス仕様
SDMMC を設定するドライバ関数を以下に示す。ドライバは表 4.3.5.2.1 に示す基本動作を行うドラ
イバと、
表 4.3.5.2.2 の SD カードの初期設定を行うドライバがある。
初期設定ドライバは後述の Storage
Device Manager からカード検知時、一定の手順で呼び出しを行う。
関数名

型

引数

機能

sdmmc_init
sdmmc_sensevoid
bool_tintptr_t exinf
int idsdmmc_open

SDMMC_
Handle_t*

int idsdmmc_close

ER

SDMMC_handle_t *hsd

sdmmc_eraseER

sdmmc_blockreadER

sdmmc_blockwrite

ER

SDMMC_handle_t *hsd
uint64_t startaddr
uint64_t endaddr
SDMMC_handle_t *hsd
uint32_t *pbuff
uint32_t ReadAddr
uint32_t blocksize
uint32_t num
SDMMC_handle_t *hsd
uint32_t *pbuff

SDMMC ハード初期化
指定 ID の SD card をセンスする。ある場合 true を返す
指定 ID の SDMMC ドライバ
をオープンする。戻り値はハンドラへのポインタ
SDMMC ドライバをクローズする
SD card のイレーズを行う

備考

SD card からブロック単位でREAD する

SD card へブロック単位でWRITE する65

sdmmc_wait_transfar

ER

sdmmc_checkint

void

uint32_t WriteAddr
uint32_t blocksize
uint32_t num
SDMMC_handle_t *hsd
uint32_t Timeout
SDMMC_handle_t *hsd

READ/WRITE 転送待ちを行う
割込み関数

表 4.3.4.2.1 SDMMC 基本ドライバ関数

関数名

型

引数

機能

sdmmc_getcardinfoER

sdmmc_checkCID
sdmmc_setaddress

ER
ER

SDMMC_handle_t *hsd
SDMMC_CardInfo_t *pCinfo
SDMMC_handle_t *hsd
SDMMC_handle_t *hsd

sdmmc_sendCSD
sdmmc_select_cardERERsdmmc_configuration

ER

SDMMC_handle_t *hsd
SDMMC_handle_t *hsd
uint32_t addr
SDMMC_handle_t *hsd

sdmmc_set_widebus
sdmmc_getstatus

ER
ER

SDMMC_handle_t *hsd
SDMMC_handle_t *hsd

コネクトした SD card の情報を取り出すCID を取得する
相対アドレス(RCA)を取得する。
CSD を取得する。
カードセレクトコマンドを発行する
コンフィギュレーション設
定を行う
バス幅を設定する
SD カードステートを取り込む。

備考

表 4.3.4.2.2 SDMMC 初期化ドライバ関数

4.3.4.3 設定手順
SDMMC のハードウェアの初期化は電源投入時、リセット後に sdmmc_init 関数を用いて行う。SD
カードの場合、スロットにメディアがあるかないかで初期化手順が異なる。メディアの管理は後述のStorage Device Manager が行う。挿抜処理が可能なメディアの場合、Storage Device Manager は500ms 周期に mci_ses_por 関数（仮想関数で SDMMC の場合、sdmmc_init が呼び出される）を呼び出してメディアの有無をチェックする。これ以降は、図 4.3.5.3.1 の初期化フローに従い、メディアが挿入された場合は、初期化処理を行う。初期化処理中にエラーが発生した場合は、メディア使用不可の設定が行われ、すべて正常に終了した場合、メディアが使用可能になる。使用可能な状態の場合、ファイ
ルシステムを用いて、ファイル処理が可能になる。メディアが抜かれた場合は、mci_cls_por 関数（仮想関数で SDMMC の場合、sdmmc_close が呼び出される）を呼び出し、メディアを使用不可にする。
SD カードのドライバは STM32F4xx の場合、SPI となる。SPI の場合は SPI 用にドライバを用いてSD カードの初期化やアクセスを行う。上位層が仮想関数を用いるのは、ドライバ関数を入れ替えれば上位層のプログラムを書き換えなくてもファイルシステムを処理させるためである。
メディアの初期化が終了したと、FATFs のドライバ層を経由して、メディアに対するブロック単位の
READ/WRITE と IO アクセスが発生する。図 4.3.5.3.2 に FATFs のドライバからのブロックリードのフローを示す。ブロックライトは実行関数を mci_wri_blk(sdmmc_block_write)に置き換えればよい。
なお、ブロックリード、ライトのバッファ領域のポインタが 4 バイトアラインとなっているが、FATFsのブロックリード、ライトドライバは 1 バイトアラインの領域にデータの読み書きを指定する。そのため、SDMMC ドライバのブロックリード、ライトは 1 バイトアラインの読み書きを有効にしている。

66

図 4.3.4.3.1 初期化フロー67

図 4.3.4.3.2 ドライバーブロックリード

4.3.5 AUDIO
AUDIO ドライバは、入力としてアナログ音楽信号をデジタルの PCM データに変換を行い、出力としてデジタル PCM データをアナログ音楽信号に変換する。STM32F746-Discovery では、アナログ出力
用に wm8994 を使用している。
wm8994 は TP 用のドライバと同様に I2C ポート３に接続されている。
I2C の制御に関しては、BSP 中の stm32746g_discovery.c が一括して管理し、これを含めたオーディオ
制御は BSP 中の stm32746g_discovery_audio.c 中のインターフェイス関数を、そのまま使用しても制御を行うことができる。

4.3.5.1 データ仕様
AUDIO ドライバは入力部と出力部の共通に初期化を行う。ハンドラを用いて入力と出力の制御を行う。入力処理と出力処理は使用する関数がことなるが、ハンドラは共通に使用する。表 4.3.5.1.1 にSDMMC ドライバ用の初期化型 SAI_Init_t を示す。表 4.3.5.1.2 にハンドラ型 AUDIO_Handle_t 型を定義する。ハードウェア定義構造体は内部処理に使用するため構成は示さない。
番号

項目

型

機能

1
2

AudioMode
Synchrouint32_t
uint32_t

AUDIO モード
SAI ブロックシンクロ値

68

3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

SynchroExt
OutputDrive
NoDivider
FIFOThreshold
AudioFrequency
MckdivMonoStereoMode
CompandingMode
TriSize
ProtocolDataSizeFirstBit
ClockStrobing
FrameLength
ActiveFrameLength
FSDefinition
FSPolarity
FSOffsetFirstBitOffset
SlotSize
SlotNumber
SlotActive

uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t

SAI ブロックシンクロ拡張値
出力デバイスDIVIDER 有効/無効
FIFO スレッシュホールド設定
AUDIO サンプリング周波数
マスタークロック DIVIDER 値
モノクロ/ステレオモード
コンパウンディングモード
TRIState マネージメント設定
SAI BLOCK プロトコル
SAI BLOCK データサイズ
MSB/LSB 設定
クロック・ストロービング設定
フレーム長
アクティブ・フレーム長
フレーム・シンクロナス定義
FS POLARITY 設定
FS OFFSET 設定
スロット中の最初のデータビット位置
スロットサイズ
スロット番号
SLOT アクティブ設定

表 4.3.5.1.1 SAI_Init_t 型
番号

項目

型

機能

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

base
pcb
OutInit
InInitpBuffPtr
XferSize
XferCounthdmatxhdmarxaudiomutecallback
audioerrorcallback
transcallback
transhalfcallback
recevcallback
recvhalfcallbak
errorcallback
status[2]ErrorCodeuint32_t
AUDIO_PortControlBlock*
SAI_Init_t
SAI_Init_t
uint8_t*uint16_t
uint16_t
DMA_Handle_t *DMA_Handle_t *void(*)(Audio_Handle_t*)void(*)(Audio_Handle_t*)void(*)(Audio_Handle_t*)void(*)(Audio_Handle_t*)void(*)(Audio_Handle_t*)void(*)(Audio_Handle_t*)void(*)(Audio_Handle_t*)volatile uint32_t
volatile uint32_t

SAI デバイスのベースアドレス
ハードウェア定義構造体へのポインタ
出力ブロック初期設定
入力ブロック初期設定
データ領域へのポインタ
データサイズ
送受信カウント
送信 DMA ハンドラへのポインタ
受信 DMA ハンドラへのポインタ
MUTE コールバック関数
割込みエラーコールバック関数
送信終了コールバック関数
ハーフ送信終了コールバック関数
受信終了コールバック関数
ハーフ受信終了コールバック関数
エラーコールバック関数
AUDIO ステータス
エラーコード

表 4.3.5.1.2 AUDIO_Handle_t 型① AudioMode
オーディオモードを設定する。
定義

SAI_MODEMASTER_TX
SAI_MODEMASTER_RX
SAI_MODESLAVE_TX
SAI_MODESLAVE_RX

値0x0000000
SAI_xCR1_MODE_0
SAI_xCR1_MODE_1(SAI_xCR1_MODE_0

内容|

マスタ送信モード
マスタ受信モード
スレーブ送信モード
スレーブ受信モード

69

SAI_xCR1_MODE_1)

表 4.3.5.1.3 AudioMode 設定値② Syncro
シンクロモードを設定する。
定義

SAI_ASYNCHRONOUS
SAI_SYNCHRONOUS
SAI_SYNCHRONOUS_EXT

値

内容0x00000000
SAI_xCR1_SYNCEN_0
SAI_xCR1_SYNCEN_1

アシンクロナス
シンクロナス
拡張シンクロナス

表 4.3.5.1.4 Syncro 設定値③ SynchroExt
SAI ブロックシンクロナス拡張値
定義

値

SAI_SYNCEXT_DISABLE
SAI_SYNCEXT_IN_ENABLE
SAI_SYNCEXT_OUTBLOCKA_ENABLE
SAI_SYNCEXT_OUTBLOCKB_ENABLE

0x00000000
0x00000001
0x00000002
0x00000004

内容

無効
IN 有効
OUTBLOCKA 有効
OUTBLOCKB 有効

表 4.3.5.1.5 SynchroExt 設定値④ OutputDrive
出力ドライブ設定
定義

SAI_OUTPUTDRIVE_DISABLE
SAI_OUTPUTDRIVE_ENABLE

値

0x00000000
SAI_xCR1_OUTDRIV

内容

無効
有効

表 4.3.5.1.6 OutputDrive 設定値⑤ NoDivider
DIVIER 有効、無効設定
定義

SAI_MASTERDIVIDER_ENABLE
SAI_MASTERDIVIDER_DISABLE

値

0x00000000
SAI_xCR1_NODIV

内容

有効
無効

表 4.3.5.1.7 NoDivider 設定値⑥ FIFOThreshold
FIFO スレシュホールド設定
定義

SAI_FIFOTHRESHOLD_EMPTYSAI_FIFOTHRESHOLD_1QF
SAI_FIFOTHRESHOLD_HF
SAI_FIFOTHRESHOLD_3QF
SAI_FIFOTHRESHOLD_FULL

値

0x00000000
SAI_xCR2_FTH_0
SAI_xCR2_FTH_1(SAI_xCR2_FTH_0|
SAI_xCR2_FTH_1)
SAI_xCR2_FTH_2

内容

0
1/4
1/2
3/4
1

表 4.3.5.1.8 FIFOThreshold 設定値⑦ MonoStereoMode
モノクロ/ステレオモード設定
定義

SAI_STEREOMODESAI_MONOMODE

値

0x00000000
SAI_xCR1_MONO

内容

ステレオ
モノクロ

表 4.3.5.1.9 MonoStrereoMode 設定値⑧

CompandMode70コンパウンディングモード設定
定義

値

SAI_NOCOMPANDING
SAI_ULAW_1CPL_COMPANDING
SAI_ALAW_1CPL_COMPANDING

0x00000000
SAI_xCR2_COMP_1(SAI_xCR2_COMP_1|
SAI_xCR2_COMP_0)(SAI_xCR2_COMP_1|
SAI_xCR2_CPL)(SAI_xCR2_COMP_1|
SAI_xCR2_COMP_0|
SAI_xCR2_CPL)

SAI_ULAW_2CPL_COMPANDING
SAI_ALAW_2CPL_COMPANDING

内容なし
ULAW 1CPL
ALAW 1CPLULAW 2CPL
ALAW 2CPL

表 4.3.5.1.10 CompandingMode 設定値⑨ TriState
TriState マネージメント設定
定義

値

SAI_OUTPUT_NOTRELEASEDSAI_OUTPUT_RELEASED

内容

0x00000000
SAI_xCR2_TRIS

無効
有効

表 4.3.5.1.11 TriState 設定値⑩ Protocol
BLOCK プロトコル設定
定義

値

SAI_FREE_PROTOCOLSAI_SPDIF_PROTOCOLSAI_AC97_PROTOCOL

内容

0x00000000
SAI_xCR1_PRTCFG_0
SAI_xCR1_PRTCFG_1

フリー
SPDIF
AC97

表 4.3.5.1.12 Protocol 設定値⑪ DataSize
BLOCK データサイズ設定
定義

値

SAI_DATASIZE_8
SAI_DATASIZE_10
SAI_DATASIZE_16
SAI_DATASIZE_20
SAI_DATASIZE_24
SAI_DATASIZE_32

内容

SAI_xCR1_DS_1(SAI_xCR1_DS_1|
SAI_xCR1_DS_0)
SAI_xCR1_DS_2(SAI_xCR1_DS_2|
SAI_xCR1_DS_0)(SAI_xCR1_DS_2|
SAI_xCR1_DS_1)(SAI_xCR1_DS_2|
SAI_xCR1_DS_1|
SAI_xCR1_DS_0)

8
10
16
20
24
32

表 4.3.5.1.13 DataSize 設定値⑫ FirstBit
MSB/LSB 設定
定義

値

SAI_FIRSTBIT_MSB
SAI_FIRSTBIT_LSB

内容0x00000000
SAI_xCR1_LSBFIRST

MSB
LSB

表 4.3.5.1.14 FirstBit 設定値⑬ ClockStrobing
クロック・ストロービング設定
定義

値

内容

71

SAI_CLOCKSTROBING_FALLINGEDGESAI_CLOCKSTROBING_RISINGEDGE

0x00000000
SAI_xCR1_CKSTR

立下りエッジ立ち上がりエッジ

表 4.3.5.1.15 ClockStrobing 設定値⑭ FSDefinition
フレーム・シンクロナス設定
定義

値

SAI_FS_STARTFRAME
SAI_FS_CHANNEL_IDENTIFICATION

0x00000000
SAI_xFRCR_FSDEF

内容

START FRAME
CHANNEL IDENTIFICATION

表 4.3.5.1.16 FSDefintion 設定値⑮ FSPolarity
フレーム・シンクロナス POLARITY 設定
定義

値

SAI_FS_ACTIVE_LOW
SAI_FS_ACTIVE_HIGH

0x00000000
SAI_xFRCR_FSPO

内容

アクティブロー
アクティブハイ表 4.3.5.1.17 FSPolarity 設定値⑯ FSOffset
フレーム・シンクロナス オフセット設定
定義

値

SAI_FS_FIRSTBITSAI_FS_BEFOREFIRSTBIT

0x00000000
SAI_xFRCR_FSDEF

内容

ファーストビットファーストビットの前

表 4.3.5.1.18 FSDefintion 設定値⑰ SlotSize
スロットサイズ設定
定義

SAI_SLOTSIZE_DATASIZE
SAI_SLOTSIZE_16B
SAI_SLOTSIZE_32B

値

内容

0x00000000
SAI_xSLOTR_SLOTSZ_0
SAI_xSLOTR_SLOTSZ_1

データサイズ
16 ビット
32 ビット

表 4.3.5.1.19 SlotSize 設定値⑱ SlotActive
スロットアクティブ設定
定義

SAI_SLOT_NOTACTIVESAI_SLOTACTIVE_0
SAI_SLOTACTIVE_1
SAI_SLOTACTIVE_2
SAI_SLOTACTIVE_3
SAI_SLOTACTIVE_4
SAI_SLOTACTIVE_5
SAI_SLOTACTIVE_6
SAI_SLOTACTIVE_7
SAI_SLOTACTIVE_8
SAI_SLOTACTIVE_9
SAI_SLOTACTIVE_10
SAI_SLOTACTIVE_11
SAI_SLOTACTIVE_12
SAI_SLOTACTIVE_13
SAI_SLOTACTIVE_14
SAI_SLOTACTIVE_15

値

内容0x00000000
0x00010000
0x00020000
0x00040000
0x00080000
0x00100000
0x00200000
0x00400000
0x00800000
0x01000000
0x02000000
0x04000000
0x08000000
0x10000000
0x20000000
0x40000000
0x80000000

なし
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

72

SAI_SLOTACTIVE_FULL

0xFFFF0000

フル

表 4.3.5.1.20 SlotActive 設定値
AUDIO ハンドラ内のエラー定義(ErrorCode)を以下の表に示す。
定義

値

AUDIO_ERROR_NONE
AUDIO_ERROR_OVRUDR
AUDIO_ERROR_AFSDETAUDIO_ERROR_LFSDETAUDIO_ERROR_WCKCFGAUDIO_ERROR_TIMEOUT

0x00000000
0x00000001
0x00000004
0x00000008
0x00000010
0x00000040

内容

エラーなし
オーバーランまたはアンダーラン
Anticipated Frame synchronisation detection
Late Frame synchronisation detection
Wrong clock configuration
タイムアウト

表 4.3.5.1.21 エラーコード値

4.3.5.2 インターフェイス仕様
AUDIO ドライバは表 4.3.5.2.1 の設定ドライバと表 4.3.6.2.2 の入出力制御を行うドライバの二種類がある。引数で設定する mode は入力用と主力用に関数を設定する。mode の設定値は以下の２つがある。
① AUDIO_OUT_BLOCK：出力制御を行う② AUDIO_IN_BLOCK：入力制御を行う
関数名

型

引数

機能

audio_init

ID id

AUDIO ハード初期化

audio_deinit

AUDIO_H
andle_t*
void

AUDIO 設定解除

audio_clockconfig

void

audio_irqhandler

void

AUDIO_Handle_t* haudio
uint32_t mode
AUDIO_Handle_t* haudio
uint32_t AudioFreq
void *Param
SDMMC_handle_t *hsd

備考

AUDIO クロック設定
AUDIO 割込み関数

表 4.3.5.2.1 AUDIO 設定ドライバ関数
関数名

型

引数

機能

audio_startER

入出力機能開始

audio_endERaudio_transmit

ERaudio_receiveER

audio_dmapauseER

audio_dmaresume

ERaudio_dmastop

ERaudio_enable

void

AUDIO_Handle_t* haudio
uint32_t mode
AUDIO_Handle_t* haudio
uint32_t mode
AUDIO_Handle_t* haudio
uint8_t *pData
uint16_t Size
AUDIO_Handle_t* haudio
uint8_t *pData
uint16_t Size
AUDIO_Handle_t* haudio
uint32_t mode
AUDIO_Handle_t* haudio
uint32_t mode
AUDIO_Handle_t* haudio
uint32_t mode
SDMMC_handle_t *hsd

audio_disable

ERaudio_gethandle

AUDIO_Ha

AUDIO_Handle_t* haudio
uint32_t mode
ID id

備考

入出力機能終了
出力データ転送開始

出力

入力データ転送開始

入力

入出力停止
入出力再開
入出力終了
SD カードステートを取り込む。
SAI 開始SAI 停止73

audio_status

ndle_t*void

AUDIO_Handle_t* haudio
uint32_t mode

実行状態取出し

表 4.3.5.2.2 AUDIO 制御ドライバ関数

4.3.5.3 設定手順
音楽演奏の手順について記載する。STM32F746 Discovery ではオーディオデータの管理は SAI モジ
ュールで行う、AUDIO ドライバは SAI モジュールの制御が主な作業である。オーディオデータをコネクタに入手力を行うのは wm8994 が行う、wm8994 は I2C3 に接続されており、I2C を通して制御を行う。ここではオーディオ出力の手順について説明を行う。MP3 用の PCM データは数１０MB から数１
００MB に及ぶため、すべてをメモリに蓄えて演奏を行うことはできない。演奏スピードに合わせてデータ領域の演奏済領域に次の演奏データを絶え間なく書き込み、DMA を循環モードにして連続演奏を行う。STM32F のストリーム DMA には、半分転送終了時とデータ領域全体の転送終了時に完了割込みを発生させる機能があり、コールバック関数でイベントを取り込み、メインで音楽演奏を行っているタ
スクにデータ書き込みを要求していくことで大容量の演奏を可能にしている。
図 4.3.5.3.1 の初期化フローでは、SAI ハードウェアの初期化を行う。この時点で SAI モジュールを入力用に使用するか、出力用に使用するかは決定されていない。

図 4.3.5.3.1 AUDIO 初期化
図 4.3.5.3.2 の出力設定フローチャートで、SAI を出力用にデータ設定を行い、wm8994 の初期化を行う。
図 4.3.5.3.2 の演奏開始フローチャートで、演奏用のデータをデータ領域にセットし、コールバック関
数を設定後、演奏を開始する。
演奏中は、
図 4.3.5.3.3 の二つのコールバック関数のフローチャートのように、半分のデータが wm8994に転送終了時、DMA ハーフ転送コールバック関数が読みだされる。これにより、データ領域の前半分が空となったことがわり、演奏用のメインタスクに前半分の次のデータをセットするように要求を行う。
DMA 全転送終了コールバック関数が読みだされた場合、データ領域の後ろ半分が空になったことがわ
かり、演奏用のメインタスクに後ろ半分の次のデータをセットするように要求を行う。両方のコールバック関数で、演奏データがないとき、演奏用のメインタスクに演奏の終了を通知する。

74

図 4.3.5.3.2 出力設定フローチャート

図 4.3.6.3.3 演奏開始フローチャート

図 4.3.5.3.4 コールバック関数呼び出しのフローチャート
音楽演奏が終了した時点で、図 4.3.6.3.5 演奏終了フローチャートの手順でデバイスを停止する。

75

図 4.3.5.3.5 演奏終了フローチャート

4.3.6 DSIDSI ドライバは、MIPI 仕様に準じた Display serial Interface をサポートする。LTDC で生成されたLCD 画像を Display serial Interface へ変換を行う。

4.3.6.1 データ仕様
表 4.3.6.1.1 に DSI ドライバの初期化型 DSI_Init_t を示す。表 4.3.6.1.2 にハンドラ型 DSI_Handle_t型を定義する。ハードウェア定義構造体は内部処理に使用するため構成は示さない。
番号

項目

型

機能

1
2
3
4
5
6

AutomaticClockLaneControl
TXEscapeCkdiv
NumberOfLanes
pllndiv
pllidfpllodfuint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t

Lane クロック自動制御
TX Escape のクロック分周値
Lane 数
PLL loop 分周値
PLL 入力分周値
PLL 出力分周値

表 4.3.6.1.1 DSI_Init_t 型
番号

項目

型

機能

1
2
3
4
5
6
7

base
Init
teffectcallback
refreshcallback
errorcallback
statuserrorCodeuint32_t
DSI_Init_tvoid(*)(DSI_Handle_t*)void(*)(DSI_Handle_t*)void(*)(DSI_Handle_t*)volatile uint32_t
volatile uint32_t

DSI デバイスのベースアドレス
DSI 初期化データ
TearEffct コールバック関数
リフレッシュコールバック関数
エラーコールバック関数
DSI ステータス
エラーコード

表 4.3.6.1.2 DSI_Handle_t 型① AutomaticClockLaneControl
自動 Lane クロック制御モードを設定する。
定義

DSI_AUTO_CLK_LANE_CTRL_DISABLE

値

内容

0x0000000

無効76

DSI_AUTO_CLK_LANE_CTRL_ENABLE

DSI_CLCR_ACR

有効表 4.3.6.1.3 AutomaticClockLaneControl 設定値
DSI ハンドラ内のエラー定義(ErrorCode)を以下の表に示す。
定義

値

DSI_ERROR_NONE
DSI_ERROR_ACK
DSI_ERROR_PHY
DSI_ERROR_TX
DSI_ERROR_RX
DSI_ERROR_ECC
DSI_ERROR_CRC
DSI_ERROR_PSE
DSI_ERROR_EOT
DSI_ERROR_OVF
DSI_ERROR_GEN

0x00000000
0x00000001
0x00000002
0x00000004
0x00000008
0x00000010
0x00000020
0x00000040
0x00000080
0x00000100
0x00000200

内容

エラーなし
ACK エラー
PHY エラー
送信エラー
受信エラー
ECC エラー
CRC エラー
パケットサイズエラー
EOT エラー
FIFO オーバーフローエラー
ジェネリック FIFO エラー

表 4.3.6.1.4 エラーコード値

4.3.6.2 インターフェイス仕様
DSI ドライバの設計関数を表 4.3.7.2.1 に示す。
関数名

型

引数

機能

dsi_init
dsi_deinit
dsi_configvideo

ER
ER
ER

DSI ハード初期化
DSI 制御終了
VIDEO 設定を行う

dsi_configltdc

ER

dsi_configadaptedCmdM
odeER

dsi_configcommandER

dsi_configPhyTimerER

dsi_configHostTimeoutER

dsi_start
dsi_stop
dsi_swrite

ER
ER
ER

dsi_lwriteER

dsi_readER

DSI_Handle_t *hdsi
DSI_Handle_t* hdsi
DSI_Handle_t* hdsi
DSI_VideoConfig_t *pini
LTDC_handle_t *hltdc
DSI_VideoConfig_t *pini
DSI_Handle_t *hdsi
DSI_CommandConfig_t *pcfg
uint32_t ackactive
DSI_Handle_t *hdsi
uint32_t lpcmodeuint32_t ackactive
DSI_Handle_t *hdsi
DSI_PHY_Time_t *ptime
DSI_Handle_t *hdsi
DSI_HostTimeout_t*ptimeout
DSI_Handle_t *hdsi
DSI_Handle_t *hdsi
DSI_Handle_t *hdsi
uint32_t Channel
uint32_t Modeuint32_t Param1
uint32_t Param2
DSI_Handle_t *hdsi
uint32_t Channel
uint32_t Modeuint32_t NbParams
uint32_t Param1
uint8_t *buf
DSI_Handle_t *hdsi

備考

DSI の設定を LTDC の初期設定に反映する
適合コマンドモード設定

コマンド転送モード設定

DSI-PHY のタイミング設定
DSI-HOST タイムアウト設定
DSI モジュール実行開始
DSI モジュール停止
ショートコマンド発行

ロングコマンド発行

DSI コマンド受信77dsi_enterULPMData
dsi_exitULPMData
dsi_enterULPM
dsi_exitULPM
dsi_startPatternGenerat
or

ER
ER
ER
ER
void

dsi_stopPatternGeneratordsi_setLanePinsConfigu
rationvoid

dsi_setPHYTimingER

dsi_forceTXStopModeER

dsi_irqhandler

void

ER

uint32_t Channel
uint8_t *Array
uint32_t Sizeuint32_t Modeuint32_t DCSmd
uint8_t *buf
DSI_Handle_t *hdsi
DSI_Handle_t *hdsi
DSI_Handle_t *hdsi
DSI_Handle_t *hdsi
DSI_Handle_t *hdsi
uint32_t Modeuint32_t Orientation
DSI_Handle_t *hdsi
DSI_Handle_t *hdsi
uint32_t CustmLane
uint32_t Lane
uint32_t active
DSI_Handle_t *hdsi
uint32_t timing
uint32_t active
uint32_t ValueDSI_Handle_t *hdsi
uint32_t Lane
uint32_t active
DSI_Handle_t *hdsi

UPLM 設定(D-PHY PLL 実行)
UPLM 終了(D-PHY PLL 実行)
UPLM 設定(D-PHY PLL オフ)
UPLM 設定(D-PHY PLL オフ)
テストパターン生成開始

テストパターン生成終了
カスタムレーン設定

PHY タイミング設定

クロック、データレーン強制停止
DSI 割込みハンドラ

表 4.3.6.2.1 DSI ドライバ関数

4.3.6.3 設定手順
LCD の初期化手順は以下のフローチャートに従う。

図 4.3.6.3.1 LCD 初期化

78

4.3.7EMAC

EMAC は、有線インサーネット用ドライバである。EMAC ドライバはパケットのインターフェイス
として LWIP 用 PBUF を想定して、設計している。パケット・インターフェイスを修正すれば、他の
TCP/IP プロトコル・スタックに対応可能である。

4.3.7.1

データ仕様

EMAC ドライバは初期化用の型として、表 4.3.7.1.1 の EMAC コンフィギュレーション構造体と、ハンド ラと して 表 4.3.7.1.2 の EMAC ハン ドラ 型を 持つ 。EMAC コ ンフィ グレ ーシ ョン 構造 体は
DESCRIPTOR キューと送受信バッファ等の設定を定義する。EMAC ドライバは、この設定に従って
DESCRIPTOR を設定する。
番号

項目

型

機能

1
2
3
4
5
6

packetbufsize
rxquecounttxquecountquebufferdatabuffer
semid

uint32_t
uint32_t
uint32_tvoid *
void *
ID

パケットバッファ長
受信キューの数
送信キューの数
キューバッファ領域へのポインタ
データ領域へのポインタ
mdio 用セマフォ ID(LOCK 用)

表 4.3.7.1.1 EMAC コンフィギュレーション構造体

番号

項目

型

機能

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29

base
Init
tx_waitintno
macid
phy_addr
phy_features
linkvalue
tx_top_desc
tx_cur_desc
rx_top_desc
rx_cur_desc
emacevent
phy_opt_init
ifShortPkts
mmc_tx_irq_n
mmc_rx_irq_n
mmc_rx_csum_offload_irq_n
irq_receive_pmt_irq_n
irq_tx_path_in_lpi_mode_n
irq_tx_path_exit_lpi_mode_n
irq_rx_path_in_lpi_mode_n
irq_rx_path_exit_lpi_mode_n
normal_irq_n
fatal_bus_error_irq
tx_undeflow_irq
tx_jabber_irq
tx_early_irq
tx_process_stopped_irq

uint32_t
EMAC_Init_t
uint8_tuint8_t *uint8_tuint8_tuint32_t
uint32_t
volatile uint32_t *volatile uint32_t *volatile uint32_t *volatile uint32_t *void (*) ()void (*) ()uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t

EMAC モジュールベースアドレス
EMAC 初期設定値保存領域
送信終了待ちフラグ
EMAC 割り込み番号
PORTID 番号（保存用）
PHY アドレス番号
PHY の機能ステータス
要求 LINK 値
送信キュー(DESCRIPTOR)の先頭アドレス
現在の送信キューのアドレス
受信キュー(DESCRIPTOR)の先頭アドレス
現在の受信キューのアドレス
EMAC 状態のコールバック関数
PHY のオプション設定関数
ショートパケットの受信回数
MMC 割り込み MMCTIS の発生回数
MMC 割り込み MMCRIS の発生回数
MMC 割り込み MMCCSUM の発生回数
PMT 割り込みの発生回数
LPI 割り込み TLPEN の発生回数
LPI 割り込み TLPEX の発生回数
LPI 割り込み RLPIEN の発生回数
LPI 割り込み RLPIEX の発生回数
TX/RX NORMAL 割り込みの発生回数
ABNORMAL/FBI の発生回数
ABNORMAL/UNF の発生回数
ABNORMAL/TJT の発生回数
ABNORMAL/ETI の発生回数
ABNORMAL/TPS の発生回数

79

30
31
32
33
34
35

rx_normal_irq_n
rx_early_irq
rx_overflow_irq
rx_buf_unav_irq
rx_process_stopped_irq
rx_watchdog_irq

uint32_t
uint32_t
uint32_t
uint32_t
uint32_t
uint32_t

TX/RX NORMAL/RIE の発生回数
TX/RX NORMAL/ERI の発生回数
ABNORMAL/OVF の発生回数
ABNORMAL/RU の発生回数
ABNORMAL/RPS の発生回数
ABNORMAL/RWT の発生回数

表 4.3.7.1.2 EMAC ハンドラ型① packetbufsize

パケットバッファサイズを指定する。キャッシュアラインサイズ出なければならない。
② rxquecount
受信用のキュー(DESCRIPTOR)の数を指定する。
③ txquesize
送信用のキュー(DESCRIPTOR)の数を指定する。
④ quebuffer

EMAC で使用するキュー(DESCRIPTOR)領域のポインタを指定する。この領域はキャッシュア
ライン・アドレスでなければならない。quebuffer のバイトサイズは以下の計算による。
que_size = (rxquecount + txreqcount) × 4⑤ databuffer

EMAC で使用する通信用のバッファ領域のポインタを指定する。この領域はキャッシュアライ
ン・アドレスでなければならない。databuffer のバイトサイズは以下の計算による。
data_size = (rxquecount + txreqcount) × packetbufsize⑥ semid

PHY との通信時、排他制御を行うためのセマフォ ID。ゼロなら排他制御を行わない。

4.3.7.2 インターフェイス仕様
EMAC を用いてイーサネット通信を行うためのドライバ関数は以下の通りである。
関数名

型

引数

機能

emac_init

EMAC_Hand_t*

ID portid
EMAC_Init_t *ini

emac_deinit
emac_sendERER

emac_recv_length
emac_recv

intER

emac_startER

emac_stopER

emac_link_detect
emac_link_mode_set

uint16_tER

emac_reset

ER

EMAC_Handle_t* hmac
EMAC_Handle_t* hmac
struct emac_pkt *pktp
EMAC_Handle_t* hmac
EMAC_Handle_t*hmac
struct emac_pkt *pktp
EMAC_Handle_t* hmac
uint32_t link
EMAC_Handle_t* hmac
int disable
EMAC_Handle_t* hmac
EMAC_Handle_t* hmac
uint32_t link
EMAC_Handle_t* hmac

指定ポート ID の EMAC ペリフ
ェラルを初期化し、ハンドラへのポインタを返す
EMAC を未使用状態に戻す
パケットのデータを送信する

備考

受信パケット長を取り出す
受信パケットを取り出す
EMAC と PHY をスタートする
EMAC を停止する
LINK 情報を取り出す
LINK 情報を EMAC に設定する
EMAC をリセットする80

emac_hps_isr

void

uint8_t *mac_addr
intptr_t exinf

EMAC 割込みサービスルーチ
ン

表 4.3.7.2.1 EMAC ドライバ関数

4.3.7.3 フローチャート
EMAC ドライバは、TCP/IP プロトコル・スタックから呼び出されることを前提に設計している。
TCP/IP プロトコル・スタックとの依存性が高い部分は、送受信用のパケットの受け渡し処理である。
このドライバでは、LWIP 用の pbuf を使用してパケットを受け渡すことを前提に設計している。
EMAC の初期化フローを図 4.2.7.3.1 に示す。ここで特に注意が必要なのは、EMAC モジュールはリ
セット後、割り込みマスクが許可に以降するため、必ず、EMAC の割り込みコントローラは割り込み禁止の状態でシステム起動しなければならない。emac_init にて EMAC の初期化を行う。このとき、
EMAC_Init_t 構 造 体 に て 、 キ ュ ー や 送 受 信 バ ッ フ ァ 領 域 の 設 定 を 行 う 。 ST-ETH で は 、
hardware_init_hook 関数の MPU 設定で EMAC のデータ領域をノンキャッシュメモリに変更するためキャッシュ制御は不要となる。初期化後、emac_reset 関数にて EMAC のリセットを行う。この関数は通信中に EMAC のハードエラー等が発生した場合、EMAC のリセットに使用かのうである。リセット
後、emac_start 関数にて LINK 情報を設定して、PHY のスタート、EMAC のスタートを設定する。
emac_start を実行しても、LINK していない場合、通信動作が開始できないばかりでなく、PHY の設定が AUTO NEGOTIATION の場合、EMAC の通信設定も確定しない。emac_link_detect 関数にて接続情報を取得できる。AUTO NEGOTIATION の場合、接続情報を EMAC に反映するために、
emac_link_mode_set 関数を使用する。
送信処理のフローを図 4.3.7.3.2 に示す。pbuf に送信データをつめて、emac_send 関数を呼び出せばよい。
受信処理のフローを図 4.3.7.3.3 に示す。受信データの有無は、emac_recv_length 関数で受信データ
サイズを取り出せる。受信データがある場合は、サイズ分の pbuf を用意して emac_recv 関数にて、受信データの取得を行う。受信の有無はコールバック関 数のイベントでも通知されるので、常に
emac_recv_length 関数でポーリングを行う必要はない。

81

図 4.3.7.3.1 QSPI 初期化

図 4.3.7.3.2 EAC 送信

図 4.3.7.3.3 EMAC 受信
図 4.3.7.3.4 に EMAC の終了処理を示す。

82

図 4.3.7.3.4 EMAC 終了処理

5 タスクモニタ
本章では、標準入出力機能付きのタスクモニタの仕様に関して記載する。

5.1 概要タスクモニタはタスク上で動作し、デバッグ用のコマンドを用いてプラットフォーム部の機能確認やテストを行う。デバックコマンドは設定によりコマンド追加が可能である。これによりアプリケーショ
ンでも、アプリケーション用デバッグコマンドを追加することができる。タスクモニタの入出力は標準入出力に対して行う、デフォルトの標準入出力は ASP カーネルにて実装されているシリアルデバイス
であるが、入出力の切り替えにより、telnet の端末等に切り替えが可能である。

5.2 標準入出力
タスクモニタの入出力は標準入出力に対して行う。標準入出力は FILE 型を定義し、入力、出力、エラーの３つの FILE へのポインタを以下の名称で定義することで実現する。
⑤ stdin⑥ stdout⑦ stderr
FILE 型は表 5.2.1 の構成となる。FILE 型は fread や fwrite でファイルにアクセスする場合のハンドラとして使用される。
番号

項目

型

機能

1
2
3
4
5
6
7
8

_flags_file_func_in_func_ins_func_out_func_outs_func_flush
_dev

int
int
int
int
void
int
int
void *

ファイル用フラグ
ファイル番号
1byte 入力コールバック関数
n bytes 入力コールバック関数
1byte 出力コールバック関数
n bytes 出力コールバック関数
データフラッシュコールバック関数
デバイス構造体へのポインタ

表 5.2.1 FILE 型
標準入出力では、以下の関数をサポートする。
関数名

型

引数

機能

fgetc
fgets

int
int

ファイルから 1byte 読み込みファイルから文字列読み込み

fputc

int

FILE *fp
char *c
FILE *fp
int c

備考

ファイルに 1byte 書き込み83

fputsintputcharputs
printf

int
int
int

sprintf

int

scanf

int

sscanfint

fflushfread

int
size_tfwritesize_tfprintf

int

putc

int

getchar
getc

int
int

FILE *fp
const char *str
FILE *
int c
const char *str
const char const…
char *cconst char const…
const char const…
char *cconst char const…
FILE *fp
void *buf
size_t len
size_t num
FILE *fp
const void *buf
size_t len
size_t num
FILE *fp
FILE *fp
const char *const…
int c
FILE *fp
FILE *fp

ファイルに文字列書き込み
1byte 書き込み
文字列を標準出力に書き込み
標準出力へのプリント
バッファへプリント

標準入力からスキャン
スキャンしバッファにセット

ファイルのフラッシュ
ファイルからデータ読み込み

結果は項目
数
結果は項目
数
結果は項目
数
結果は項目
数

結果は num数

ファイルへデータ書き込み

結果は num数

ファイルへプリント

結果は項目数

fputc と同様
標準入力から 1byte 読み込み
fgetc と同様

表 5.2.2 サポートしている標準入出力関数

5.3 標準デバッグコマンド
タスクモニタは、標準のデバッグコマンドとして以下のコマンドをサポートする。タスクモニタのデバッグコマンドは第１（カテゴリ）、第２の２つのコマンドで機能を指定する形をとる。また、コマンドを設定する場合、最初の１文字以降を省略可能である。省略名で同一のコマンドがある場合、はじめにディスパッチするコマンドが選択される。
第１コマンド第２コマンド

引数

機能

DISPLAY

BYTE
HALF
WORD
TASK
REGISTER
BYTE
HALF
WORD
COMMANDSERIALTASKACTIVATETERMINATE
SUSPENDRESUME

start address[hex]start address[hex]start address[hex]set address[hex]set address[hex]set address[hex]mode[1 or 2]
portnotaskid-

バイト単位でメモリ DUMP する
２バイト単位でメモリ DUMP する
４バイト単位でメモリ DUMP する
タスクの状態を表示する
CPU レジスタの内容を表示する
バイト単位で、メモリ内容を変更する
２バイト単位で、メモリ内容を変更する
４バイト単位で、メモリ内容を変更する
デフォルト 2、1 の場合最初の 1 文字のみ比較
標準入出力のシリアルポート番号を変更
TASK コマンドの対象タスクを指定する
タスクの起動要求(act_tsk)
タスクを終了する(ter_tsk)
タスクの待ち要求(sus_tsk)
タスクの待ち再開(rsm_tsk)

SET

TASK

84

LOG

HELP

RELEASE
WAKEUPPRIORITY
priority
MODE[logmask][lowmask]
TASK[time]
PORT[no][logno][portaddress]
Arg1
表 5.3.1 標準デバッグコマンド

タスクの待ち解除(rel_wai)
タスクの起床(wup_tsk)
タスクの優先度を変更する
syslog の表示モードを変更する
タスクの実行状態表示(指定が必要)
ポートアクセスログ
コマンドヘルプ

ファイルライブラリが追加された場合、以下のコマンドを追加でサポートする。
第１コマンド第２コマンド

引数

機能

VOLUMEFORMAT
drive
DIR
path
MKDIR
path
RMDIR
path
ERASE
path
表 5.3.2 ファイルデバッグコマンド

ドライブのフォーマット(未サポート)
ディレクトリの表示
ディレクトリの作成
ディレクトリの消去
ファイルの消去

RTC ドライバをサポートした場合、以下のコマンドを追加でサポートする。
第１コマンドRTC

第２コマンド

引数

機能

DATE
year month day
TIMEhour min sec
CLOCK
表 5.3.3 RTC デバッグコマンド

日にちを設定する
時間を設定する
現在の日にちと時間を表示する

5.4 デバッグコマンド拡張
タスクモニタは、コマンドを拡張する機能を持つ。コマンドの拡張は第１（カテゴリ）コマンド単位で追加される。

5.4.1 データ仕様
コマンド追加には２つの型を使用する。COMMAND_INFO 型は第２コマンドの設定を行い、COMMAND_LINK 型 は、 複 数 の COMMAND_INFO 型を ま と め て 登録 カ テ ゴ リ を 指 定す る。
COMMAND_LINK 型 の pcnext は デ バ ッ グ コ マ ン ド の リ ン ク に 使 用 す る 、 そ の た め 、COMMAND_LINK は値付きの変数で作成しなければならない。
番号

項目

型

機能

1
2

commandfunc

const char *int_t (*)()

第２コマンド名
第２コマンド関数へのポインタ

表 5.4.1.1 COMMAND_INFO 型
番号

項目

型

機能

1
2
3
4
5
6

pcnextnum_command
commandfunc
help
pcinfoCOMMAND_LINK *int
const char *int_t (*)()
const char *COMMAND_INFO *COMMAND_LINK のチェーン用
第２コマンドの数
第１（カテゴリ）コマンド名
カテゴリコマンドの実行関数（通常は NULL）
カテゴリの HELP メッセージ
COMMAND_INFO の配列へのポインタ

表 5.4.1.2 COMMAND_LINK 型

5.4.2 インターフェイス仕様
デバッグコマンドの追加は、COMMAND_LINK のインスタンスへのポインタを引数に以下の関数コールにて追加される。
関数名

型

引数

機能

備考

85

setup_command

int

COMMAND_LINK *コマンドカテゴリを追加する

表 5.4.2.1 デバッグコマンド追加定関数

6 API 層
API 層はアプリケーションに対して標準的なインターフェイスを提供する層である。この層はハードウェアや RTOS の仕様に影響されず、一意のインターフェイスを提供することにより、アプリケーショ
ンを汎用的に作成することができる。また、C 言語の規約や POSIX のように汎用的な API に準拠すれ
ば、LINUX 等のオープンソースのライブラリを未修整で使用することができる。

6.1 概要ストレージ機能を提供するファイルシステムと時刻の管理を行う時間管理の２つの API について説明を行う。

6.2 ファイルシステム
ファイルシステムは TOPPERS BASE PLATFORM で提供するストレージ機能である。ファイルシ
ステムは以下の３つのモジュールで構成される。
① ファイルライブラリ
Ｃ言語標準のファイル関数をサポートするライブラリ② ストレージデバイスマネージャー
ストレージデバイスの管理モジュール③ FATFs
赤松武史氏が開発し、フリーソフトウェアとして公開されている、FAT 仕様準拠のローカルファイルシステム
TOPPERS BASE PLATFORM アプリケーション、ハードウェアを除く部分を供給している。

図 6.2.1 ファイルシステムのレイア構造86

6.2.1 ファイルライブラリ
ファイルライブラリは標準入出力関数に合わせて、表 6.2.1.1 関数を提供する。これらはＣ言語上のファイル関数とファイル関係の POSIX 仕様であるが、以下の規定に従って関数の選択を行った。
・Ｃ言語標準のもの（C89,C99）
・POSIX.1-2001 でよく使われるもの
・LINUX 固有であるが、通常使用に必要なもの
関数名

型

引数

機能

備考

open

int

close
fstat

int
int
off_t

ファイルのオープン、
ファイルディスクリプタを返す
ファイルのクローズ
ファイルの状態を取り出す。
読み
出しサイズを返す
ファイルの読み書き位置を設定する。

エラー時-1 を返す
成功０、失敗-1-1 でエラー

lseek
read

long

write

long

mmap

void *

mumap

int

fopen

FILE*

fclose
fseek

int
int

stat

int

lstat

int

access

int

mkdir

int

rmdir

int

const char *pathname
int flags
int fdint fdstruct stat *buf
int fdoff_t offset
int whence
int fdvoid *buf
long countint fdconst void *buf
long countvoid *start
size_t length
int prot
int flags
int fdoff_t offset
void *start
size_t length
const char *nameconst char *attr
FILE *fp
FILE *fp
long offset
int whence
const char *namestruct stat *buf
const char *namestruct stat *buf
const char *nameint mode
const char *namemode_t mode
const char *name

chmod

int

ファイルモードの変更

removeunlinkrename

int
int
int

opendirvoid *

const char *namemode_t mode
const char *nameconst char *nameconst char *oldpath
const char *newpath
const char *path-1 でエラー

ファイルからデータを読み出す。 0 で終端、-1 で読み出しサイズを返す。
エラー
ファイルにデータを書き込む。
書
き込みサイズを返す。

-1 でエラー

ファイルをメモリ上に配置する

一部ファイルシステムのみサポート

mmap の解除
ファイルオープン
ファイルクローズファイルの読み書き位置を設定する
ファイルの状態の取出し

成功０、失敗-1

ファイルの状態の取出し

成功０、失敗-1

ファイルの状態の取出し

成功時 0、その他は-1
成功時 0、その他は-1
成功時 0、その他は-1
成功０、失敗-1

ディレクトリの作成
ディレクトリの削除

ファイル削除ファイル削除ファイル名の変更

成功０、失敗-1

path に対応したディレクトリス
トリームをオープンし、ストリー
ムのポインタを返す。

エラー時 NULL

成功０、失敗-1

87

closedir

int

void *dir

readdir

struct dirent*

void *dirstatfsint

const char *path
struct statfs2*stat

ディレクトリストリームのクローズ
順番にディレクトリから dirent
構造体を読み、dirp で指されたバッファに格納する。
マウントされたファイルシステ
ムについての情報を返す。

成功０、失敗-1
POSIX とは I/F
仕様が異なる
成功０、失敗-1

表 6.2.1.1 ファイルライブラリ関数

6.2.2 Storage Device Manager
Storage Device Manager は、ストレージデバイスとその下で実行される複数のローカルファイルシ
ステムを管理するモジュールである。

6.2.2.1

データ仕様

Storage Device Manager は以下の４つの型で構成される。最初の２つは関数テーブルであり、表
6.2.2.1.1 の StorageDeviceFunc_t はローカルファイルシステムのデバイスを複数のストレージに対応させるために、関数テーブル化に用いるデバイスファンクションテーブルの型である。実際使用しているローカルファイルシステムが FATFs であるため、FATFs のデバイス I/F の関数テーブルとなっている。表 6.2.2.1.2 の StorageDeviceFileFunc_t 型は、ファイルライブラリを作成するために、ローカル
ファイルシステムのファイル関数をテーブル化するための型である。
番号

項目

型

機能

1
2
3
4
5
6

_sdev_sens_sdev_diskinit_sdev_diskstatus_sdev_diskread_sdev_diskwrite_sdev_diskioctl

int (*)()
int (*)()
int(*)()
int(*)()
int(*)()
int(*)()

デバイスセンス関数
デバイスの初期化関数
デバイスの状態取出し関数
デバイスブロックリード関数
デバイスブロックライト関数
デバイス IOCTL 関数

表 6.2.2.1.1 StroageDeviceFunc_t 型
番号

項目

型

機能

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

_sdevff_opendir_sdevff_closedir_sdevff_readdir_sdevff_mkdir_sdevff_rmdir_sdevff_unlink_sdevff_rename_sdevff_chmod_sdevff_stat_sdevff_statfs_sdevff_open_sdevff_close_sdevff_fstat_sdevff_lseek_sdevff_read_sdevff_write_sdevff_mmap

void *(*)()
int (*)()
int (*)()
int (*)()
int (*)()
int (*)()
int (*)()
int (*)()
int (*)()
int (*)()
int (*)()
int (*)()
int (*)()
off_t (*)()
long (*)()
long (*)()
void *(*)()

opendir 関数
closedir 関数
readdir 関数
mkdir 関数
rmdir 関数
unlink 関数
rename 関数
chmod 関数stat 関数
statfs 関数
open 関数
close 関数
fstat 関数
lseek 関数read 関数write 関数mmap 関数

表 6.2.2.1.2 StorageDeviceFunc_t 型
あとの２つはストレージを管理する型で、表 6.2.2.1.3 StorageDevice_t 型はストレージデバイス自体

88

の情報管理用の型で、表 6.2.2.1.4 StorageDeviceHead_t 型は StorageDevice_t 型のインスタンスを管理するヘッダ部である。表 6.2.2.1.5 は StorageDevice_t 型の_sdev_attribute のビット指定値を示す。
SDEV_INSERTCHK がオンになっていないデバイスでは、メディアの挿抜チェックを行わない。この場合、初期化時のメディアの状態でメディアの有無を決定する。
番号

項目

型

機能

1
2
3
4
5
6
7
8
9
10
11

_sdev_attribute_sdev_devno_sdev_port_sdev_maxsec_sdev_secsize_sdev_instimer_sdev_inswait_sdev_notice_sdev_local[4]pdevf
pdevffuint16_t
uint8_tuint8_tuint32_t
uint32_t
uint16_t
uint16_t
void (*)()
void *
StorageDeviceFunc_t
StorageDeviceFileFunc_t*

デバイスの状態
デバイス番号
デバイス種別デバイスの最大セクタ数
デバイスのセクタサイズ
挿入タイマー
挿入時待ち時間
検知コールバック関数
ローカルエリア
デバイス関数テーブル
ファイル関数テーブル

表 6.2.2.1.3 StroageDevice_t 型
番号

項目

型

機能

1
2
3
4
5

_num_activedev_sdev_active_default_device_get_datetime_psd

uint16_t
uint8_tuint8_tuint32_t (*)()
StorageDevice_t *登録済ストレージデバイスの数
デバイスマネージャの有効無効
デフォルトデバイス番号
時刻取出し関数ストレージデバイス配列

表 6.2.2.1.4 StroageDeviceHead_t 型
定義

値

SDEV_ACTIVE
SDEV_INSERTCHKSDEV_CHKREMOVE
SDEV_ONEEXIT
SDEV_EMPLOY
SDEV_ERROR
SDEV_DEVNOTUSE
SDEV_NOTUSE(1<<15)(1<<14)(1<<13)(1<<12)(1<<8)(1<<7)(1<<0)
255

内容

デバイスがアクティブの状態
挿入・排出の設定あり
排出検査を行う
一度以上排出があった
デバイス動作中
デバイスエラー
デバイス使用不可
使用不可のビット定義

表 6.2.2.1.5 _sdev_attribute 設定値

6.2.2.2

インターフェイス仕様

表 6.2.2.2.1 はストレージデバイスマネージャーで使用する関数である。sdev_init 関数にてストレージデ
バイスマネージャーは有効となり、sdev_terminate 関数で無効となる。この間で、ストレージデバイスの管理を行う。まず、SDMSetupDevice 関数でストレージデバイスの登録を行う。デバイス番号を指定して、この関数を呼び出すと、ppsdev にストレージデバイス(StoregeDevice_t)がセットされて戻る。使用者は、戻されたストレージデバイスに以下の属性等をセットする。
① デバイス関数テーブル：デバイスドライバテーブル② ファイル管理テーブル：ローカルファイルシステムに対応したファイル関数テーブル③ 属性：挿抜処理の有無④ ローカルデータ：下位のデバイス等の情報を_sdev_local に設定する
ストレージデバイスに挿抜検知は SDMSense_task で行うが、デバイスに挿抜検知がない場合は、タスクレベルで検知を行う必要はない。この場合、SDEV_SENSE_ONETIME をコンパイルスイッチで定義してビルドすれば関数として設定され、デバイスの登録後、SDMSense_task(0)を関数コールすれば、メ89

ディアの有り無し処理を行う。SDMSense_task では、センス関数として psdev->pdevf->_sdevf_sense にてメディアのセンスを行うため、この関数を設定しておく必要がある。

SDMSense_task を使用しない場合は、SDMEmploy 関数を使って直接メディアの有無を設定することができる。
関数名

型

引数

機能

sdev_init

void

intptr_t exinf

sdev_terminate

void

SDMSetupDevice

ER

ストレージデバイスマネージ
ャーを初期化するストレージデバイスマネージ
ャーを終了する
指定のデバイスを追加する

SDMDeviceNo

ER_ID

SDMGetStorageDevice

Storage
Device_t*

int devno

SDMEmployER

SDMSence_task

void

StorageDevice_t *psdev
bool_t sw
intptr_t exinf

int16_t devno
StorageDevice_t **ppsdev
const char **ppathname

備考

パス名からデバイス番号を取り出す。パス名のデバイス名はスキップする
デバイス番号からストレージ
デバイスへのポインタを取り出す
デバイスの動作中(true)、停止中(false)を設定する
デバイスセンスタスク（関数の場合あり）

表 6.2.2.2.1 ストレージデバイスマネージャー関数
定義

内容

SDEV_SENSE_ONETIMENUM_STORAGEDEVICE
DEAFULT_DEVNO

SDMSense_task を関数として使用
ストレージデバイスの数(デフォルトは 4)
デフォルトのデバイス番号(通常は 0)

表 6.2.2.2.2 コンパイルスイッチ設定値

6.2.3 FatFs
PLATFORM V1.X では、FAT12,16,32 用のローカルファイルシステムとして FatFs R0.07a を RTOS対応のため一部修正して使用している。また、FatFs のデバイスドライバ(diskio.c)に関しては、複数のストレージに対応可能なようにデバイスファンクションテーブルを呼び出す形で改造を行っている。

6.3 時間管理
RTC デバイスが有効な場合、時間管理関数が有効となる。時間管理では、２つの型を用いて時刻の管理を行う。

6.3.1 データ仕様
表 6.3.1.1 の tm(tm2)構造体は時刻の管理を行う構造体である。tm 構造体はライブラリの time.h 中に定義されている時刻用構造体と同一のものである。tm2 は tm と同一の構造体で、standard device
でローカルに定義しているものである。RTC デバイスの時刻処理は tm2 構造体を使用する。もうひと
つが types.h 等で定義されている time_t 型で 1970 年 1 月 1 日からの経過時間を秒で表す。
番号

項目

型

機能

1
2
3
4
5

tm_sectm_mintm_hour
tm_mdaytm_mon

int
int
int
int
int

秒(0～59)分(0～59)時(0～23)
月中の日(1～31)
月(1～12)

90

6
7
8
9

tm_yeartm_wdaytm_ydaytm_isdst

int
int
int
int

年：西暦、但し 0 は 1970 年
週中の日(0～6)
年中の日(1～366)

表 6.2.1.1 tm 構造体

6.3.2 インターフェイス仕様
tm 構造体と time_t 型との変換する関数として表 6.3.2.1 に関数を用意する。
関数名

型

引数

機能

mktimegmtime_r

time_tstruct tm *struct tm *ptm
const time_t *pt
struct tm *ptm

備考

tm 構造体を time_t に変換する
time_t を tm 構造体に変換する

表 6.3.2.1 時刻管理関数

6.4 USB ミドルウェア
USB ミドルウェアとして、TOPPERS USB MIDDLEWARE を対応する。これは USB OTG デバイ
ス用の USB ホスト、デバイス機能、USB デバイスに対して USB デバイス機能を提供する。

6.4.1 USB ホスト機能
USB ホスト機能は、マルチデバイスを対応して HUB クラスに対して複数のクラスを同時管理可能である USB ホストは以下の５つのクラスをサポートする。
クラス名

ID

機能

アプリとの通信機能

備考

HUB
HID
MSC
PRT
CDC/SERIAL
BLUETOOTH

0x09
0x03
0x08
0x07
0x02
0xE0

HUB のサポート
MOUSE/KEYBOAEDUSB メモリ
プリンタ
USB シリアル
BLUETOOTH

コールバック関数設定
API による関数コール
API による関数コール/コールバック関数
API による関数コール/コールバック関数
API による関数コール/コールバック関数

1.3.1

表 6.4.1.1 USB ホストクラス

6.4.2 USB デバイス機能
USB デバイス機能は、指定のクラスに対してのデバイス機能を提供する。
クラス名

ID

機能

備考

HID
SERIAL
MSC

0x03
0x02
0x08

MOUSE/KEYBOAEDUSB シリアルUSB メモリ

1.4.5

表 6.4.1.1 USB デバイスクラス

6.5 UI ミドルウェア
UI ミドルウェアとして、グラフィック LCD に対して、図形描画、文字描画を行うインターフェイス
を追加する。図形描画の API は GDIC/adafuit_st7735 の描画関数を使用する。拡張として STM32Cubeの BSP で使用している描画関数の rename を用意し、BSP 用のアプリケーションがそのまま使用できるよう考慮する。文字描画は、STM32Cube で用意されたフォントと TOPPERS ECHONET WG で作成した東雲フォントの２つの文字環境に対応できるように設計した。

91

6.5.1 UI ディレクトリ
UI ディレクトリ以下に２つのフォント環境を用意する。UI 機能を取り込むには Makefile のミドル
ウェアの設定に以下のインクルードを行えばよい。
include $(SRCDIR)/ui/$(UI ディレクトリ)/Makefile.config

フォント

1 バイトフォント高さ

漢字フォント高さ

STM32Cube フォント
東雲フォント

8,12,16,20,24
9,12,16

なし
12,16

備考

漢 字 フ ォ ント は フ ァ イ
ルで提供

表 6.5.1.1 UI ディレクトリ
東雲フォントの漢字ビットマップデータは以下のヘッダを持つ、ファイルといて参照する。
TOPPERS BASE PLATFORM(ST)で使用するには、QSPI フラッシュ ROM 上に flash_file の形でデー
タを置くことを推奨する。東雲フォント漢字ビットマップファイルの flash_file 形式の書き込みデータ
を ui/snfone_disp/shinonome_font.bin で提供する。このデータを SD カードまたは USB メモリにコピーし、QSPI ファイル書き込みコマンドを使って QSPI フラッシュに書き込み flash_file でファイルア
クセスする。
なお、QSPI ファイル書き込み、漢字表示のサンプルプログラムを以下に用意している。
OBJ/STM32F723DISCOVERY_GCC/MON3
漢字フォントをプログラムのデータ領域に置きたい場合は、USE_ROMFONT コンパイルスイッチを有効にすれば、romfont というグローバル変数として定義される。ROM ファイル機能を使って ROM
ファイルに変換すればファイルとしてアクセスができる。
以下に漢字フォントビットマップファイルのヘッダを示す。数値はリトルエンディアンとなる。
番号

項目

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

magic
name
fsize
csize
isize
off_cnv_table1
siz_cnv_table1
off_cnv_table2
siz_cnv_table2
off_cnv_table3
siz_cnv_table3
off_2byte_font
siz_2byte_font
off_3byte_font
siz_3byte_font

0
4
36
40
44
48
52
56
60
64
68
72
76
80
84

型

機能

char [4]char [32]unsigned int
unsigned int
unsigned int
unsigned int
unsigned int
unsigned int
unsigned int
unsigned int
unsigned int
unsigned int
unsigned int
unsigned int
unsigned int“FONT”
フォント名
ファイルサイズ
ビットマップデータのコード部のバイト数
ビットマップデータのイメージ部のバイト数
UTF-8N 2 バイトコード検索テーブルへのオフセット
UTF-8N 2 バイトコード検索テーブルへのコード数
UTF-8N 3-1 バイトコード検索テーブルへのオフセット
UTF-8N 3-1 バイトコード検索テーブルへのコード数
UTF-8N 3-2 バイトコード検索テーブルへのオフセット
UTF-8N 3-2 バイトコード検索テーブルへのコード数
UTF-8N 2 バイトコード＋イメージへのオフセット
UTF-8N 2 バイトコード＋イメージのアイテム数
UTF-8N 3 バイトコード＋イメージへのオフセット
UTF-8N 3 バイトコード＋イメージのアイテム数

表 6.5.1.2 東雲フォントファイルのヘッダ部構造体

6.6 LWIP ミドルウェア
TCP/IP スタック lwip の拡張手順について記載する。
現状 lwip は以下のバージョンに対応している。
RTOS 上で実行するには問題があるソースに関しては PATCH を用意している。
・lwip-2.1.3
3 つのパッチ・contrib-2.1.0

92

3 つのパッチASP カーネル用のドライバを contrib-2.1.0/ports/toppers に追加している。ETHERNET ドライバはlwip の ETHERNET を pdic の emac ドライバに接続を行う。

6.6.1 ポーティング方法
lwip のプログラム設定手順を以下に記載します。
(1) lwip の Web から以下の ZIP ファイルをダウンロードします。
・lwip-2.1.3.zip・contrib-2.1.0.zip(2) asp/lwip の contrib-2.1.0(ASP カーネル用 ethernet 用ドライバ)を別のディレクトリに移動します。
(3) lwip-2.1.3.zip と contrib-2.1.0.zip を解凍して、asp/lwip にコピーする。
(4) 別 の デ ィ レ ク ト リ に 退 避 し た contrib-2.1.0 を asp/lwip/contrib-2.1.0 に ド ラ ッ ク す る 。
（contrib-2.1.0 に ASP カーネル用 ethernet 用ドライバが追加される）(5) asp/lwip/patch/contrib-2.1.0 を asp/lwip/contrib-2.1.0 にドラックする。
（contrib-2.1.0 用のパッ
チを反映）
(6) asp/lwip/patch/lwip-2.1.3 を asp/lwip/lwip-2.1.3 にドラックする。
（contrib-2.1.0 用のパッチを反映）
OBJ/SOCFPGA_CV_GCC/MAC のサンプルプログラムがビルド可能になります。

6.7 STM32Cube ミドルウェア
STM32Cube でサポートするミドルウェアを実行するために、stmcube/Middleware 上に追加となる
ミドルウェア用ディレクトリを配置する。メインの TOPPERS BASE PLATFORM(ST)でサポートする
２つのミドルウェア以外にオプションボードを追加した場合のミドルウェアのプログラムもこのディレクトリに配置する。

6.7.1 STM32_WPAN ディレクトリ
STM32WB 用の BLE 関係のミドルウェアを stmcube/Middleware/ST/STM32_WPAN 上に配置する。
現状の STM32_WPAN ミドルウェアの対応バージョンは STM32Cube_FW_WB_V1.11.0 である。このミドルウェアは STM32WB の STM32WBxx_HAL_Driver に依存性をもつため、いくつかのソースフ
ァイルに修正が発生している。TOPPERS BASE PLATFORM(ST)では、修正が発生したファイルのみを 公 開 し て い る 。 STM32Cube_FW_WB_V1.11.0/Middleware/ST/STM32_WPAN を stmcube/
Middleware/ST/にコピー後、修正ファイルを上書きすれば、STM32WB55 で BLE が使用可能になる。
ファイル名

ディレクトリ

内容

区分

serial_if.cshci.c

STM32_WPAN/ble/mesh/Src
STM32_WPAN/interface/ble_thread/shci
STM32_WPAN/interface/ble_thread/tl
STM32_WPAN/STM32_WPAN/STM32_WPAN/STM32_WPAN/UART ドライバの違いを修正
ハードウェアアクセス直接記載部修正サブコアとの通信処理の違いを修正
アプリから移動し一本化
アプリから移動し一本化
アプリから移動し一本化
STM32_WPAN 用 makefile

修正
修正

tl_mbox.c
cmsis_compiler.hhw_if.h
Makefile.config

修正
追加
追加
追加
追加

表 6.7.1 STM32_WPAN ミドルウェア追加、修正ファイル
STM32_WPAN を 使 用 す る 場 合 は 、 以 下 の ユ ー テ ィ リ テ ィ も 必 要 と な る た め 、STM32Cube_FW_WB_V1.11.0/Utilities からコピーして、asp/stmcube/Utilities/にコピーしなければならない。
ディレクトリ名

STMCube32 上のパス

内容

lpm
Utilities
LPM モジュール用プログラム
sequencer
Utilities
BLE のシーケンサ
表 6.7.2 STM32_WPM 用のユーティリティ

936.7.2 OpenAMP ディレクトリ
STM32MP1 用 の コ ア 間 通 信 機 能 OpenAMP を サ ポ ー ト す る た め
stmcube/Middleware/Third_Paty/OpenAMP 上に配置する。OpenAMP はハードウェアに依存する記載 は な い た め ( メ モ リ 等 に ハ ー ド ウ ェ ア 上 の 約 束 ご と が あ る ) 、
STMCube_FW_MP1_V1.2.0/Middleware/Third_Party/OpenAMP を コ ピ ー し 、 TOPPERS BASE
PLATFORM(ST)で配布された Makefile.config を OpenAMP の直下に置けば、MP1 用の OpenAMP サ
ンプルプログラムが使用可能になる。

6.8 RTOS 隠蔽機能
pdic ディレクトリの直下に base_platform.h インクルード ファ イルを置く、このファイルは
TOPPERS BASE PLATFORM 内の以下のモジュールから参照される。このファイル内に RTOS との
API のマクロ化定義を行い。マクロ定義を書き換えることにより、種々の RTOS の API に対応することができる。このマクロを参照するディレクトリは 7.1 共通部に記載。
マクロの記載は一種と二種があり、以下の通り。
ASP/JSP での記載

ASP3 での記載

DELAY_TASKSLEEP_TASKTIME_SLEEP_TASKWAKEUP_TASKWAIT_SEMAPHORE
TIME_WAIT_SEMAPHORE
SIGNAL_SEMAPHORE
INTERRUPT_SIGNAL_SEMAPHORE
LOCK_CPUUNLOCK_CPU
ENABLE_INTERRUPTDISABLE_INTERRUPT
表 6.8.1 一種 RTOS マクロ定義

dly_tsk
slp_tsktslp_tsk
wup_tsk
wai_sem
twai_sem
sig_semisig_sem
loc_sem
unl_sem
ena_int
dis_int

DELAY_TASK(t)ASP に同じ
tslp_tsk(t)ASP に同じ
ASP に同じ

dly_tsk((t)*1000U)
ASP に同じ
tslp_tsk((t)+1000U)
ASP に同じ
ASP に同じ

ASP に同じ
ASP に同じ
ASP に同じ
ASP に同じ
ASP に同じ
ASP に同じ

ASP に同じ
ASP に同じ
ASP に同じ
ASP に同じ
ASP に同じ
ASP に同じ

ASP/JSP/ASP3/FMP での記載

GET_TASK_ID
ACTIVATE_TASKSTART_CYCLIC_HANDLER
STOP_CYCCLIC_HANDLERRECEIVE_DATA_QUEUE
TIME_RECEIVE_DATA_QUEUEPOLLING_SEND_DATA_QUEUEINTERRUPT_POLLING_SEND_DATA_QUEUE
表 6.8.2 二種 RTOS マクロ定義

get_tid
act_tsk
sta_cyc
stp_cycrcv_dtq
trcv_dtq
psnd_dtq
ipsnd_dtq

7 ファイルの構成
TOPPERS BASE PLATFORM のソースファイル構造について記載する。共通部はファイルシステム
やタスクモニタ等共通となる部分について記載する。BASE PLATFORM のソフトウェア部品は asp のベースディレクトリ上に配置する。

7.1 共通部
共通部のディレクトリ構成を表 7.1.1 に示す。
ディレクトリ

内容

備考

94

filesmonitorgdic
pdic
syssvcui

ファイルシステムのソースとインクルードファイル
タスクモニタと標準入手力のソースとインクルードファイル
GDIC ドライバ
PDIC ドライバ、STM32xxx にボード依存ドライバを持つ
malloc,calloc,free 関数
GLCD に文字、グラフィックデータ表示

usb
stmcubeUSB ホスト、デバイスのミドルウェア
V1.3.1 より Font のみを使用、BSP 部は gdic に移管した(gdic ドライバには、この領域を拡張して使用するものがある)
JPEG ライブラリ、Web より jpeg-9b をダウンロードセットし、 ソースなし
ディレクトリ中の Makefile でライブラリをビルドしてくださいMAP3 でコードライブラリ、Web より libmad-0.15.1b をダウ ソースなし
ンロードセットし、ディレクトリ中の Makefile でライブラリをビルドしてください
lwip プロトコル・スタック、Web より lwip-2.1.2 と contrib-2.1.0 ソースなし
をダウンロードセットし、patch ディレクトリ中のソースパッ RTOS 隠蔽化対応
チを行ってください

jpeg-9blibmad-0.15.1b

lwip

RTOS 隠蔽化対応
RTOS 隠蔽化対応
RTOS 隠蔽化対応
V1.3.1 以降
RTOS 隠蔽化対応
RTOS 隠蔽化対応

表 7.1.1 共通部ディレクトリ
pdic の直下に RTOS 隠蔽用のインクルードファイル base_platform.h を置く。

7.2 STM32F4xx ドライバ
STM32F4xx 用ドライバ部、pdic/stm32f4xx にソースファイルがある。
ファイル

内容

adc.c
adc.h
device.cdevice.cfg
device.h
i2c.c
i2c.h
pinmode.cpinmode.h
pwm.c
pwm.h
rts.c
rts.cfg
rts.h
spi.c
spi.h
usb_otg.c
usb_otg.h

ADC ドライバ・ソースファイル
ADC ドライバ・インクルードファイル
GPIO,DMA,LED,SW ドライバ・ソースファイル
LED,SW の RTOS リソースファイル
GPIO,DMA,LED,SW ドライバ・インクルードファイル
I2C ドライバ・ソースファイル
I2C ドライバ・インクルードファイル
Arduino の GPIO ピン設定・ソースファイル
Arduino の GPIO ピン設定・インクルードファイル
TIM1/TIM2 用の PWM ドライバ・ソースファイル
TIM1/TIM2 用の PWM ドライバ・インクルードファイル
RTS ドライバ・ソースファイル
RTS の RTOS リソースファイル
RTS ドライバ・インクルードファイル
SPI ドライバ・ソースファイル
SPI ドライバ・インクルードファイル
USB-OTG ドライバ・ソースファイル
USB-OTG ドライバ・インクルードファイル

備考

Base
Base
Base

V1.4.3V1.4.3144 のみ144 のみ表 7.2.1 STM32F4xx ドライバファイル

7.3 STM32L4xx ドライバ
STM32L4xx 用ドライバ部、pdic/stm32l4xx にソースファイルがある。
ファイル

内容

備考

adc.c
adc.h
device.c

ADC ドライバ・ソースファイル
ADC ドライバ・インクルードファイル
GPIO,DMA,LED,SW ドライバ・ソースファイル

Base

95

device.cfg
device.h
i2c.c
i2c.h
pinmode.cpinmode.h
qspi.cqspi.hrts.c
rts.cfg
rts.h
spi.c
spi.h

LED,SW の RTOS リソースファイル
GPIO,DMA,LED,SW ドライバ・インクルードファイル
I2C ドライバ・ソースファイル
I2C ドライバ・インクルードファイル
Arduino の GPIO ピン設定・ソースファイル
Arduino の GPIO ピン設定・インクルードファイル
QSPI ドライバ・ソースファイルQSPI ドライバ・インクルードファイル
RTS ドライバ・ソースファイル
RTS の RTOS リソースファイル
RTS ドライバ・インクルードファイル
SPI ドライバ・ソースファイル
SPI ドライバ・インクルードファイル

Base
Base

表 7.3.1 STM32L4xx ドライバファイル

7.4 STM32F7xx ドライバ
STM32F7xx 用ドライバ部、pdic/stm32f7xx にソースファイルがある。
ファイル

内容

adc.c
adc.h
clock.cdevice.c

ADC ドライバ・ソースファイル
ADC ドライバ・インクルードファイル
RTC デバッグコマンド・ソースファイル
GPIO,DMADMA2D,RTC,CHACHE,LED,SW ドライバ・ソースファ
イル
RTS,LED,SW の RTOS リソースファイル
GPIO,DMADMA2D,RTC,CHACHE,LED,SW ドライバ・インクルー
ドファイル
DFSDM 入力ドライバ・ソースファイル
DFSDM 入力ドライバ・インクルードファイル
DSI LCD インターフェイス・ソースファイル
DSI LCD インターフェイス・インクルードファイル
I2C ドライバ・ソースファイル
I2C ドライバ・インクルードファイル
GLCD ドライバ・ソースファイル
GLCD インクルード・ソースファイル
ファイルシステム用インクルードファイル
Arduino の GPIO ピン設定・ソースファイル
Arduino の GPIO ピン設定・インクルードファイル
QSPI ドライバ・ソースファイルQSPI ドライバ・インクルードファイル
オーディオドライバ・ソースファイル
オーディオドライバ・インクルードファイル
SD-card ドライバ・ソースファイル
SD-card ドライバ・RTOS リソースファイル
SD-card ドライバ・インクルードファイル
SPI ドライバ・ソースファイル
SPI ドライバ・インクルードファイル
STMCube 連結用インクルードファイル
USB-OTG ドライバ・ソースファイル
USB-OTG ドライバ・インクルードファイル
EMAC ドライバ・ソースファイル
EMAC ドライバ・インクルードファイル

device.cfg
device.hdfsdm.cdfsdm.h
dsi.c
dsi.h
i2c.c
i2c.h
ltdc.cltdc.hmcicmd.hpinmode.cpinmode.h
qspi.cqspi.hsai.c
sai.hsdmmc.csdmmc.cfg
sdmmc.hspi.c
spi.h
stm32f7xx_hal.h
usb_otg.c
usb_otg.h
emac.cemac.h

備考

Base
Base
Base
769 のみ769 のみ769 のみ769 のみ1.3.1 で削除

1.4.1 で追加
1.4.1 で追加

96

phyreg.h
wifi.cwifi.hwifiuart.c
wifiuart.h
wifiuart.cfg

ehernet-phy 設定・インクルードファイル
ESP32 用 WIFI ドライバ・ソースファイル
ESP32 用 WIFI ドライバ・インクルードファイル
WIFI 用 UART 通信ドライバ・ソースファイル
WIFI 用 UART 通信ドライバ・インクルードファイル
WIFI 用 UART 通信 RTOS リソースファイル

1.4.1 で追加
gdic に移動
gdic に移動
1.4.1 で追加
1.4.1 で追加
1.4.1 で追加

表 7.4.1 STM32F7xx ドライバファイル

7.5 STM32F0xx ドライバ
STM32F0xx 用ドライバ部、pdic/stm32f0xx にソースファイルがある。
ファイル

内容

adc.c
adc.h
clock.cdevice.cdevice.cfg
device.h
i2c.c
i2c.h
pinmode.cpinmode.h
rtc.c
rtc.cfg
rtc.h
spi.c
spi.h
stm32f0xx.h

ADC ドライバ・ソースファイル
ADC ドライバ・インクルードファイル
RTC デバッグコマンド・ソースファイル
GPIO,DMA,LED,SW ドライバ・ソースファイル
RTS,LED,SW の RTOS リソースファイル
GPIO,DMA,LED,SW ドライバ・インクルードファイル
I2C ドライバ・ソースファイル
I2C ドライバ・インクルードファイル
Arduino の GPIO ピン設定・ソースファイル
Arduino の GPIO ピン設定・インクルードファイル
RTS ドライバ・ソースファイル
RTS の RTOS リソースファイル
RTS ドライバ・インクルードファイル
SPI ドライバ・ソースファイル
SPI ドライバ・インクルードファイル
stm32f0xx コアデバイスアドレス定義ファイル

備考

Base
Base
Base

1.4.4 で追加

表 7.5.1 STM32F0xx ドライバファイル

7.6 STM32L0xx ドライバ
STM32L0xx 用ドライバ部、pdic/stm32l0xx にソースファイルがある。
ファイル

内容

adc.c
adc.h
clock.cdevice.cdevice.cfg
device.h
i2c.c
i2c.h
pinmode.cpinmode.h
rtc.c
rtc.cfg
rtc.h
spi.c
spi.h
usb_device.c
usb_device.h
stm32l0xx.h

ADC ドライバ・ソースファイル
ADC ドライバ・インクルードファイル
RTC デバッグコマンド・ソースファイル
GPIO,DMA,LED,SW ドライバ・ソースファイル
RTS,LED,SW の RTOS リソースファイル
GPIO,DMA,LED,SW ドライバ・インクルードファイル
I2C ドライバ・ソースファイル
I2C ドライバ・インクルードファイル
Arduino の GPIO ピン設定・ソースファイル
Arduino の GPIO ピン設定・インクルードファイル
RTS ドライバ・ソースファイル
RTS の RTOS リソースファイル
RTS ドライバ・インクルードファイル
SPI ドライバ・ソースファイル
SPI ドライバ・インクルードファイル
USB デバイスドライバ・ソースファイル
USB デバイスドライバ・インクルードファイル
stm32l0xx コアデバイスアドレス定義ファイル

備考

Base
Base
Base

1.4.4 で追加

表 7.6.1 STM32L0xx ドライバファイル

97

7.7 STM32G0xx ドライバ
STM32L0xx 用ドライバ部、pdic/stm32l0xx にソースファイルがある。
ファイル

内容

adc.c
adc.h
clock.cdevice.cdevice.cfg
device.h
i2c.c
i2c.h
pinmode.cpinmode.h
rtc.c
rtc.cfg
rtc.h
spi.c
spi.h
usb_device.c
usb_device.h
stm32g0xx.h

ADC ドライバ・ソースファイル
ADC ドライバ・インクルードファイル
RTC デバッグコマンド・ソースファイル
GPIO,DMA,LED,SW ドライバ・ソースファイル
RTS,LED,SW の RTOS リソースファイル
GPIO,DMA,LED,SW ドライバ・インクルードファイル
I2C ドライバ・ソースファイル
I2C ドライバ・インクルードファイル
Arduino の GPIO ピン設定・ソースファイル
Arduino の GPIO ピン設定・インクルードファイル
RTS ドライバ・ソースファイル
RTS の RTOS リソースファイル
RTS ドライバ・インクルードファイル
SPI ドライバ・ソースファイル
SPI ドライバ・インクルードファイル
USB ドライバ・ソースファイル
USB ドライバ・インクルードファイル
stm32g0xx コアデバイスアドレス定義ファイル

備考

Base
Base
Base

1.4.3 で追加
1.4.3 で追加
1.4.4 で追加

表 7.7.1 STM32G0xx ドライバファイル

7.8 STM32H7XX ドライバ
STM32H7xx 用ドライバ部、pdic/stm32h7xx にソースファイルがある。このドライバは V1.4.1 での追加である。
ファイル

内容

adc.c
adc.h
clock.cdevice.cdevice.cfg
device.hemac.cemac.hi2c.ci2c.hphyreg.hpinmode.cpinmode.h
spi.c
spi.h

ADC ドライバ・ソースファイル
ADC ドライバ・インクルードファイル
RTC デバッグコマンド・ソースファイル
GPIO,DMA,LED,SW ドライバ・ソースファイル
RTS,LED,SW の RTOS リソースファイル
GPIO,DMA,LED,SW ドライバ・インクルードファイル
EMAC ドライバ・ソースファイル
EMAC ドライバ・インクルードファイル
I2C ドライバ・ソースファイル
I2C ドライバ・インクルードファイル
ehernet-phy 設定・インクルードファイル
Arduino の GPIO ピン設定・ソースファイル
Arduino の GPIO ピン設定・インクルードファイル
SPI ドライバ・ソースファイル
SPI ドライバ・インクルードファイル

備考

表 7.8.1 STM32H7xx ドライバファイル

7.9 STM32G4XX ドライバ
STM32G4xx 用ドライバ部、pdic/stm32g4xx にソースファイルがある。このドライバは V1.4.1 での追加である。
ファイル

内容

adc.c

ADC ドライバ・ソースファイル

備考98adc.hclock.cdevice.cdevice.cfg
device.h
i2c.c
i2c.h
pinmode.cpinmode.h
rtc.c
rtc.cfg
rtc.h
spi.c
spi.h
usb_device.c
usb_device.h

ADC ドライバ・インクルードファイル
RTC デバッグコマンド・ソースファイル
GPIO,DMA,LED,SW ドライバ・ソースファイル
RTS,LED,SW の RTOS リソースファイル
GPIO,DMA,LED,SW ドライバ・インクルードファイル
I2C ドライバ・ソースファイル
I2C ドライバ・インクルードファイル
Arduino の GPIO ピン設定・インクルードファイル
SPI ドライバ・ソースファイル
RTS ドライバ・ソースファイル
RTS の RTOS リソースファイル
RTS ドライバ・インクルードファイル
SPI ドライバ・インクルードファイル
SPI ドライバ・インクルードファイル
USB デバイスドライバ・ソースファイル
USB デバイスドライバ・インクルードファイル

表 7.9.1 STM32G4xx ドライバファイル

7.10 STM32WBXX ドライバ
STM32WBxx 用ドライバ部、pdic/stm32wbxx にソースファイルがある。このドライバは V1.4.1 での追加である。
ファイル

内容

備考

adc.c
adc.h
clock.cdevice.cdevice.cfg
device.h
i2c.c
i2c.h
pinmode.cpinmode.h
rtc.c
rtc.cfg
rtc.h
spi.c
spi.h
usb_device.c
usb_device.h
wakeup_timer.cwakeup_timer.h
wifi.cwifi.hwifiuart.c
wifiuart.cfg
wifiuart.h
pwm.c
pwm.h

ADC ドライバ・ソースファイル
ADC ドライバ・インクルードファイル
RTC デバッグコマンド・ソースファイル
GPIO,DMA,LED,SW ドライバ・ソースファイル
RTS,LED,SW の RTOS リソースファイル
GPIO,DMA,LED,SW ドライバ・インクルードファイル
I2C ドライバ・ソースファイル
I2C ドライバ・インクルードファイル
Arduino の GPIO ピン設定・インクルードファイル
SPI ドライバ・ソースファイル
RTS ドライバ・ソースファイル
RTS の RTOS リソースファイル
RTS ドライバ・インクルードファイル
SPI ドライバ・インクルードファイル
SPI ドライバ・インクルードファイル
USB デバイスドライバ・ソースファイル
USB デバイスドライバ・インクルードファイル
WAKEUP タイマードライバー・ソースファイル
WAKEUP タイマードライバ・インクルードファイル
ESP32 用 WIFI ドライバ・ソースファイル
ESP32 用 WIFI ドライバ・インクルードファイル
WIFI 用 UART 通信ドライバ・ソースファイル
WIFI 用 UART 通信ドライバ・リソースファイル
WIFI 用 UART 通信ドライバ・インクルードファイル
PWM ドライバ・ソースファイル（TIM1,TIM2 限定）
PWM ドライバ・インクルードファイル

gdic に移動
gdic に移動
V1.4.2V1.4.2V1.4.2V1.4.2V1.4.2

表 7.10.1 STM32WBxx ドライバファイル

99

7.11 STM32MP1XX ドライバ
STM32MP1xx 用ドライバ部、pdic/stm32mp1xx にソースファイルがある。このドライバは V1.4.2での追加である。
ファイル

内容

device.cdevice.cfg
device.h
i2c.c
I2c.h
pinmode.cpinmode.h
spi.c
spi.h

GPIO,DMA,LED,SW ドライバ・ソースファイル
RTS,LED,SW の RTOS リソースファイル
GPIO,DMA,LED,SW ドライバ・インクルードファイル
I2C ドライバ・ソースファイル
I2C ドライバ・インクルードファイル
Arduino の GPIO ピン設定・インクルードファイル
SPI ドライバ・ソースファイル
SPI ドライバ・インクルードファイル
SPI ドライバ・インクルードファイル

備考

表 7.11.1 STM32MP1xx ドライバファイル

7.12 GDIC ドライバ
ディレクトリ gdic 以下に標準の TOPPERS BASE PLATFORM で提供する GDIC ドライバを示す。
GDIC ドライバは PDIC に依存性し、デバイスに依存した機能を提供する。GDIC ドライバはオプション追加により拡張が可能である。
ディレクトリ内容

usb_otg

usb_otg(DWC2-OTG ドライバ)上に位置し、USB ミドルウェアにOTG 機能を提供する
usb_device(ST 社 USB デバイス IP)上に位置し、USB ミドルウェアに USB デバイス機能を提供する
SPI インターフェイスの SD カード用ドライバ、ファイルシステムに
SD カードドライバを提供する
SPI インターフェイスの Adafruit 1.8”LCD に対して、グラフィック
API を提供する
SPI インターフェイスの Adafruit1.54”LCD に対して、グラフィック
API を提供する
SPI インターフェイスの Adafruit 2.4”LCD に対して、グラフィック
API を提供する
I2C インターフェイスの AQM0802 キャラクタ LCD に対して、キャラクタ表示 API を提供する
SPI インターフェイスの AQM1284 に対して、グラフィック API を提供する
Arduino BLE Shield2.1 に対して、BLE-API を提供する
ESP32-UART WIFI 機能を提供する
ST 用 otm8009a に対して、LCD 用 API を提供する
ST 用 st7789h2 に対して、LCD 用 API を提供する
ST 用 rk043fn48h に対して、LCD 用 API を提供
ST 用 ft06x06 に対して、タッチパネル用 API を提供する
ST 用 ft5336 に対して、タッチパネル用 API を提供する
Adafruit 2.4”LCD 用 stmp610 に対して、タッチパネル用 API を提供
する
ST 用 wm8994 に対して、オーディオ用 API を提供する
QSPI フラッシュ上のデータを読み出し専用ファイルとしてアクセスする機能を提供する
ROM 上のデータを読み出し専用ファイルとしてアクセスする機能を提供する

usb_device
spi_driveradafruit_st7735
adafruit_st7789
adafruit_ILI9341
aqm0802_st7032
aqm1284_st7565
bleshield2.1
esp32
stlcd_otm8009a
stlcd_st7789h2
stlcd_rk043fn48h
stts_ft06x06
stts_ft5336
adafruitst_stmp610
studio_wm8994
flash_file
rom_file

備考

1.4.1
1.4.1

1.3.1
1.3.1
1.4.4
1.3.1
1.3.1
1.3.1
1.3.1
1.3.1
1.4.1
1.3.1
1.3.1
1.4.1

表 7.12.1 GDIC ディレクトリ

100

8 変更履歴詳細
ソース公開を行った v1.3.0 以降の変更履歴詳細を記載する。

versiondate

functions

1.4.0

06/22/2018
06/25/2018

spi-SD-HC カードの不具合対応(プログラムのみ)
リードオンリーの fopen で open エラーとならない不具合対応(プログラムのみ)
usb host SERIAL/PRT 送受信を並行処理できるよう修正
usb host BLUETOOTH クラス対応
gdic/stlcd_otm8009a:gdic/stts_ft07x07:gdic/staudio_wm8994 を追加
STM32F723 Discovery ボード対応、gdic/stlcd_st7789h2 を追加
SYM32L4R5 Nucleo-144 ボードの対応
図 3.1 を TEB001 に修正
gdic/stlcd_rk043fn48h:gdic/stts_ft5336 を追加、stmcube の BSP ドライ
バを削除
ui ディレクトリ、gidc/flash_file:gdic/aqm1284_st7565 を追加
gdic/bleshield2.1 を追加
WATCH DOC ドライバの対応
STM32G071 Nucleo-64 ボードの対応
STM-BSP を削除
gdic/adafruit_ILI9341 を追加
STM32L4R5 の USB が動作可能に変更
STM32H743 Nucleo-144 ボードの対応
TLSF2.4.6 アロケート・フリーを繰り返すとアロケート領域の先頭８バイ
トが破壊される問題の暫定対策
ROM ファイル機能を GDIC に追加。ui/snfont_disp に漢字フォントをプ
ログラムデータとして取り込み機能を追加
STM32G474/431 Nucleo-64 ボードの対応
STM32WB44 Nucleo ボードの対応
メモリヒープの libc/LOCAL_HEAP 対応
ESP32 用 WIFI ドライバを STM32F7xx 用に追加
IWHI 1.54” LCD シールド(TEB002)の記載を追加
STM32WBXX に WIFI ドライバを拡張/BLE モジュール StmcubeV1.7.0
対応
STM32MP157C-DK2 用に OpenAMP の対応
ファイルシステムで long name を使用ない設定を可能する
STM32WBXX に PWM ドライバ追加
BLE モジュール StmcubeV1.11.0 対応(差分のみリリース)
lwip と STMCube ミドルウェアの設定方法を記載。
STM32_WPAN 用のユーティリティを追加。
STM32F401 nucleo 用 TIM1/2 PWM ドライバを追加と USBD 対応
STM32G0B1 nucleo-64 ボードを対応
RTOS のサービス・コール隠蔽機能を追加
BLE モジュール StmcubeV1.12.0 対応(差分のみリリース)
STM32WB15 nucleo ボードを対応
STM32F4XX 用 PWM ドライバに deinit 関数を追加

07/05/2018
07/31/2018
08/07/2018
08/31/2018
09/06/2018
09/11/2018

1.4.1

10/17/2018
11/01/2018
11/07/2018
01/23/2019
03/23/2019
04/05/2019
07/28/2019
08/14/2019
11/07/2019
12/03/2019

1.4.2

1.4.3

1.4.4

12/23/2019
03/16/2020
03/31/2020
04/18/2020
05/11/2020
06/22/2020
09/29/2020
11/03/2020
01/24/2021
04/03/2021
05/24/2021
06/01/2021
08/21/2021
10/30/2021
12/08/2021
01/05/2022
01/14/2022
10/16/2022

101

11/04/2022
11/19/2022

1.4.5

1.4.6

12/12/2022
03/14/2023
04/13/2023
7/13/2023
10/26/2023
12/12/2023
01/12/2024
02/27/2024

STM-USB デバイスの CDC のエンドポイントの不具合を修正
USB Device HID 使用時に Win10 でデータを送れない問題の対応、USB
隠蔽化を再修正
Cortex-M0 と M0+のデバイスアドレス定義ファイルを pdic に追加
gdic に esp32 を追加
lwip を 2.1.3 にバージョンアップ
lwIP の OPTTEST 用 TCPIP ロック機能を追加
ネットワークモニタ用に標準出力処理の変更
USB デバイスに MSC を追加
STM32WB のミドルウェア対応バージョンを 1.12 から 1.18 にアップ
STM32WB55 の ble_remote アプリの Nucleo に対応可能に修正、コンパ
イル時のワーニング対応(stddev.c, sddiskio.c)102

Appendix A

STM32F401RE Nucleo

STM32F401RE Nucleo のボード依存仕様を記載する。
(1) Arduino connectors 定義
CN No.

Pin No.

Pin 名

MCU pin

機能

CN6
power

1
2
3
4
5
6
7
8
1
2
3
4
5
6

NC
IOREF
RESET
+3V3
+5V
GND
GND
VIN
A0
A1
A2
A3
A4
A5

NRST
PA0
PA1
PA4
PB0
PC1 or PB9
PC0 or PB8

3.3V Ref
RESET
3.3V input/output
5V output
GroundGroundPower input
ADC1_0
ADC1_1
ADC1_4
ADC1_8
ADC1_11 or I2C1_SDA
ADC1_10 or I2C1_SCL

CN8analog

表 A.1.1 左 Arduino connector 設定
CN No.

Pin No.

Pin 名

MCU pin機能

CN5
digital

10
9
8
7
6
5
4
3
2
1
8
7
6
5
4
3
2
1

D15
D14
AREF
GND
D13
D12
D11
D10
D9
D8
D7
D6
D5
D4
D3
D2
D1
D0

PB8
PB9
PA5
PA6
PA7
PB6
PC7
PA9
PA8
PB10
PB4
PB5
PB3
PA10
PA2
PA3

I2C1_SCL
I2C1_SDA
AVDD
GroundSPI1_SCKSPI1_MISO
TIM1_CH1N or SPI1_MOSITIM4_CH1 or SPI1_CS
TIM3_CH2
TIM2_CH3
TIM3_CH1
TIM2_CH2
USART2_TX
USART2_RX

CN9degital

表 A.1.2 右 Arduino connector 設定(2) I2C
Port No.

Devicepin

MCU pinconnection

1

I2C1

2

I2C2

3

I2C3

SCL
SDA
SCL
SDA
SCL
SDA

PB8
PB9
PB10
PB3
PA8
PB4

Arduino D15
Arduino D14
Arduino D6
Arduino D3
Arduino D7
Arduino D6

表 A.2.1 I2C 接続ピン(3) SPI
Port No.

Devicepin

MCU pinconnection

1

SPI1

SCK
MISO

PA5
PA6

Arduino D13
Arduino D12

103

2

SPI2

MOSI
SCK
MISO
MOSI

PA7
PB13
PB14
PB15

Arduino D11

表 A.3.1 SPI 接続ピン(4) ADCPort No.

Device1

ADC1

表 A.4.1 ADC ポート割り当て(5) USARTPort No.

Devicepin

MCU pinconnection

1

USART2

2

USART1

TX
RX
TX
RX

PA2
PA3
PA9
PA10

Arduino D1/ ST-LINK TX
Arduino D0/ ST-LINK RX
Arduino D8
Arduino D2

表 A.5.1 UART ポート割り当て(6) その他
Adafruit 1.8” TFT Shield 動作
RedBear BLE Shield2.1 動作

Appendix B

STM32F4 Discovery

STM32F446RE Nucleo のボード依存仕様を記載する。
(1) Arduino connectors 定義
コネクタなし(2) I2C
Port No.

Devicepin

MCU pin

1

I2C1

2

I2C2

3

I2C3

SCL
SDA
SCL
SDA
SCL
SDA

PB8
PB9
PB10
PB11
PA8
PC9

connection

表 B.2.1 I2C 接続ピン(3) SPISTM32F401RE Nucleo に同じ(4) ADCSTM32F401RE Nucleo に同じ(5) USARTPort No.

Devicepin

MCU pin

1

USART2

TX
RX

PA2
PA3

connection

表 B.5.1 UART ポート割り当て(6) その他
USB-OTG FULL-HOST サポート

104

Appendix C

STM32F746 Discovery

STM32F746 Discovery のボード依存仕様を記載する。
(1) Arduino connectors 定義
CN No.

Pin No.

Pin 名

MCU pin

機能

CN6
power

1
2
3
4
5
6
7
8
1
2
3

NC
IOREF
RESET
+3V3
+5V
GND
GND
VIN
A0
A1
A2

NRST
PA0
PF10
PF9

3.3V Ref
RESET
3.3V input/output
5V output
GroundGroundPower input
ADC3_0
ADC3_8ADC3_7CN8analog

4
A3
PF8
5
A4
PF7 or PB96A5PF6 or PB8
表 C.1.1 左 Arduino connector 設定

ADC3_6
ADC3_5 or I2C1_SDA
ADC3_4 or I2C1_SCL

CN No.

Pin No.

Pin 名

MCU pin機能

CN5
digital

10
9
8
7
6
5
4
3
2
1
8
7
6

D15
D14
AREF
GND
D13
D12
D11
D10
D9
D8
D7
D6
D5

PB8
PB9
PI1
PB14
PB15
PI0
PA15
PI2
PI3
PH6
PA8

I2C1_SCL
I2C1_SDA
AVDD
GroundSPI2_SCKSPI2_MISOTIM12_CH2 or SPI2_MOSITIM5_CH4 or SPI2_NSS
TIM2_CH1
TIM12_CH1
TIM1_CH1

CN9
degital

5
D4
PG7
4
D3
PB4
3
D2
PG6
2
D1
PC6
1
D0
PC7
表 C.1.2 右 Arduino connector 設定

TIM3_CH1
USART6_TX
USART6_RX(2) I2C
Port No.

Devicepin

MCU pinconnection

1

I2C1
I2C2

3

I2C3

PB8
PB9
PH1
PH0
PH7
PH8

Arduino D15
Arduino D14

2

SCL
SDA
SCL
SDA
SCL
SDA

connection

ボード内：Audio/Tp デバイス
ボード内：Audio/Tp デバイス

表 C.2.1 I2C 接続ピン(3) SPI
Port No.

Devicepin

MCU pin

1

SPI1

SCK

PA5

105

2

MISO
MOSI
SCK
MISO
MOSI

SPI2

PA6
PA7
PI1
PB14
PB15

Arduino D13
Arduino D12
Arduino D11

表 C.3.1 SPI 接続ピン(4) ADCPort No.

Device

1
2
3

ADC1
ADC2
ADC3

表 C.4.1 ADC ポート割り当て(5) USARTPort No.

Devicepin

MCU pinconnection

1

USART1

2

USART6

TX
RX
TX
RX

PA9
PB7
PC6
PC7

ST-LINK TX
ST-LINK RX
Arduino D1
Arduino D0

表 C.5.1 UART ポート割り当て(6) その他
RTC ドライバを使用可能
USB-OTG HS ポートサポート、但し、オーディオと並行動作させると動作不安定
Adafruit 1.8” TFT Shield：ADC 動作、LCD 不安定、SD カード通信できず
RedBear BLE Shield2.1：未評価
lwip 動作Appendix D

STM32F446RE Nucleo-64

STM32F446RE Nucleo-64 のボード依存仕様を記載する。
(1) Arduino connectors 定義
CN No.

Pin No.

Pin 名

MCU pin

機能

CN6
power

1
2
3
4
5
6
7
8
1
2
3

NC
IOREF
RESET
+3V3
+5V
GND
GND
VIN
A0
A1
A2

NRST
PA0
PA1
PA4

3.3V Ref
RESET
3.3V input/output
5V output
GroundGroundPower input
ADC123_0
ADC123_1
ADC12_4

CN8
analog

4
A3
PB0
5
A4
PC1 or PB96A5
PC0 or PB8
図 D.1.1 左 Arduino connector 設定

ADC12_8
ADC123_11 or I2C1_SDA
ADC123_10 or I2C1_SCL

CN No.

Pin No.

Pin 名

MCU pin機能

CN5
digital

10
9
8
7

D15
D14
AREF
GND

PB8
PB9
-

I2C1_SCL
I2C1_SDA
AVDD
Ground

106

6
5
4
3
2
1
8
7
6

CN9
degital

D13
D12
D11
D10
D9
D8
D7
D6
D5

PA5
PA6
PA7
PB6
PC7
PA9
PA8
PB10
PB4

SPI1_SCKSPI1_MISOTIM14_CH1N or SPI1_MOSITIM4_CH1 or SPI1_CS
TIM8_CH2
TIM2_CH3
TIM3_CH1

5
D4
PB5
4
D3
PB3
3
D2
PA10
2
D1
PA2
1
D0
PA3
図 D.1.2 右 Arduino connector 設定

TIM2_CH2
USART2_TX
USART2_RX(2) I2C
Port No.

Devicepin

MCU pinconnection

1

I2C1

2

I2C2

3

I2C3

SCL
SDA
SCL
SDA
SCL
SDA

PB8
PB9
PB10
PB3
PA8
PC9

Arduino D15
Arduino D14
Arduino D6
Arduino D3
Arduino D7

表 D.2.1 I2C 接続ピン(3) SPISTM32F401RE Nucleo に同じ(4) ADCSTM32F401RE Nucleo に同じ(5) USARTPort No.

Devicepin

MCU pinconnection

1

USART2

TX
RX

PA2
PA3

Arduino D1/ ST-LINK TX
Arduino D0/ ST-LINK RX

表 D.5.1 UART ポート割り当て(6) その他
RTC ドライバを使用可能
Adafruit 1.8” TFT Sheild 動作
RedBear BLE Shield2.1 動作

Appendix E

STM32F446ZE Nucleo-144

STM32F446ZE Nucleo-144 のボード依存仕様を記載する。
(1) Arduino connectors 定義
CN No.

Pin No.

Pin 名

MCU pin

機能

CN6
power

1
2
3
4
5
6

NC
IOREF
RESET
+3V3
+5V
GND

NRST
-

3.3V Ref
RESET
3.3V input/output
5V output
Ground

107

7
8
1
2
3

CN8
analog

GND
VIN
A0
A1
A2

PA3
PC0
PC3

GroundPower input
ADC123_IN3
ADC123_IN10
ADC123_IN13

4
A3
PF3
5
A4
PF5 or PB9
6
A5
PF10 or PB8
図 E.1.1 左 Arduino connector 設定

ADC3_IN9
ADC3_IN15 or I2C1_SDA
ADC3_IN8 or I2C1_SCL

CN No.

Pin No.

Pin 名

MCU pin機能

CN5
digital

10
9
8
7
6
5
4
3
2
1
8
7
6

D15
D14
AREF
GND
D13
D12
D11
D10
D9
D8
D7
D6
D5

PB8
PB9
PA5
PA6
PA7 or PB5
PD14
PD15
PF12
PF13
PE9
PE11

I2C1_SCL
I2C1_SDA
AVDD
GroundSPI1_SCKSPI1_MISOTIM14_CH1N or SPI1_MOSITIM4_CH3 or SPI1_CS
TIM4_CH4
TIM1_CH1
TIM1_CH2

CN9degital

5
D4
PF14
4
D3
PE13
3
D2
PF15
2
D1
PG14
1
D0
PG9
図 E.1.2 右 Arduino connector 設定

TIM1_CH3
USART6_TX
USART6_RX(2) I2C
Port No.

Devicepin

MCU pinconnection

1

I2C1
I2C2

3

I2C3

PB8
PB9
PB10
PB3
PA8
PC9

Arduino D15
Arduino D14

2

SCL
SDA
SCL
SDA
SCL
SDA

表 E.2.1 I2C 接続ピン(3) SPI
Port No.

Devicepin

MCU pinconnection

1

SPI1

SPI2

PA5
PA6
PA7
PB13
PB14
PB15

Arduino D13
Arduino D12
Arduino D11

2

SCK
MISO
MOSI
SCK
MISO
MOSI

表 E.3.1 SPI 接続ピン(4) ADCPort No.

Device

1
2

ADC1
ADC2

108

3

ADC3

表 E.4.1 ADC ポート割り当て(5) USARTPort No.

Devicepin

MCU pinconnection

1

USART3

2

USART6

TX
RX
TX
RX

PD8
PD9
PG14
PG9

ST-LINK TX
ST-LINK RX
Arduino D1
Arduino D0

表 E.5.1 UART ポート割り当て(6) その他
RTC ドライバを使用可能
USB-OTG FULL ポートサポート
Adafruit 1.8” TFT Sheild 動作
RedBear BLE Shield2.1 動作しない
Bluetooth ドングル正常動作しない

Appendix F

STM32F746ZG Nucleo-144

STM32F746ZGT6 Nucleo-144 のボード依存仕様を記載する。
(1) Arduino connectors 定義
CN No.

Pin No.

Pin 名

MCU pin

機能

CN6
power

1
2
3
4
5
6
7
8
1
2
3

NC
IOREF
RESET
+3V3
+5V
GND
GND
VIN
A0
A1
A2

NRST
PA3
PC0
PC3

3.3V Ref
RESET
3.3V input/output
5V output
GroundGroundPower input
ADC123_IN3
ADC123_IN10
ADC123_IN13

CN8
analog

4
A3
PF3
5
A4
PF5 or PB9
6
A5
PF10 or PB8
図 E.1.1 左 Arduino connector 設定

ADC3_IN9
ADC3_IN15 or I2C1_SDA
ADC3_IN8 or I2C1_SCL

CN No.

Pin No.

Pin 名

MCU pin機能

CN5
digital

10
9
8
7
6
5
4
3
2
1
8
7
6

D15
D14
AREF
GND
D13
D12
D11
D10
D9
D8
D7
D6
D5

PB8
PB9
PA5
PA6
PA7 or PB5
PD14
PD15
PF12
PF13
PE9
PE11

I2C1_SCL
I2C1_SDA
AVDD
GroundSPI1_SCKSPI1_MISOTIM14_CH1N or SPI1_MOSITIM4_CH3 or SPI1_CS
TIM4_CH4
TIM1_CH1
TIM1_CH2

5

D4

PF14

-

CN9
degital

109

4
D3
PE13
3
D2
PF15
2
D1
PG14
1
D0
PG9
図 F.1.2 右 Arduino connector 設定

TIM1_CH3
USART6_TX
USART6_RX(2) I2C
Port No.

Devicepin

MCU pinconnection

1

I2C1
I2C2

3

I2C3

PB8
PB9
PB10
PB3
PA8
PC9

Arduino D15
Arduino D14

2

SCL
SDA
SCL
SDA
SCL
SDA

表 F.2.1 I2C 接続ピン(3) SPI
Port No.

Devicepin

MCU pinconnection

1

SPI1

SPI2

PA5
PA6
PA7
PB13
PB14
PB15

Arduino D13
Arduino D12
Arduino D11

2

SCK
MISO
MOSI
SCK
MISO
MOSI

表 F.3.1 SPI 接続ピン(4) ADCPort No.

Device

1
2
3

ADC1
ADC2
ADC3

表 F.4.1 ADC ポート割り当て(5) USARTPort No.

Devicepin

MCU pinconnection

1

USART3

2

USART6

TX
RX
TX
RX

PD8
PD9
PG14
PG9

ST-LINK TX
ST-LINK RX
Arduino D1
Arduino D0

表 F.5.1 UART ポート割り当て(6) その他
RTC ドライバを使用可能
USB-OTG FULL ポートサポート
Adafruit 1.8” TFT Shield：SD カードは SPIDRIVER がないので未確認
RedBear BLE Shield2.1 動作しない
lwip 動作Appendix G

STM32F767ZIT6 Nucleo-144

STM32F767ZIT6T6 Nucleo-144 のボード依存仕様を記載する。
(1) Arduino connectors 定義
CN No.

Pin No.

Pin 名

MCU pin

機能

CN6

1

NC

-

-

110

power

2
3
4
5
6
7
8
1
2
3

CN8
analog

IOREF
RESET
+3V3
+5V
GND
GND
VIN
A0
A1
A2

NRST
PA3
PC0
PC3

3.3V Ref
RESET
3.3V input/output
5V output
GroundGroundPower input
ADC123_IN3
ADC123_IN10
ADC123_IN13

4
A3
PF3
5
A4
PF5 or PB9
6
A5
PF10 or PB8
図 G.1.1 左 Arduino connector 設定

ADC3_IN9
ADC3_IN15 or I2C1_SDA
ADC3_IN8 or I2C1_SCL

CN No.

Pin No.

Pin 名

MCU pin機能

CN5
digital

10
9
8
7
6
5
4
3
2
1
8
7
6

D15
D14
AREF
GND
D13
D12
D11
D10
D9
D8
D7
D6
D5

PB8
PB9
PA5
PA6
PA7 or PB5
PD14
PD15
PF12
PF13
PE9
PE11

I2C1_SCL
I2C1_SDA
AVDD
GroundSPI1_SCKSPI1_MISOTIM14_CH1N or SPI1_MOSITIM4_CH3 or SPI1_CS
TIM4_CH4
TIM1_CH1
TIM1_CH2

CN9degital

5
D4
PF14
4
D3
PE13
3
D2
PF15
2
D1
PG14
1
D0
PG9
図 G.1.2 右 Arduino connector 設定

TIM1_CH3
USART6_TX
USART6_RX(2) I2C
Port No.

Devicepin

MCU pinconnection

1

I2C1
I2C2

3

I2C3

4

I2C4

PB8
PB9
PH1
PH0
PH7
PH8
PD12
PB13

Arduino D15
Arduino D14

2

SCL
SDA
SCL
SDA
SCL
SDA
SCL
SDA

表 G.2.1 I2C 接続ピン(3) SPI
Port No.

Devicepin

MCU pinconnection

1

SPI1

SPI2

PA5
PA6
PA7
PB13
PB14

Arduino D13
Arduino D12
Arduino D11

2

SCK
MISO
MOSI
SCK
MISO

111

MOSI

PB15

表 G.3.1 SPI 接続ピン(4) ADCPort No.

Device

1
2
3

ADC1
ADC2
ADC3

表 G.4.1 ADC ポート割り当て(5) USARTPort No.

Devicepin

MCU pinconnection

1

USART3

2

USART6

TX
RX
TX
RX

PD8
PD9
PG14
PG9

ST-LINK TX
ST-LINK RX
Arduino D1
Arduino D0

表 G.5.1 UART ポート割り当て(6) その他
RTC ドライバを使用可能
USB-OTG FULL ポートサポート
Adafruit 1.8” TFT Shield：SD カードは SPIDRIVER がないので未確認
RedBear BLE Shield2.1 動作しない
lwip 動作Appendix H

STM32F769NIH6 Discovery

STM32F769NHH6 Discovery のボード依存仕様を記載する。
(1) Arduino connectors 定義
CN No.

Pin No.

Pin 名

MCU pin

機能

CN6
power

1
2
3
4
5
6
7
8
1
2
3

NC
IOREF
RESET
+3V3
+5V
GND
GND
VIN
A0
A1
A2

NRST
PA6
PA4
PC2

3.3V Ref
RESET
3.3V input/output
5V output
GroundGroundPower input
ADC1_IN6
ADC1_IN4
ADC1_IN12

CN8analog

4
A3
PF10
5
A4
PF8 or PB9
6
A5
PF90 or PB8
図 H.1.1 左 Arduino connector 設定

ADC3_IN8
ADC3_IN6 or I2C1_SDA
ADC3_IN7 or I2C1_SCL

CN No.

Pin No.

Pin 名

MCU pin機能

CN5
digital

10
9
8
7
6
5
4

D15
D14
AREF
GND
D13
D12
D11

PB8
PB9
PA12
PB14
PB15

I2C1_SCL
I2C1_SDA
AVDD
GroundSPI2_SCKSPI2_MISOTIM12_CH2 or SPI2_MOSI

112

3
2
1
8
7
6

CN9
degital

D10
D9
D8
D7
D6
D5

PA11
PH6
PJ4
PI3
PF7
PC8

TIM1_CH4 or SPI2_CS
TIM12_CH1
TIM11_CH1
TIM3_CH3

5
D4
PJ0
4
D3
PF6
3
D2
PJ1
2
D1
PC6
1
D0
PC7
図 H.1.2 右 Arduino connector 設定

TIM10_CH1
USART6_TX
USART6_RX(2) I2C
Port No.

Devicepin

MCU pinconnection

1

I2C1
I2C2

3

I2C3

4

I2C4

PB8
PB9
PH1
PH0
PH7
PH8
PD12
PB7

Arduino D15
Arduino D14

2

SCL
SDA
SCL
SDA
SCL
SDA
SCL
SDA

表 H.2.1 I2C 接続ピン(3) SPI
Port No.

Devicepin

MCU pinconnection

1

SPI1

2

SPI2

SCK
MISO
MOSI
SCK
MISO
MOSI

PA5
PA6
PA7
PA12
PB14
PB15

Arduino D13
Arduino D12
Arduino D11

表 H.3.1 SPI 接続ピン(4) ADCPort No.

Device

1
2
3

ADC1
ADC2
ADC3

表 H.4.1 ADC ポート割り当て(5) USARTPort No.

Devicepin

MCU pinconnection

1

USART1

2

USART6

TX
RX
TX
RX

PA9
PA10
PC6
PC7

ST-LINK TX
ST-LINK RX
Arduino D1
Arduino D0

表 H.5.1 UART ポート割り当て(6) その他
RTC ドライバを使用可能
USB-OTG HIGH ポートサポート
Adafruit 1.8” TFT Shield：ADC 動作、LCD 不安定、SD カード通信できず
RedBear BLE Shield2.1 動作しない

113

ボード上の問題で lwip は動作しない

Appendix I

STM32F091 Nucleo-64

STM32F091RCT6 Nucleo-64 のボード依存仕様を記載する。
(1) Arduino connectors 定義
CN No.

Pin No.

Pin 名

MCU pin

機能

CN6
power

1
2
3
4
5
6
7
8
1
2
3

NC
IOREF
RESET
+3V3
+5V
GND
GND
VIN
A0
A1
A2

NRST
PA0
PA1
PA4

3.3V Ref
RESET
3.3V input/output
5V output
GroundGroundPower input
ADC_IN0
ADC_IN1
ADC_IN4

CN8
analog

4
A3
PB0
5
A4
PC1 or PB96A5
PC0 or PB8
図 I.1.1 左 Arduino connector 設定

ADC_IN8
ADC_IN11 or I2C1_SDA
ADC_IN10 or I2C1_SCL

CN No.

Pin No.

Pin 名

MCU pin機能

CN5
digital

10
9
8
7
6
5
4
3
2
1
8
7
6

D15
D14
AREF
GND
D13
D12
D11
D10
D9
D8
D7
D6
D5

PB8
PB9
PA5
PA6
PA7
PB6
PC7
PA9
PA8
PB10
PB4

I2C1_SCL
I2C1_SDA
AVDD
GroundSPI1_SCKSPI1_MISO
TIM17_CH1 or SPI1_MOSITIM16_CH1 or SPI1_CS
TIM3_CH2- or UART1_TX
TIM2_CH3
TIM3_CH1

CN9
degital

5
D4
PB5
4
D3
PB3
3
D2
PA10
2
D1
PA2
1
D0
PA3
図 I.1.2 右 Arduino connector 設定

TIM2_CH2- or UART1_RX
USART2_TX
USART2_RX(2) I2C
Port No.

Devicepin

MCU pinconnection

1

I2C1
I2C2

PB8
PB9
PB10
PB11

Arduino D15
Arduino D14

2

SCL
SDA
SCL
SDA

表 I.2.1 I2C 接続ピン(3) SPI
Port No.

Devicepin

MCU pinconnection

1

SPI1

SCK

PA5

Arduino D13

114

2

MISO
MOSI
SCK
MISO
MOSI

SPI2

PA6
PA7
PB13
PB14
PB15

Arduino D12
Arduino D11

表 I.3.1 SPI 接続ピン(4) ADCPort No.

1

DeviceADC1

表 I.4.1 ADC ポート割り当て(5) USARTPort No.

Devicepin

MCU pinconnection

1

USART2

2

USART1

TX
RX
TX
RX

PA2
PA3
PA9
PA10

ST-LINK TX
ST-LINK RX
Arduino D8
Arduino D2

表 I.5.1 UART ポート割り当て(6) その他
RTC ドライバを使用可能
Adafruit 1.8” TFT Shield：ADC、LCD 動作、SD カード通信できず
RedBear BLE Shield2.1 動作

Appendix J

STM32L073 Nucleo-64

STM32L073RZT6 Nucleo-64 のボード依存仕様を記載する。
(1) Arduino connectors 定義
CN No.

Pin No.

Pin 名

MCU pin

機能

CN6
power

1
2
3
4
5
6
7
8
1
2
3

NC
IOREF
RESET
+3V3
+5V
GND
GND
VIN
A0
A1
A2

NRST
PA0
PA1
PA4

3.3V Ref
RESET
3.3V input/output
5V output
GroundGroundPower input
ADC_IN0
ADC_IN1
ADC_IN4

CN8
analog

4
A3
PB0
5
A4
PC1 or PB96A5
PC0 or PB8
図 J.1.1 左 Arduino connector 設定

ADC_IN8
ADC_IN11 or I2C1_SDA
ADC_IN10 or I2C1_SCL

CN No.

Pin No.

Pin 名

MCU pin機能

CN5
digital

10
9
8
7
6
5
4

D15
D14
AREF
GND
D13
D12
D11

PB8
PB9
PA5
PA6
PA7

I2C1_SCL
I2C1_SDA
AVDD
GroundSPI1_SCKSPI1_MISO
TIM22_CH2 or SPI1_MOSI

115

3
2
1
8
7
6

CN9
degital

D10
D9
D8
D7
D6
D5

PB6
PC7
PA9
PA8
PB10
PB4

SPI1_CS
TIM3_CH2- or USART1_TX
TIM2_CH3
TIM3_CH1

5
D4
PB5
4
D3
PB3
3
D2
PA10
2
D1
PA2
1
D0
PA3
図 J.1.2 右 Arduino connector 設定

TIM2_CH2- or USART1_RX
USART2_TX
USART2_RX(2) I2C
Port No.

Devicepin

MCU pinconnection

1

I2C1
I2C2

3

I2C3

PB8
PB9
PB10
PB11
PA8
PB4

Arduino D15
Arduino D14

2

SCL
SDA
SCL
SDA
SCL
SDA

Arduino D7
Arduino D6

表 J.2.1 I2C 接続ピン(3) SPI
Port No.

Devicepin

MCU pinconnection

1

SPI1

SPI2

PA5
PA6
PA7
PB13
PB14
PB15

Arduino D13
Arduino D12
Arduino D11

2

SCK
MISO
MOSI
SCK
MISO
MOSI

表 J.3.1 SPI 接続ピン(4) ADCPort No.

1

DeviceADC1

表 J.4.1 ADC ポート割り当て(5) USARTPort No.

Devicepin

MCU pinconnection

1

USART2

2

USART1

TX
RX
TX
RX

PA2
PA3
PA9
PA10

ST-LINK TX
ST-LINK RX
Arduino D8
Arduino D2

表 J.5.1 UART ポート割り当て(6) その他
RTC ドライバを使用可能
Adafruit 1.8” TFT Shield：ADC、LCD、SD カード動作
RedBear BLE Shield2.1 動作

Appendix K

STM32L476 Nucleo-64

STM32L476RGT6 Nucleo-64 のボード依存仕様を記載する。

116

(1) Arduino connectors 定義
CN No.

Pin No.

Pin 名

MCU pin

機能

CN6
power

1
2
3
4
5
6
7
8
1
2
3

NC
IOREF
RESET
+3V3
+5V
GND
GND
VIN
A0
A1
A2

NRST
PA0
PA1
PA4

3.3V Ref
RESET
3.3V input/output
5V output
GroundGroundPower input
ADC12_IN5
ADC12_IN6
ADC12_IN9

CN8
analog

4
A3
PB0
5
A4
PC1 or PB96A5
PC0 or PB8
図 K.1.1 左 Arduino connector 設定

ADC12_IN15
ADC123_IN2 or I2C1_SDA
ADC123_IN1 or I2C1_SCL

CN No.

Pin No.

Pin 名

MCU pin機能

CN5
digital

10
9
8
7
6
5
4
3
2
1
8
7
6

D15
D14
AREF
GND
D13
D12
D11
D10
D9
D8
D7
D6
D5

PB8
PB9
PA5
PA6
PA7
PB6
PC7
PA9
PA8
PB10
PB4

I2C1_SCL
I2C1_SDA
AVDD
GroundSPI1_SCKSPI1_MISO
TIM17_CH1 or SPI1_MOSITIM4_CH1 or SPI1_CS
TIM3_CH2- or USART1_TX
TIM2_CH3
TIM3_CH1

CN9
degital

5
D4
PB5
4
D3
PB3
3
D2
PA10
2
D1
PA2
1
D0
PA3
図 K.1.2 右 Arduino connector 設定

TIM2_CH2- or USART1_RX
USART2_TX
USART2_RX(2) I2C
Port No.

Devicepin

MCU pinconnection

1

I2C1
I2C2

3

I2C3

PB8
PB9
PB10
PB11
PC0
PC1

Arduino D15
Arduino D14

2

SCL
SDA
SCL
SDA
SCL
SDA

Arduino A5
Arduino A4

表 K.2.1 I2C 接続ピン(3) SPI
Port No.

Devicepin

MCU pinconnection

1

SPI1

SPI2

PA5
PA6
PA7
PB13

Arduino D13
Arduino D12
Arduino D11

2

SCK
MISO
MOSI
SCK

117

3

SPI3

MISO
MOSI
SCK
MISO
MOSI

PB14
PB15
PC10
PC11
PC12

表 K.3.1 SPI 接続ピン(4) ADCPort No.

Device

1
2
3

ADC1
ADC2
ADC3

表 K.4.1 ADC ポート割り当て(5) USARTPort No.

Devicepin

MCU pinconnection

1

USART2

2

USART1

TX
RX
TX
RX

PA2
PA3
PA9
PA10

ST-LINK TX
ST-LINK RX
Arduino D8
Arduino D2

表 K.5.1 UART ポート割り当て(6) その他
RTC ドライバを使用可能
Adafruit 1.8” TFT Shield：ADC、LCD は動作、SD カードは動作せず
RedBear BLE Shield2.1 動作

Appendix L

STM32L476 Discovery

STM32L473VGT6 Discovery のボード依存仕様を記載する。
(1) Arduino connectors 定義
コネクタなし(2) I2C
Port No.

Devicepin

MCU pinconnection

1

I2C1
I2C2

3

I2C3

PB8
PB9
PB10
PB11
PC0
PC1

Arduino D15
Arduino D14

2

SCL
SDA
SCL
SDA
SCL
SDA

Arduino A5
Arduino A4

表 L.2.1 I2C 接続ピン(3) SPI
Port No.

Devicepin

MCU pinconnection

1

SPI1

SPI2

3

SPI3

PA5
PA6
PA7
PB13
PB14
PB15
PC10
PC11
PC12

Arduino D13
Arduino D12
Arduino D11

2

SCK
MISO
MOSI
SCK
MISO
MOSI
SCK
MISO
MOSI

118

表 L.3.1 SPI 接続ピン(4) ADCPort No.

Device

1
2
3

ADC1
ADC2
ADC3

表 L.4.1 ADC ポート割り当て(5) USARTPort No.

Devicepin

MCU pinconnection

1

USART2
USART1

PD5
PD6
PB6
PB7

ST-LINK TX
ST-LINK RX

2

TX
RX
TX
RX

表 L.5.1 UART ポート割り当て(6) その他
RTC ドライバを使用可能

Appendix M

STM32F723 Discovery

STM32F723IEK6 Discovery のボード依存仕様を記載する。
(1) Arduino connectors 定義
CN No.

Pin No.

Pin 名

MCU pin

機能

CN6
power

1
2
3
4
5
6
7
8
1
2
3
4
5
6

NC
IOREF
RESET
+3V3
+5V
GND
GND
VIN
A0
A1
A2
A3
A4
A5

NRST
PA6
PA4
PC4
PF10
PC1
PC0

3.3V Ref
RESET
3.3V input/output
5V output
GroundGroundPower input
ADC1_IN6
ADC1_IN4
ADC1_IN14
ADC3_IN8
ADC1_IN10
ADC1_IN11

CN8analog

図 M.1.1 左 Arduino connector 設定
CN No.

Pin No.

Pin 名

MCU pin機能

CN5
digital

10
9
8
7
6
5
4
3
2
1
8
7
6

D15
D14
AREF
GND
D13
D12
D11
D10
D9
D8
D7
D6
D5

PH4
PH5
PA5
PB4
PB5
PA1
PH6
PE4
PE3
PE6
PB0

I2C1_SCL
I2C1_SDA
AVDD
GroundSPI1_SCKSPI1_MISO
TIM17_CH1 or SPI1_MOSI
NSS1
TIM12_CH1
TIM9_CH2
TIM3_CH3

CN9
degital

119

5
D4
PH3
4
D3
PE5
3
D2
PC5
2
D1
PA2
1
D0
PA3
図 M.1.2 右 Arduino connector 設定

TIM9_CH1
USART2_TX
USART2_RX(2) I2C
Port No.

Devicepin

MCU pinconnection

1

I2C1

2

I2C2

3

I2C3

SCL
SDA
SCL
SDA
SCL
SDA

PB8
PB9
PH4
PH5
PA8
PH8

wm8994
wm8994
Arduino D15
Arduino D14ft06x06
ft06x06

表 M2.1 I2C 接続ピン(3) SPI
Port No.

Devicepin

MCU pinconnection

1

SPI1

SCK
MISO
MOSI

PA5
PH4
PH5

Arduino D13
Arduino D12
Arduino D11

表 M3.1 SPI 接続ピン(4) ADCPort No.

Device

1
2
3

ADC1
ADC2
ADC3

表 M.4.1 ADC ポート割り当て(5) USARTPort No.

Devicepin

MCU pinconnection

1

USART6

2

USART2

TX
RX
TX
RX

PC6
PC7
PA2
PA2

ST-LINK TX
ST-LINK RX
TX/D1
RX/D0

表 M.5.1 UART ポート割り当て(6) その他
RTC ドライバを使用可能
USB-OTG FULL ポートサポート、HIGH ポートは動作しない

Appendix N

STM32F4R5 Nucleo-144

STM32L4R5ZIT6 Nucleo-144 のボード依存仕様を記載する。
(7) Arduino connectors 定義
CN No.

Pin No.

Pin 名

MCU pin

機能

CN6
power

1
2
3
4
5
6

NC
IOREF
RESET
+3V3
+5V
GND

NRST
-

3.3V Ref
RESET
3.3V input/output
5V output
Ground

120

7
8
1
2
3

CN8
analog

GND
VIN
A0
A1
A2

PA3
PC0
PC3
PC1
PC4
PC5

GroundPower input
ADC12_IN8
ADC123_IN1
ADC123_IN14
ADC123_IN2
ADC12_IN13
ADC12_IN14

4
A3
5
A4
6
A5
図 N.1.1 左 Arduino connector 設定
CN No.

Pin No.

Pin 名

MCU pin機能

CN5
digital

10
9
8
7
6
5
4
3
2
1
8
7
6

D15
D14
AREF
GND
D13
D12
D11
D10
D9
D8
D7
D6
D5
D4
D3
D2
D1
D0

PB8
PB9
PA5
PA6
PA7
PD14
PD15
PF12
PF13
PE9
PE11
PF14
PE13
PF15
PD8
PD9

I2C1_SCL
I2C1_SDA
AVDD
GroundSPI1_SCKSPI1_MISOTIM_E_PWM1 or SPI1_MOSISPI1_CS/TIM4_CH3
TIM4_CH4
TIM1_CH1
TIM1_CH2

CN9degital54321
図 N.1.2 右 Arduino connector 設定

TIM1_CH3
USART3_TX
USART3_RX(8) I2C
Port No.

Devicepin

MCU pinconnection

1

I2C1

2

I2C2

3

I2C3

SCL
SDA
SCL
SDA
SCL
SDA

PB8
PB9
PB10
PB11
PC0
PC1

Arduino D15
Arduino D14-

表 M2.1 I2C 接続ピン(9) SPI
Port No.

Devicepin

MCU pinconnection

1

SPI1

2

SPI2

3

SPI3

SCK
MISO
MOSI
SCK
MISO
MOSI
SCK
MISO
MOSI

PA5
PA6
PA7
B13
B14
B15
C10
C11
C12

Arduino D13
Arduino D12
Arduino D11-

表 M3.1 SPI 接続ピン

121

(10)
Port No.

1

ADC
DeviceADC1

表 M.4.1 ADC ポート割り当て
(11)

USART

Port No.

Devicepin

MCU pinconnection

1

LPUART1

2

USART3

TX
RX
TX
RX

PG8
PG9
PD8
PD9

ST-LINK TX
ST-LINK RX
TX/D1
RX/D0

表 M.5.1 UART ポート割り当て(12)
その他
RTC ドライバを使用可能
Adafruit 1.8” TFT Shield：ADC、LCD は動作、SD カードは動作せず
USB-OTG FULL は 1.4.0 で動作確認できませんでしたが、1.4.1 で動作しました。電源設定の問題でした。

Appendix O

STM32G071/STM32G0B1 Nucleo-64

STM32G071RBT6/STM32G0B1R Nucleo-64 のボード依存仕様を記載する。
(1) Arduino connectors 定義
CN No.

Pin No.

Pin 名

MCU pin

機能

CN6
power

1
2
3
4
5
6
7
8
1
2
3

NC
IOREF
RESET
+3V3
+5V
GND
GND
VIN
A0
A1
A2

NRST
PA0
PA1
PA2
PB1
PB11 or PB9
PB12 or PB8

3.3V Ref
RESET
3.3V input/output
5V output
GroundGroundPower input
ARD_A0_IN0
ARD_A1_IN1
ARD_A2_IN4
ARD_A3_IN9
ARD_A4_IN15/I2C2_SCL or I2C1_SCL
ARD_A5_IN16/I2C2_SDA or I2C1_SDA

CN8
analog

4
A3
5
A4
6
A5
図 O.1.1 左 Arduino connector 設定
CN No.

Pin No.

Pin 名

MCU pin機能

CN5
digital

10
9
8
7
6
5
4
3
2
1
8
7
6

D15
D14
AREF
GND
D13
D12
D11
D10
D9
D8
D7
D6
D5
D4

PB8
PB9
PA5
PA6
PA7
PB0
PC7
PA9
PA8
PB14
PB4
PB5

I2C1_SCL
I2C1_SDA
AVDD
GroundSPI1_SCKSPI1_MISO
SPI1_MOSI/TIM14_CH1
SPI1_CS/TIM3_CH3
TIM3_CH2
TIM15_CH1
TIM3_CH1

CN9
degital

5

-

122

D3
PB3
4
D2
PA10
3
D1
PC4
2
D0
PC5
1
図 O.1.2 右 Arduino connector 設定

TIM1_CH2
USART1_TX
USART1_RX(2) I2C
Port No.

Devicepin

MCU pinconnection

1

I2C1

2

I2C2

SCL
SDA
SCL
SDA

PB8
PB9
PB11
PB12

Arduino D15
Arduino D14
Arduino A4
Arduino A5

表 O2.1 I2C 接続ピン(3) SPI
Port No.

Devicepin

MCU pinconnection

1

SPI1

2

SPI2

SCK
MISO
MOSI
SCK
MISO
MOSI

PA5
PA6
PA7
A0
A3
A10

Arduino D13
Arduino D12
Arduino D11-

表 O3.1 SPI 接続ピン(4) ADCPort No.

1

DeviceADC1

表 O.4.1 ADC ポート割り当て(5) USARTPort No.

Devicepin

MCU pinconnection

1

USART2

2

USART1

TX
RX
TX
RX

PA2
PA3
PC4
PC5

ST-LINK TX
ST-LINK RX
TX/D1
RX/D0

表 O.5.1 UART ポート割り当て(6) その他
RTC ドライバを使用可能
Adafruit 1.8” TFT Shield：ADC、LCD は動作、SD カードは動作せず
RedBear BLE Shield2.1, TB001:uart/lcd シールドは動作
G0B1 のみ、USB シールドの USB デバイス使用可能

Appendix P

STM32H743 Nucleo-144

STM32H743 Nucleo-144(旧ボード)のボード依存仕様を記載する。
(1) Arduino connectors 定義
CN No.

Pin No.

Pin 名

MCU pin

機能

CN6
power

1
2
3
4
5
6

NC
IOREF
RESET
+3V3
+5V
GND

NRST
-

3.3V Ref
RESET
3.3V input/output
5V output
Ground

123

7
8
1
2
3

CN8
analog

GND
VIN
A0
A1
A2

PA3
PC0
PC3
PF3
PF5
PF10

GroundPower input
ADC12_IN15
ADC123_IN10
ADC123_IN13
ADC3_IN5
ADC3_IN4 or I2C1_SDA(PB9)
ADC3_IN6 or I2C1_SCL(PB8)

4
A3
5
A4
6
A5
図 P.1.1 左 Arduino connector 設定
CN No.

Pin No.

Pin 名

MCU pin機能

CN5
digital

10
9
8
7
6
5
4
3
2
1
8
7
6

D15
D14
AREF
GND
D13
D12
D11
D10
D9
D8
D7
D6
D5
D4
D3
D2
D1
D0

PB8
PB9
PA5
PA6
PA7
PD14
PD15
PF12
PF13
PE9
PE11
PF14
PE13
PF15
PG14
PG9

I2C1_SCL
I2C1_SDA
AVDD
GroundSPI1_SCKSPI1_MISO
SPI1_MOSI/TIM14_CH1
SPI1_CS/TIM4_CH3
TIM4_CH4
TIM1_CH1
TIM2_CH1

CN9
degital54321
図 P.1.2 右 Arduino connector 設定

TIM1_CH3
USART6_TX/LPUART1_TX
USART6_RX/LPUART1_RX(2) I2C
Port No.

Devicepin

MCU pinconnection

1

I2C1
I2C2

3

I2C3

4

I2C4

PB8
PB9
PH1
PH0
PH7
PH8
PD12
PB13

Arduino D15
Arduino D14

2

SCL
SDA
SCL
SDA
SCL
SDA
SCL
SDA

表 P2.1 I2C 接続ピン(3) SPI
Port No.

Devicepin

MCU pinconnection

1

SPI1

2

SPI2

SPI3

PA5
PA6
PA7
PB13
PB14
PB15
PC10
PC11
PC12

Arduino D13
Arduino D12
Arduino D11
-

3

SCK
MISO
MOSI
SCK
MISO
MOSI
SCK
MISO
MOSI

124

表 P3.1 SPI 接続ピン(4) ADCPort No.

Device

1
2
3

ADC1
ADC2
ADC3

表 P.4.1 ADC ポート割り当て(5) USARTPort No.

Devicepin

MCU pinconnection

1

USART3

2

LPUART1

TX
RX
TX
RX

PD8
PD9
PB6
PB7

ST-LINK TX
ST-LINK RX
TX/D1
RX/D0

表 P.5.1 UART ポート割り当て(6) その他
RTC ドライバを使用可能
Adafruit 1.8” TFT Shield：ADC、LCD は動作、SD カードは動作せず
TB001:uart/lcd シールドは動作
USB-OTG はエナミュレーション中に通信エラーが発生して停止

Appendix Q

STM32G474/431 Nucleo-64

STM32G474 及び 431 Nucleo-64 のボード依存仕様を記載する。
(1) Arduino connectors 定義
CN No.

Pin No.

Pin 名

MCU pin

機能

CN6
power

1
2
3
4
5
6
7
8
1
2
3

NC
IOREF
RESET
+3V3
+5V
GND
GND
VIN
A0
A1
A2

NRST
PA0
PA1
PA4
PB0
PC1
PC0

3.3V Ref
RESET
3.3V input/output
5V output
GroundGroundPower input
ADC12_IN1
ADC12_IN2
ADC12_IN17
ADC3_IN12 or ADC1_IN15
ADC12_IN7 or I2C1_SDA(PB9)
ADC12_IN6 or I2C1_SCL(PA15)

CN8
analog

4
A3
5
A4
6
A5
図 Q.1.1 左 Arduino connector 設定
CN No.

Pin No.

Pin 名

MCU pin機能

CN5
digital

10
9
8
7
6
5
4
3

D15
D14
AREF
GND
D13
D12
D11
D10

PB8
PB9
PA5
PA6
PA7
PB6

I2C1_SCL
I2C1_SDA
AVDD
GroundSPI1_SCKSPI1_MISO
SPI1_MOSI/TIM3_CH2
SPI1_CS/TIM4_CH1

125

CN9
degital

2
1
8
7
6

D9
D8
D7
D6
D5
D4
D3
D2
D1
D0

PC7
PA9
PA8
PB10
PB4
PB5
PB3
PA10
PC4/PA2
PC5/PA354321
図 Q.1.2 右 Arduino connector 設定

TIM3_CH2 or TIM8_CH2
TIM2_CH3
TIM3_CH1

TIM2_CH2
USART1_TX/LPUART1_TX
USART1_RX/LPUART1_RX(2) I2C
Port No.

Devicepin

MCU pinconnection

1

I2C1

2

I2C2
I2C3

PB8
PB9
PA8
PA9
PF3
PF4

Arduino D15
Arduino D14
Arduino D7
Arduino D8

3
4

I2C4

SCL
SDA
SCL
SDA
SCL
SDA
SCL
SDA

対応しない
対応しない

表 Q2.1 I2C 接続ピン(3) SPI
Port No.

Devicepin

MCU pinconnection

1

SPI1

2

SPI2

SPI3

PA5
PA6
PA7
PB13
PB14
PB15
PC10
PC11
PC12

Arduino D13
Arduino D12
Arduino D11
-

3

SCK
MISO
MOSI
SCK
MISO
MOSI
SCK
MISO
MOSI

表 P3.1 SPI 接続ピン(4) ADCPort No.

Device

1
2

ADC1
ADC2

表 Q.4.1 ADC ポート割り当て(5) USARTPort No.

Devicepin

MCU pinconnection

1

LPUART1

2

USART1

TX
RX
TX
RX

PA2
PA3
PC4
PC5

ST-LINK TX
ST-LINK RX
TX/D1
RX/D0

表 Q.5.1 UART ポート割り当て(6) その他
RTC ドライバを使用可能
Adafruit 1.8” TFT Shield：ADC、LCD は動作、SD カードは初期化中通信エラー

126

TB001:uart/lcd シールドは動作
USB シールドを用いて、USB-DEVICE は動作

Appendix R

STM32WB55 Nucleo

STM32WB55 ボード依存仕様を記載する。
(1) Arduino connectors 定義
CN No.

Pin No.

Pin 名

MCU pin

機能

CN6
power

1
2
3
4
5
6
7
8
1
2
3

NC
IOREF
RESET
+3V3
+5V
GND
GND
VIN
A0
A1
A2

NRST
PC0
PC1
PA1
PA0
PC3
PC2

3.3V Ref
RESET
3.3V input/output
5V output
GroundGroundPower input
ADC1_IN1
ADC1_IN2
ADC1_IN5
ADC1_IN6
ADC1_IN4
ADC1_IN3

CN8
analog

4
A3
5
A4
6
A5
図 R.1.1 左 Arduino connector 設定
CN No.

Pin No.

Pin 名

MCU pin機能

CN5
digital

10
9
8
7
6
5
4
3
2
1
8
7
6

D15
D14
AREF
GND
D13
D12
D11
D10
D9
D8
D7
D6
D5
D4
D3
D2
D1
D0

PB8
PB9
PA5
PA6
PA7
PA4
PA9
PC12
PC13
PA8
PA15
PC10
PA10
PC6
PA2
PA3

I2C1_SCL
I2C1_SDA
AVDD
GroundSPI1_SCKSPI1_MISO
SPI1_MOSI/TIM1_CH1
SPI1_CS/TIM2_CH3(PB10)
TIM17_CH1
TIM1_CH1
TIM2_CH1

CN9
degital54321
図 R.1.2 右 Arduino connector 設定

TIM1_CH3
LPUART1_TX
LPUART1_RX(2) I2C
Port No.

Devicepin

MCU pinconnection

1

I2C1

2

I2C3

SCL
SDA
SCL
SDA

PA8
PA9
PC0
PC1

Arduino D15
Arduino D14
Arduino A0
Arduino A1

MCU pinconnection

表 R.2.1 I2C 接続ピン(3) SPI
Port No.

Device

pin

127

1

SPI1

2

SPI2

SCK
MISO
MOSI
SCK
MISO
MOSI

PA5
PA6
PA7
PB13
PB14
PB15

Arduino D13
Arduino D12
Arduino D11-

表 R.3.1 SPI 接続ピン(4) ADCPort No.

Device1

ADC1

表 R.4.1 ADC ポート割り当て(5) USARTPort No.

Devicepin

MCU pinconnection

1

USART1

2

LPUART1

TX
RX
TX
RX

PA2
PA3
PC4
PC5

ST-LINK TX
ST-LINK RX
TX/D1
RX/D0

表 R.5.1 UART ポート割り当て(6) その他
RF 有効時は RTC ドライバを使用不可
Adafruit 1.8” TFT Shield：ADC、LCD は動作、SD カードは初期化中通信エラー
TB001:uart/lcd シールドは動作
USB シールドを用いて、USB-DEVICE は動作

Appendix S

STM32MP157C DK2

STM32MP157C DK2 ボード依存仕様を記載する。
(1) Arduino connectors 定義
CN No.

Pin No.

Pin 名

MCU pin

機能

CN6
power

1
2
3
4
5
6
7
8
1
2
3

NC
IOREF
RESET
+3V3
+5V
GND
GND
VIN
A0
A1
A2

NRST
PF14
PF13
ANA0
ANA1
PC3/PA12
PF12/PA11

3.3V Ref
RESET
3.3V input/output
5V output
GroundGroundPower input(ADC1_IN0)(ADC1_IN1)(ADC1_IN6)(ADC1_IN2)(ADC1_IN13)

CN8analog

4
A3
5
A4
6
A5
図 S.1.1 左 Arduino connector 設定
CN No.

Pin No.

Pin 名

MCU pin機能

CN5
digital

10
9
8
7
6
5

D15
D14
AREF
GND
D13
D12

PA11
PA12
PE12
PE13

I2C5_SCL
I2C5_SDA
VREF+
GroundSPI4_SCK
SPI4_MISO

128

CN9
degital

4
3
2
1
8
7
6

D11
D10
D9
D8
D7
D6
D5
D4
D3
D2
D1
D0

PE14
PE11
PH6
PG3
PD1
PE9
PD15
PE10
PD14
PE1
PE8
PE7

SPI4_MOSI/TIM1_CH4
SPI4_CS/TIM1_CH2
TIM12_CH1
TIM1_CH1
TIM4_CH454321
図 S.1.2 右 Arduino connector 設定

TIM4_CH3
UART7_TX
UART7_RX(2) I2C
Port No.

Devicepin

MCU pinconnection

1

I2C1

2

I2C2

3

I2C3

4

I2C4

5

I2C5

SCL
SDA
SCL
SDA
SCL
SDA
SCL
SDA
SCL
SDA

PB8
PB9
PB10
PB11
PH7
PH8
PD12
PD13
PA11
PA12

Arduino D15
Arduino D14

connection

表 S.2.1 I2C 接続ピン(3) SPI
Port No.

Devicepin

MCU pin

1

SPI1

2

SPI2

3

SPI3

4

SPI4

5

SPI5

SCK
MISO
MOSI
SCK
MISO
MOSI
SCK
MISO
MOSI
SCK
MISO
MOSI
SCK
MISO
MOSI

PA5
PA6
PA7
PI1
PI2
PI3
PE0
PD10
PD6
PE12
PE13
PE14
PF7
PF8
PF9

-

Arduino D13
Arduino D12
Arduino D11

表 S.3.1 SPI 接続ピン(4) ADCPort No.

1

Device-

表 S.4.1 ADC ポート割り当て(5) USARTPort No.

Devicepin

MCU pinconnection

129

1

UART7

TX
RX

PE8
PE7

Arduino D1
Arduino D0

表 S.5.1 UART ポート割り当て(6) その他
iwhi TFT Shield：LCD は実行中まれにタイムアウト発生、SD カードは未評価
I2C は SCL/SDA にプルアップ抵抗を付けると NACK エラーとなる

130