TOPPERS BASE PLATFORM (ST) V1.4.2

担当者

TOPPERS BASE PLATFORM (ST) REFERENCE MANUAL

竹内良輔（Educational WG）

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

日付
1016/05/18
1016/06/13
1016/08/16
1017/01/10
1017/07/07
1017/08/15
1018/05/31
1019/03/04
1010/05/11
1011/06/01

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

変更内容
STM31F4xx 版
STM31F746 の機能を追加,446/746-nucleo-144 を追加
USB OTG の対応/I1C プロトシールドを追加
USB OTG プログラム修正による改訂、CV 版と分離
STM31F767/STM31F769 ボード対応,spi 変更
SM31F091/STM31L073/STM31L476 ボード対応
TOPPERS USB MEDDLEWARE の対応
バージョンアップ、変更履歴詳細に記載
gdic ドライバ追加/lwip 対応、新ボード対応
WIFI 拡張/OpenAMP の対応/stmcube 変更、6.6,6.7 章
追加、BLE で不足のユーティリティを追記

TOPPERS BASE PLATFORM (ST) REFERENCE MANUAL

目次
変更履歴 ...................................................................................................................................................1
1 背景 ...................................................................................................................................................6
1 目的 ...................................................................................................................................................6
3 TOPPERS BASE PLATFORM (ST)仕様 .........................................................................................6
3.1
プラットフォームのターゲット .................................................................................................6
3.1
レイア構造 ...............................................................................................................................11
3.3
開発環境 ...................................................................................................................................14
4 Device Driver 仕様 .........................................................................................................................14
4.1
Basic Driver ............................................................................................................................14
4.1.1
概要 ......................................................................................................................................14
4.1.1
ドライバ一覧 ........................................................................................................................14
4.1.3
GPIO ....................................................................................................................................14
4.1.3.1
データ仕様 ........................................................................................................................14
4.1.3.1
インターフェイス仕様 ......................................................................................................16
4.1.3.3
フローチャート .................................................................................................................16
4.1.4
DMA .....................................................................................................................................16
4.1.4.1
データ仕様 ........................................................................................................................16
4.1.4.1
インターフェイス仕様 ......................................................................................................11
4.1.4.3
フローチャート .................................................................................................................11
4.1.5
WATCH DOG.......................................................................................................................13
4.1.5.1
データ仕様 ........................................................................................................................13
4.1.5.1
インターフェイス仕様 ......................................................................................................14
4.1.6
TIMER .................................................................................................................................14
4.1.7
UART ...................................................................................................................................14
4.1
Standard Driver ......................................................................................................................14
4.1.1
概要 ......................................................................................................................................14
4.1.1
I1C .......................................................................................................................................144.1.1.1
データ仕様 ........................................................................................................................15
4.1.1.1
インターフェイス仕様 ......................................................................................................174.1.1.3
フローチャート .................................................................................................................18
4.1.3
SPI .......................................................................................................................................30
4.1.3.1
データ仕様 ........................................................................................................................31
4.1.3.1
インターフェイス仕様 ......................................................................................................34
4.1.3.3
フローチャート .................................................................................................................35
4.1.4
ADC .....................................................................................................................................37
4.1.4.1
データ仕様 ........................................................................................................................37
4.1.4.1 インターフェイス仕様 ............................................................................................................41
4.1.4.3 フローチャート .......................................................................................................................41
4.1.5
QSPI.....................................................................................................................................44
4.1.5.1
データ仕様 ........................................................................................................................44
4.1.5.1 インターフェイス仕様 ............................................................................................................47
4.1.5.3 フローチャート .......................................................................................................................48
4.1.6
RTC ......................................................................................................................................48
4.1.6.1
データ仕様 ........................................................................................................................48
4.1.6.1
インターフェイス仕様 ......................................................................................................50
4.1.6.3
設定手順............................................................................................................................50
4.1.7
USB OTG .............................................................................................................................51
4.1.7.1
データ仕様 ........................................................................................................................51
4.1.7.1 インターフェイス仕様 ............................................................................................................53
4.1.7.3 フローチャート .......................................................................................................................54
4.3
F7 Depend Driver ...................................................................................................................59

4.3.1
概要 ......................................................................................................................................59
4.3.1
LTDC ...................................................................................................................................60
4.3.1.1
データ仕様 ........................................................................................................................60
4.3.1.1
インターフェイス仕様 ......................................................................................................61
4.3.1.3
設定手順............................................................................................................................63
4.3.3
TP.........................................................................................................................................64
4.3.4
SDMMC ...............................................................................................................................64
4.3.4.1
データ仕様 ........................................................................................................................64
4.3.4.1
インターフェイス仕様 ......................................................................................................65
4.3.4.3
設定手順............................................................................................................................66
4.3.5
AUDIO .................................................................................................................................68
4.3.5.1
データ仕様 ........................................................................................................................68
4.3.5.1
インターフェイス仕様 ......................................................................................................73
4.3.5.3
設定手順............................................................................................................................74
4.3.6
DSI .......................................................................................................................................76
4.3.6.1
データ仕様 ........................................................................................................................76
4.3.6.1
インターフェイス仕様 ......................................................................................................77
4.3.6.3
設定手順............................................................................................................................78
4.3.7 EMAC .....................................................................................................................................79
4.3.7.1 データ仕様 ...........................................................................................................................79
4.3.7.1 インターフェイス仕様 ............................................................................................................80
4.3.7.3 フローチャート .......................................................................................................................81
5 タスクモニタ ...................................................................................................................................83
5.1
概要 ..........................................................................................................................................835.1
標準入出力 ...............................................................................................................................83
5.3
標準デバッグコマンド .............................................................................................................84
5.4
デバッグコマンド拡張 .............................................................................................................85
5.4.1
データ仕様............................................................................................................................85
5.4.1
インターフェイス仕様 ..........................................................................................................85
6 API 層 .............................................................................................................................................86
6.1
概要 ..........................................................................................................................................86
6.1
ファイルシステム ....................................................................................................................86
6.1.1
ファイルライブラリ .............................................................................................................87
6.1.1
Storage Device Manager .....................................................................................................88
6.1.1.1
データ仕様 ........................................................................................................................88
6.1.1.1
インターフェイス仕様 ......................................................................................................89
6.1.3
FatFs....................................................................................................................................90
6.3
時間管理 ...................................................................................................................................90
6.3.1
データ仕様............................................................................................................................90
6.3.1
インターフェイス仕様 ..........................................................................................................91
6.4
USB ミドルウェア ...................................................................................................................91
6.4.1
USB ホスト機能 ...................................................................................................................91
6.4.1
USB デバイス機能 ...............................................................................................................91
6.5
UI ミドルウェア ......................................................................................................................91
6.5.1
UI ディレクトリ ...................................................................................................................91
6.6
LWIP ミドルウェア .................................................................................................................91
6.6.1
ポーティング方法 .................................................................................................................93
6.7
STM31Cube ミドルウェア ......................................................................................................93
6.7.1
STM31_WPAN ディレクトリ ..............................................................................................93
6.7.1
OpenAMP ディレクトリ ......................................................................................................94
7 ファイルの構成 ...............................................................................................................................94
7.1
共通部 ......................................................................................................................................94
4

7.1
STM31F4xx ドライバ..............................................................................................................94
7.3
STM31L4xx ドライバ..............................................................................................................95
7.4
STM31F7xx ドライバ..............................................................................................................95
7.5
STM31F0xx ドライバ..............................................................................................................96
7.6
STM31L0xx ドライバ..............................................................................................................96
7.7
STM31G0xx ドライバ .............................................................................................................97
7.8
STM31H7XX ドライバ ............................................................................................................97
7.9
STM31G4XX ドライバ ............................................................................................................98
7.10 STM31WBXX ドライバ ...........................................................................................................98
7.11 STM31MP1XX ドライバ .........................................................................................................99
7.11 GDIC ドライバ ........................................................................................................................99
8 変更履歴詳細 .................................................................................................................................100
Appendix A STM31F401RE Nucleo .................................................................................................101
Appendix B STM31F4 Discovery .....................................................................................................103
Appendix C STM31F746 Discovery .................................................................................................104
Appendix D STM31F446RE Nucleo-64 ...........................................................................................105
Appendix E STM31F446ZE Nucleo-144 ..........................................................................................106
Appendix F STM31F746ZG Nucleo-144 ..........................................................................................108
Appendix G STM31F767ZIT6 Nucleo-144 ......................................................................................109
Appendix H STM31F769NIH6 Discovery ....................................................................................... 111
Appendix I STM31F091 Nucleo-64 .................................................................................................. 113
Appendix J STM31L073 Nucleo-64 ................................................................................................. 114
Appendix K STM31L476 Nucleo-64 ................................................................................................ 115
Appendix L STM31L476 Discovery ................................................................................................. 117
Appendix M STM31F713 Discovery ................................................................................................ 118
Appendix N STM31F4R5 Nucleo-144.............................................................................................. 119
Appendix O STM31G071 Nucleo-64 ................................................................................................111
Appendix P STM31H743 Nucleo-144 ..............................................................................................111
Appendix Q STM31G474/431 Nucleo-64 .........................................................................................114
Appendix R STM31WB55 Nucleo ....................................................................................................116
Appendix S STM31MP157C DK1 ....................................................................................................117

5

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

2 目的
本リファレンスマニュアルは、ターゲットボードとターゲットボード上に作成した組込みソフトウェ
アプラットフォーム(TOPPERS BASE PLATFORM(ST))ついて記載する。
TOPPERS BASE PLATFORM(ST) は STM31F4SoC 対応のボードに対する機能を for STM31F4xx
として記載する。同様に、STM31F7SoC 対応のボードに対する機能を for STM31F7xx、STM31F0SoC
対応ボードに対する記載を STM31F0xx、STM31L0SoC に対応する記載を STM31L0xx、STM31H7SoCに対応する記載を STM31H7xx、STM31G4SoC に対する記載を STM31G4xx、STM31WB55SoC に対する記載を STM31WBxx とする。
■ターゲットボード
・STM31F407 Discovery for STM31F4xx
・STM31F401 Nucleo-64 for STM31F4xx
・STM31F446 Nucleo-64 for STM31F4xx
・STM31F446 Nucleo-144 for STM31F4xx
・STM31F746 Discovery for STM31F7xx
・STM31F746 Nucleo-144 for STM31F7xx
・STM31F767 Nucleo-144 for STM31F7xx
・STM31F769 Discovery for STM31F7xx
・STM31F091 Nucleo-64 for STM31F0xx
・STM31L073 Nucleo-64 for STM31L0xx
・STM31L476 Nucleo-64 for STM31L4xx
・STM31L476 Discovery for STM31L4xx
・STM31F713 Discovery for STM31F7xx
・STM31L4R5 Nucleo-144 for STM31L4xx
・STM31H743 Nucleo-144 for STM31H7xx
・STM31G474 Nucleo-64 for STM31G4xx
・STM31G431 Nucleo-64 for STM31G4xx
・STM31WB55 Nucleo for STM31WBxx

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

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

6

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

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

7

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

9図 3.3 USB シールド10

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

11

I1C プロトタイプシールド

I1C ブレッドボード(D15,14 を対応)

IWHI 1.54LCD シールド

3.2 レイア構造
PLATFORM のハードウェアドライバは下層から３層のレイヤ構造を持ち、その上に API 層、ライブラリの I/F 層をもつ。これらの PLATFORM は、Realtime Kernel TOPPERS ASP-1.9.1 上に構築されいている。
また、ASP のもつデバッグ機能以外に、教育ＷＧで提供するタスクモニタを標準に装備し、システムデバッ
グ用にデバッグコマンドを用いて開発補助を行う。
図 3.1.1 に BASE PLATFORM(STM) for STM31F4xx/STM31L4xx/STM31F0xx/STM31L0xx の構造図を示す。Standard Driver、SPI xDriver、File Library により、アプリケーションから以下の機能が使用可能になる。
① SD card File system(SPI)② SPI③ Wire(I1C)④ UART⑤ ADC⑥ QSPI⑦ RTC⑧ USB OTG

図 3.1.1 TOPPERS BASE PLATFORM(ST) for STM31F4xx/L4xx/F0xx/L0xx 構造図
図 3.1.1 に TOPPERS BASE PLATFORM(ST) for STM31F7xx の構造図を示す。F7 Depend driver の拡張により以下の機能が使用可能になる。
① jpeg-9b(JPEG ライブラリ)② libmad-0.15.1b(mp3 デコーダライブラリ)③ lwip(TCP/IP プロトコルスタック)④ SD card File system(SDMMC)⑤ SDRAM⑥ GLCD/touch panel
⑦ RTC

11

⑧
⑨
⑩
⑪
⑫
⑬

AUDIO
SPI
Wire(I1C)ADC
QSPI
USB OTG

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

PLATFORM(ST)
DeviceDriver(pdic)

Basic
DriverStandard
Driver

STM31F4/F0xx
STM31L4/L0xx
gpio
dma
watch doc(timer)
uart
i1c
spi
adc
(qspi)
rtc
usb OTGF7 Depend
Drivergdic
api
middlewarehigh driver
File
SystemGraphic UI(Opensource)library

fatfs
file libreary
stdio
ui
USB

STM31F7xx
gpio
dma
watch doc(timer)
uart
i1c
spi
adc
qspi
rtc
usbo
ltdc/dsi
tp
sdmmc
audio/dfsdm
emac
wifi
fatfs
file library
stdioui
usb meddle
libjpeg(*1)
libmad(*1)

detail

対象の講座

新基礎２

CLCD/senser/eeprom
GLCD/SD card
Joy stick
FLASH
Clock 機能MSC/HID
GLCD
SD card
有線 LAN
無線 LAN
Shield 依存
FAT
C language file
stdio
文字グラフィック描画
USB host/dev
JPEG
MP3

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

LAN

lwip(*1)

TCP/IP*1：api(posix 互換)のためソース未修正で実装：バージョンアップに追従*1：問題点対応用に patch ファイルを用意：バージョンは固定となる

3.3 開発環境
TOPPERS BASE PLATFORM は Windows7 以降のパソコンで cygwin または MIN-GW をインストー
ルし、コンパイラ環境は GCC-ARM の以下のバージョンをインストールし開発を行っている。
(1) gcc version 5.4(GCC ARM:1016q1-10160611)(1) gcc version 5.4(GCC ARM-1016q1-10160916)

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

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
汎用ＩＯドライバ(1) dma
ダイナミック・メモリ・アクセスドライバ(3) timer
タイマードライバ(4) uart
シリアルドライバ

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

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

項目

型

機能

1

mode

uint31_t

対象のピンアサインの設定モード

14

1
3
4
5

pull
uint31_t
otype
uint31_t
speed
uint31_talternateuint31_t
表 4.1.3.1 GPIO_Init_t 型①

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

出力 Pull-Up/Pull-Down 設定
出力タイプ Open-drain/Push-Pull 設定
出力スピード設定
アルタネート設定

定義

値

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
表 4.1.3.1 mode 設定値

0x00000000
0x10110000
0x10110000
0x10310000
0x10110000
0x10110000
0x10310000
0x00000001
0x00000001
0x00000003
0x00000007

内容

GPIO 入力モード
GPIO 入力 EXTI 立ち上がりエッジ割込み
GPIO 入力 EXTI 立下りエッジ割込み
GPIO 入力 EXTI 両エッジ割込み
GPIO 入力 EXTI 立ち上がりエッジ EVENTGPIO 入力 EXTI 立下りエッジ EVENTGPIO 入力 EXTI 両エッジ EVENTGPIO 出力モード
アルタネートピン設定
アナログピン設定
ADC アナルグピン(STM31L4xx のみ)② pullpull はピンアサインが出力モード設定の場合、Pull-Up/Pull-Down の端子設定を行う。
定義

GPIO_NOPULLGPIO_PULLUPGPIO_PULLDOWN
表 4.1.3.3 pull 設定値

値0x00000000
0x00000001
0x00000001

内容

Pull-Up/Down 設定を行わない
Pull-Up 設定
Pull-Down 設定③ otypeotype はピンアサインが出力モードの場合、Open-Drain/Push-Pull の端子設定を行う
定義

GPIO_OTYPE_PP
GPIO_OTYPE_OD
表 4.1.3.4 otype 設定値

値

0x00000000
0x00000001

内容

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

GPIO_SPEED_LOW
GPIO_SPEED_MEDIUMGPIO_SPEED_FAST
GPIO_SPEED_HIGH
表 4.1.3.5 speed 設定値

値

内容0x00000000
0x00000001
0x00000001
0x00000003

低速
中間
速い
最高

⑤ altanate
アルタネートはピン設定をデバイスの入出力ピンとして使用する場合のアルタネート値を設定す15

る。モードが GPIO_MODE_AF_PP の場合のみ有効となる。

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

型

引数

機能

備考

gpio_setup

void

uint31_t base
GPIO_Init_t *init
uint31_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 型の二つの型を持つ。STM31F4xx / STMF7xx と STM31L4xx / STM31F0xx /STM31L0xx では IP が異なるため、構造体に若干の差異がある。
番号

項目

型

機能

1
1
3
4
5
6
7
8

ChannelDirection
PeriphInc
MemIncPeriphDataAlignment
MemDataAlignment
Mode
Priority

uint31_t
uint31_t
uint31_t
uint31_t
uint31_t
uint31_t
uint31_t
uint31_t

DMA のチャネル番号
転送方向
ペリフェラルインクリメントモード
メモリインクリメントモード
ペリフェラルのデータアラインメントを設定する
メモリのデータアラインメントを設定する
転送モード設定
優先順位設定

16

9
10
11
11

FIFOMode
uint31_t
FIFO の有効、無効を設定
FIFOThresholduint31_t
FIFO のスレッシュホールドを設定
MemBurst
uint31_t
メモリ側のバースト設定
PeriphBurstuint31_t
ペリフェラル側のバースト設定
表 4.1.4.1 DMA_Init_t 型(STM31F4xx/STM31F7xx)

番号

項目

1
1
3
4
5
6
7
8

Requestuint31_t
リクエストチャネル番号
Direction
uint31_t
転送方向
PeriphInc
uint31_t
ペリフェラルインクリメントモード
MemIncuint31_t
メモリインクリメントモード
PeriphDataAlignment uint31_t
ペリフェラルのデータアラインメントを設定する
MemDataAlignment
uint31_t
メモリのデータアラインメントを設定する
Mode
uint31_t
転送モード設定
Priority
uint31_t
優先順位設定表 4.1.4.1 DMA_Init_t 型(STM31F0xx/STM31L0xx/STM31L4xx)

①

型

機能

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

値

DMA_CHANNEL_0
DMA_CHANNEL_1
DMA_CHANNEL_1
DMA_CHANNEL_3
DMA_CHANNEL_4
DMA_CHANNEL_5
DMA_CHANNEL_6
DMA_CHANNEL_7
表 4.1.4.3 Channel 設定値②

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

内容

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

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

DMA_PERIPH_TO_MEMORYDMA_MEMORY_TO_PERIPH
DMA_MEMORY_TO_MEMORY
表 4.1.4.4 Direction 設定値

値0x00000000
DMA_SxCR_DIR_0
DMA_SxCR_DIR_1

内容メモリからペリフェラルへの転送
ペリフェラルからメモリへの転送
メモリからメモリへの転送③ PeriphInc
ペリフェラル転送時、インクリメントモード設定。
定義

DMA_PINC_ENABLE
DMA_PINC_DISABLE
表 4.1.4.5 PeriphInc 設定値

値

DMA_SxCR_PINC
0x00000000

内容

ペリフェラルインクリメントモード有効ペリフェラルインクリメントモード無効④ MemInc
メモリ転送時インクリメントモード

17

定義

DMA_MINC_ENABLE
DMA_MINC_DISABLE
表 4.1.4.6 MemInc 設定値

値

DMA_SxCR_MINC
0x00000000

内容

メモリインクリメントモード有効
メモリインクリメントモード無効⑤ 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
表 4.1.4.9 Mode 設定値

値

0x00000000
DMA_SxCR_CIRC
DMA_SxCR_PFCTRL

内容

ノーマルモード
サーキュラーモード
ペリフェラルフロー制御モード⑧ Priority
DMA の実行優先度設定を行う。
定義

DMA_PRIORITY_LOW
DMA_PRIORITY_MEDIUM
DMA_PRIORITY_HIGH
DMA_PRIORITY_VERY_HIGH
表 4.1.4.10 Priority 設定値

値

0x00000000
DMA_SxCR_PL_0
DMA_SxCR_PL_1
DMA_SxCR_PL

内容

低い
中間
高い
非常に高い

⑨ FIFOModeDMA の FIFO の有効、無効を設定する。
定義

値

DMA_FIFOMODE_DISABLE
DMA_FIFOMODE_ENABLE
表 4.1.4.11 FIFOmode 設定値

0x00000000
DMA_SxFCR_DMDIS内容DMA FIFO 無効
DMA FIFO 有効⑩ FIFOThreshold18

FIFO のスレシュホールドを設定する。
定義

値

内容

DMA_FIFO_THRESHOLD_1QUARTERFULLDMA_FIFO_THRESHOLD_HALFFULL
DMA_FIFO_THRESHOLD_3QUARTERSFULLDMA_FIFO_THRESHOLD_FULL
表 4.1.4.11 FIFOthreshold 設定値

0x00000000
DMA_SxFCR_FTH_0
DMA_SxFCR_FTH_1
DMA_SxFCR_FTH

1/4
1/1
3/4
フル

⑪ MemBurst
メモリ側の DMA バースト設定
定義

値

DMA_MBURST_SINGLE
DMA_MBURST_INC4
DMA_MBURST_INC8
DMA_MBURST_INC16
表 4.1.4.13 MemBurst 設定値

0x00000000
DMA_SxCR_MBURST_0
DMA_SxCR_MBURST_1
DMA_SxCR_MBURST

内容

シングル
インクリメント４
インクリメント８
インクリメント１６⑫ PeriphBurst
ペリフェラル側の DMA バースト設定
定義

値

DMA_PBURST_SINGLE
0x00000000
DMA_PBURST_INC4
DMA_SxCR_PBURST_0
DMA_PBURST_INC8
DMA_SxCR_PBURST_1
DMA_PBURST_INC16DMA_SxCR_PBURST
表 4.1.4.14 PeriphBurst 設定値

型

内容

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

番号

項目

1
1
3
4
5
6
7
8
9

base
uint31_t
DMA ストリームコントローラのベースアドレス
Init
DMA_Init_t DMA 初期化情報
sdid
uint31_t
DMA ストリーム ID
xfercallback
void *func
転送終了時のコールバック関数
xferhalfcallback
void *func
半分転送終了時のコールバック関数
xferm1callback
void *func
Mem1 転送用コールバック関数
errorcallback
void *func
エラー発生時のコールバック関数
ErrorCodeuint31_t
エラーコードlocaldatavoid*
ローカル領域へのポインタ
表 4.1.4.15 DMA_Handle_t 型(STM31Fxx/STM31F7xx

機能

番号

項目

型

機能

1
1
3
4
5
6
7

base
cbase
Init
chid
statusxfercallback
xferhalfcallback

uint31_t
uint31_t
DMA_Init_t
uint31_t
uint31_t
void *func
void *func

DMA ポートのベースアドレス（自動設定）
DMA チャネルのベースアドレス
DMA 初期化情報
DMA チャネル ID（自動設定）
DMA ステータス
転送終了時のコールバック関数
半分転送終了時のコールバック関数

19

8
9
10
11

xferm1callback
void *func
Mem1 転送用コールバック関数
errorcallback
void *func
エラー発生時のコールバック関数
ErrorCodeuint31_t
エラーコードlocaldatavoid*
ローカル領域へのポインタ
表 4.1.4.16 DMA_Handle_t 型(STM31L40xx/STM31F0xx/STM31L0xx)① sdid/chid
STM31F4xx/STM31F7xx では DMA ストリーム ID を使用する。これの値は初期化時 base より自動設定される。DMA ストリームコントローラのシーケンシャルな番号である。
定義

値

内容

DMA1STM0_SID(0)DMA1 STREAM0DMA1STM1_SID(1)
DMA1 STREAM1DMA1STM1_SID(1)
DMA1 STREAM1DMA1STM3_SID(3)DMA1 STREAM3DMA1STM4_SID(4)DMA1 STREAM4DMA1STM5_SID(5)DMA1 STREAM5DMA1STM6_SID(6)DMA1 STREAM6DMA1STM7_SID(7)DMA1 STREAM7DMA1STM0_SID(8+0)
DMA1 STREAM0DMA1STM1_SID(8+1)
DMA1 STREAM1DMA1STM1_SID(8+1)
DMA1 STREAM1DMA1STM3_SID(8+3)
DMA1 STREAM3DMA1STM4_SID(8+4)
DMA1 STREAM4DMA1STM5_SID(8+5)
DMA1 STREAM5DMA1STM6_SID(8+6)
DMA1 STREAM6DMA1STM7_SID(8+7)
DMA1 STREAM7
表 4.1.4.17 sdid 設定値
STM31L4xx/STM31F0xx/STM31L0xx ではチャネル ID を使用する。この値は初期化時 cbase より自動設定される。
定義

DMA1CH1_ID
DMA1CH1_ID
DMA1CH3_ID
DMA1CH4_ID
DMA1CH5_ID
DMA1CH6_ID
DMA1CH7_ID
DMA1CH1_ID
DMA1CH1_ID
DMA1CH3_ID
DMA1CH4_ID
DMA1CH5_ID
DMA1CH6_ID
DMA1CH7_ID
表 4.1.4.18 chid 設定値

値

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

内容

DMA1 CHANNEL1
DMA1 CHANNEL1
DMA1 CHANNEL3
DMA1 CHANNEL4
DMA1 CHANNEL5
DMA1 CHANNEL6
DMA1 CHANNEL7
DMA1 CHANNEL1
DMA1 CHANNEL1
DMA1 CHANNEL3
DMA1 CHANNEL4
DMA1 CHANNEL5
DMA1 CHANNEL6
DMA1 CHANNEL7② xfercallback
DMA Mem0 転送終了時のコールバック関数③ xferhalfcallback

10

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
表 4.1.4.19 ErrorCode 設定値

内容0x00000001
0x00000001
0x00000004
0x00000008
0x00000100

DMA BUSY 状態
DMA Mem0 half 転送終了
DMA Mem1 half 転送終了
DMA Mem0 成功終了
DMA エラー終了⑦ 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
uint31_t SrcAddr
uint31_t DstAddr
uint31_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 設定関数

4.1.4.3

フローチャート

DMA 処理は初期化と転送に分けられる。STM31 の場合、DMA は２つ用意されており、各 DMA に８つまたは７つのチャネルが割り当てられている。DMA を使用するペレフェラルごとに、どの DMAのどのチャネルを使用するかはハード的に決められている。
初期化のフローチャートを図 4.1.4.3.1 に示す。まず、静的 API を用いて DMA 割込みを設定する。
上記の通り、DMA 1×チャネル 8 = 16（または 7 = 14）の割込みが設定可能となる。割込みハンドラ
は割込みサービスルーチン（stream_dma_isr/channel_dma_isr）を使用する。割込みサービスルーチ

11

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

11

図 4.1.4.3.1 DMA 転送開始

4.1.5 WATCH DOG
WATCH DOG はシステムに異常が発生した場合、リセットを行う機能である。システムは WATCH
DOG TIMER を起動し、一定周期でタイマーのリセットを行うことにより WATCH DOG に正常動作を通知する。単一の Window WATCH DOG 機能を持ち、このドライバは Window WATCH DOG Timerの制御を行う。
注意：この機能を使用するには、1018 年 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
1
3

Window
uint31_t
ダウンカウンタのコンペア値(0x40～0x7F)
Counteruint31_t
ダウンカウンタの初期値(0x40～0x7F)
MCounteruint31_t
ダウンカウンタ拡張カウント
表 4.1.5.1.1 WATCH DOG コンフィギュレーション型

13

4.1.5.2

インターフェイス仕様

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

wdog_init

ER

引数

ID portid
WDOG_Init_t *pini
wdog_deinitER
ID portid
wdog_resetER
ID portid
表 4.1.5.1.1 WATCH DOG ドライバ関数

機能

備考

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

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

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

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

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

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

14

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

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

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

項目

1
1
3
4
5
6
7
8
9
10

ClockSpeed
uint31_t
通信クロックスピード(bps)
DutyCycle
uint31_t
ディーティサイクル設定
OwnAddress1
uint31_t
スレーブアドレス１(スレーブの場合のみ)
AddressingMode
uint31_t
アドレスモード(7bit or 10bit)
DualAddressModeuint31_t
1 つのスレーブアドレスを持つかの設定(スレーブの場合のみ)
OwnAddress1
uint31_t
スレーブアドレス２(スレーブの場合のみ)
GenealCallModeuint31_t
ジェネラルコールモード設定
NoStretchModeuint31_t
ノースストレッジモード設定
semid
int
通信用セマフォ ID（0 でセマフォなし）
smlockint
排他制御用セマフォ ID(0 で排他制御なし)
表 4.1.1.1.1 STM31F4xx I1C コンフィギュレーション型

型

番号

項目

1
1
3
4
5
6
7
8
9

Timinguint31_t
通信クロックタイミング設定
OwnAddress1
uint31_t
スレーブアドレス１(スレーブの場合のみ)
AddressingMode
uint31_t
アドレスモード(7bit or 10bit)
DualAddressModeuint31_t
1 つのスレーブアドレスを持つかの設定(スレーブの場合のみ)
OwnAddress1
uint31_t
スレーブアドレス２(スレーブの場合のみ)
GenealCallModeuint31_t
ジェネラルコールモード設定
NoStretchModeuint31_t
ノースストレッジモード設定
semid
int
通信用セマフォ ID（0 でセマフォなし）
smlockint
排他制御用セマフォ ID(0 で排他制御なし)
表 4.1.1.1.1 STM31F7xx I1C コンフィギュレーション型

型

機能

機能

15

番号

項目

1
1
3
4
5
6
7
8
9
10

Timinguint31_t
通信クロックタイミング設定
OwnAddress1
uint31_t
スレーブアドレス１(スレーブの場合のみ)
AddressingMode
uint31_t
アドレスモード(7bit or 10bit)
DualAddressModeuint31_t
1 つのスレーブアドレスを持つかの設定(スレーブの場合のみ)
OwnAddress1Masks uint31_t
スレーブアドレス２のマスク設定
OwnAddress1
uint31_t
スレーブアドレス２(スレーブの場合のみ)
GenealCallModeuint31_t
ジェネラルコールモード設定
NoStretchModeuint31_t
ノースストレッジモード設定
semid
int
通信用セマフォ ID（0 でセマフォなし）
smlockint
排他制御用セマフォ ID(0 で排他制御なし)
表 4.1.1.1.3 STM31F0xx/STM31L0xx/STML4xx I1C コンフィギュレーション型

型

機能

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

項目

1
1
3
4
5

base
Init
pBuffPtr
XferSize
XferCount

6
7
8
9
10
11

型

機能

uint31_t
I1C ベースアドレス
I1C_Init_t
I1C コンフィギュレーション型
uint8_t *通信データ領域へのポインタ
uint16_t
通信バイト数
volatile
通信済みバイト数
uint16_t
writecallback
void (*)()
送信終了コールバック
readcallback
void (*)()
受信終了コールバック
errorcallback
void (*)()
エラーコールバック
i1cid
ID
I1C ポート ID
statusvolatile
I1C ドライバの状態
uint31_t
ErrorCodevolatile
I1C エラーコード
uint31_t
表 4.1.1.1.4 I1C ハンドラ型(STM31F4xx/STM31F7xx)

番号

項目

型

機能

1
1
3
4
5
6

base
Init
pBuffPtr
XferOptions
XferSize
XferCount

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

7

XferCount1

8910AddrEventCountwritecallback
readcallback

uint31_t
I1C_Init_t
uint8_t *uint31_t
uint16_t
volatile
uint16_t
volatile
uint16_t
uint31_t
void (*)()
void (*)()

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

16

11
11
13
14
15
16

①

listencallbak
addrcallback
errorcallback
i1cid
statusvoid (*)()
LISTEN コールバック（スレーブ専用）
void (*)()
ADDR コールバック（スレーブ専用）
void (*)()
エラーコールバックID
I1C ポート ID
volatile
I1C ドライバの状態
uint31_t
ErrorCodevolatile
I1C エラーコード
uint31_t
表 4.1.1.1.5 I1C ハンドラ型(STM31F0xx/STM31L0xx/STM31L4xx)

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

値

内容

I1C_DUTYCYCLE_1
0x00000000
I1C_DUTYCYCLE_16_9
I1C_CCR_DUTY
表 4.1.1.1.6 DutyCycle 設定値②

AddressingMode
I1C のアドレッシング・モード、STM31F4xx と STM31F7xx では値が異なる。
定義

値(31f4xx)

I1C_ADDRESSINGMODE_7BIT0x00004000
I1C_ADDRESSINGMODE_10BIT
0x0000C000
表 4.1.1.1.7 AddressingMode 設定値

内容

7 ビットモード
10 ビットモード③ DualAddressMode
デュアルアドレスモード設定、STM31F4xx と STM31F746 では値が異なる。
定義

値(31f4xx)

内容

I1C_DUALADDRESS_DISABLE
0x00000000
I1C_DUALADDRESS_ENABLE
I1C_OAR1_ENDUAL
表 4.1.1.1.8 DualAddressMode 設定値

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

値(31f4xx)

I1C_GENERALCALL_DISABLE
0x00000000
I1C_GENERALCALL_ENABLE
I1C_CR1_ENGC
表 4.1.1.1.9 GeneralCallMode 設定値

内容

ジェネラルコールモード無効ジェネラルコールモード有効⑤ NoStretchMode
ノースストレッジモード設定、STM31F4xx と STM31F746 では値が異なる。
定義

値

I1C_NOSTRETCH_DISABLE
0x00000000
I1C_NOSTRETCH_ENABLE
I1C_CR1_NOSTRETCH
表 4.1.1.1.10 NoStretchMode 設定値

内容

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

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

17

関数名

型

引数

機能

i1c_init

I1C_Handler*

ID portid
I1C_Init_t *ii1ci1c_deinit
i1c_slavewriteERER

i1c_slavereadER

i1c_memwriteER

i1c_memreadER

i1c_ev_handler
i1c_er_handler
i1c_ev_isr

void
void
void

I1C_Handler* hi1c
I1C_Handler* hi1c
uint8_t *pData
uint16_t Size
I1C_Handler* hi1c
uint8_t *pData
uint16_t Size
I1C_Handler* hi1c
uint16_t DevAddr
uint16_t MemAddr
uint16_t MemAddSize
uint8_t *pData
uint16_t Size
I1C_Handler* hi1c
uint16_t DevAddr
uint16_t MemAddr
uint16_t MemAddSize
uint8_t *pData
uint16_t Size
I1C_Handler* hi1c
I1C_Handler* hi1c
intptr_t exinf

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

i1c_er_isr
void
intptr_t exinf
i1c_isrvoid
intptr_t exinf
表 4.1.1.1.1 I1C ドライバ関数

備考

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

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

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

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

F7/F4
F7/F4
F0/L0

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

18

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

値

I1C_ERROR_NONE
0x00000000
I1C_ERROR_BERR
0x00000001
I1C_ERROR_ARLO
0x00000001
I1C_ERROR_AF
0x00000004
I1C_ERROR_OVR
0x00000008
I1C_ERROR_DMA
0x00000010
I1C_ERROR_TIMEOUT
0x00000010
I1C_ERROR_SIZE
0x00000040
表 4.1.1.3.1 ErrorCode の内容

内容

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

図 4.1.1.3.3 I1C 受信フローチャート

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

30

④ SS

スレーブのセレクト信号

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

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

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

項目

型

機能

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

Mode
Direction
DataSize
CLKPolarity
CLKPhase
NSS
Prescaler
SignBitTIModeCRC
CRCPolynoial
semid
smlockuint31_t
uint31_t
uint31_t
uint31_t
uint31_t
uint31_t
uint31_t
uint31_t
uint31_t
uint31_t
uint31_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.1.3.1.1 STM31F4xx/STM31L0xx SPI コンフィギュレーション型
番号

項目

型

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

Mode
uint31_t
SPI マスタースレーブ設定
Direction
uint31_t
SPI 転送方向
DataSizeuint31_t
SPI 転送データサイズ
CLKPolarity
uint31_t
SPI 転送クロックの極性
CLKPhaseuint31_t
SPI クロック位相
NSS
uint31_t
SPI NSS
Prescaler
uint31_t
SPI クロック分周設定
SignBituint31_t
SPI MSB/LSB 設定
TIModeuint31_t
SPI TI モード
CRC
uint31_t
SPI CRC 演算設定
CRCPolynoial
uint31_t
SPI CRC 多項式設定
CRCLength
uint31_t
SPI CRC 長
GpioCLKPull
int31_t
SPI クロックの Pull 属性を指定(*)
GpioDataPull
int31_t
SPI データの Pull 属性を指定(*)
TxDMAChannel(Stream) int31_t
SPI の TX-DMA のチャネルを指定(*)
RxDMAChannel(Stream) int31_t
SPI の RX-DMA のチャネルを指定(*)
semid
int
通信用セマフォ ID（0 でセマフォなし）
smlockint
排他制御用セマフォ ID(0 で排他制御なし)
表 4.1.3.1.1 STM31F7xx SPI コンフィギュレーション型(*STM31H7xx/STM31G4xx のみ)

番号

項目

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

Mode
uint31_t
SPI マスタースレーブ設定
Direction
uint31_t
SPI 転送方向
DataSizeuint31_t
SPI 転送データサイズ
CLKPolarity
uint31_t
SPI 転送クロックの極性
CLKPhaseuint31_t
SPI クロック位相
NSS
uint31_t
SPI NSS
Prescaler
uint31_t
SPI クロック分周設定
SignBituint31_t
SPI MSB/LSB 設定
TIModeuint31_t
SPI TI モード
CRC
uint31_t
SPI CRC 演算設定
CRCPolynoial
uint31_t
SPI CRC 多項式設定
CRCLength
uint31_t
SPI CRC 長
NSSPMode
uint31_t
SPI NSSP モード
semid
int
通信用セマフォ ID（0 でセマフォなし）
smlockint
排他制御用セマフォ ID(0 で排他制御なし)
表 4.1.3.1.3 STM31F0xx/STM31L4xx SPI コンフィギュレーション型

型

機能

機能

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

項目

型

機能

1

base

uint31_t

SPI ベースアドレス

31

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

①

Init
pTxBuffPtr
TxXferSize
TxXferCount
pRxBuffPtr
RxXferSize
RxXferCount
hdmatxhdmarxxmode
statusSPI_Init_t
uint8_t *uint16_t
uint16_t
uint8_t *uint16_t
uint16_t
DMA_Handle_t*
DMA_Handle_t*volatile
uint31_t
ErrorCodevolatile
uint31_t
表 4.1.3.1.4 SPI ハンドラ型

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

Mode
SPI のモード設定。
定義

値

内容

SPI_MODE_SLAVE
0x00000000
SPI_MODE_MASTERSPI_CR1_MSTR|SPI_CR1_SSI
表 4.1.3.1.5 Mode 設定値

スレーブモード
マスターモード② Direction
SPI 通信方向設定のモード設定。
定義

値

SPI_DIRECTION_1LINES
0x00000000
SPI_DIRECTION_1LINES_RXONLY SPI_CR1_RXONLYSPI_DIRECTION_1LINESPI_CR1_BIDIMODE
表 4.1.3.1.6 Direction 設定値

内容

２ラインモード
２ライン受信のみ
片方向モード③ DataSize
SPI データ転送ビットサイズ、STM31F4xx と STM31F746 で設定値が異なる。
定義

値(STM31F4xx)

SPI_DATASIZE_8BIT
0x00000000
SPI_DATASIZE_16BITSPI_CR1_DFF
表 4.1.3.1.7 Direction 設定値

内容

データサイズ８ビット
データサイズ１６ビット④ CLKPolarity
SPI 転送クロック極性定義。
定義

値

SPI_POLARITY_LOW
0x00000000
SPI_POLARITY_HIGH
SPI_CR1_CPOL
表 4.1.3.1.8 CLKPolarity 設定値

内容

極性 LOW
極性 HIGH⑤ CLKPhase
SPI 転送クロック位相定義。
定義

値

SPI_PHASE_1EDGE
0x00000000
SPI_PHASE_1EDGE
SPI_CR1_CPHA
表 4.1.3.1.9 CLKPhase 設定値

内容

前縁ラッチ
後縁ラッチ

⑥ NSS

33

SPI NSS 定義。
定義

値

内容

SPI_NSS_SOFT
SPI_CR1_SSM
SPI_NSS_HARD_INPUT
0x00000000
SPI_NSS_HARD_OUTPUT
0x00040000
表 4.1.3.1.10 NSS 設定値⑦ Prescaler
SPI クロック分周比設定値。
定義

値

SPI_BAUDRATEPRESCALER_1
0x00000000
SPI_BAUDRATEPRESCALER_4
0x00000008
SPI_BAUDRATEPRESCALER_8
0x00000010
SPI_BAUDRATEPRESCALER_16
0x00000018
SPI_BAUDRATEPRESCALER_31
0x00000010
SPI_BAUDRATEPRESCALER_64
0x00000018
SPI_BAUDRATEPRESCALER_118 0x00000030
SPI_BAUDRATEPRESCALER_156 0x00000038
表 4.1.3.1.11 Prescaler 設定値

内容

1 分周
4 分周
8 分周
16 分周
31 分周
64 分周
118 分周156 分周⑧ SignBit
SPI データ MSB/LSB 設定値。
定義

値

SPI_DATA_MSB
0x00000000
SPI_DATA_LSB
SPI_CR1_LSBFIRST
表 4.1.3.1.11 SignBit 設定値

内容

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

⑨ TIMode
SPI NSS 定義。
定義

値

SPI_TIMODE_DISABLE
0x00000000
SPI_TIMODE_ENABLE
SPI_CR1_FRF
表 4.1.3.1.13 TIMode 設定値

内容

TI モード無効
TI モード有効⑩ CRC
SPI 自動 CRC 設定。
定義

値

SPI_CRC_DISABLE
0x00000000
SPI_CRC_ENABLE
SPI_CR1_CRCEN
表 4.1.3.1.14 CRC 設定値

内容

自動 CRC 無効
自動 CRC 有効⑪ CRCLength
SPI CRC 長設定、STM31F746 のみ。
定義

値

SPI_CRC_LENGTH_DATASIZE 0x00000000
SPI_CRC_LENGTH_8BIT
0x00000001
SPI_CRC_LENGTH_16BIT
0x00000001
表 4.1.3.1.15 CRCLength 設定値

内容

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

ならない。
関数名

型

引数

機能

spi_init

SPI_Handler*

ID portid
SPI_Init_t *spii

spi_deinit
spi_transmit

ER
ER

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

SPI_Handler* hspi
SPI_Handler* hspi
uint8_t *pdata
uint16_t length
spi_receiveER
SPI_Handler* hspi
uint8_t *pdata
uint16_t length
spi_transrecv
ER
SPI_Handler* hspi
uint8_t *ptxData
uint8_t *prxData
uint16_t length
spi_waitER
SPI_Handler* hspi
spi_handler
void
SPI_Handler* hspi
spi_isrvoid
intptr_t exinf
表 4.1.3.1.1 SPI ドライバ関数

備考

SPI 受信を行う

SPI 送受信を行う

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

4.2.3.3 フローチャート
SPI ドライバは、必ず送受信とも DMA を使用するように設計しています。スレーブの機能はありません。SPI の初期設定は、spi_init 関数を指定して対象ポート番号と初期設定したコンフィギュレーシ
ョン構造体のポインタを指定します。ペリフェラルには受信のみ、送信のみ、送受信があり、それぞれの転送関数を用意しています。実際はほとんどの場合、spi_transsrev ですべての転送を行えます。V1.1.0
では転送の終了待ち用に spi_wait 関数を呼び出し関数内で終了待ちを必要があります。V1.1.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.1.3.3.1 に SPI の初期化フローチャートを記載します。SPI 割込み、DMA 割込み、通信と排他制
御用セマフォの静的 API を用いて登録します。SS ポートの管理は SPI ドライバでは行わないため、複数のスレーブがある場合、また、スレーブ自体で SS 信号を要求している場合、SS ポートの GPIO 初期
化処理を行わなければならない。

35

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

定義

値

SPI_ERROR_NONE
0x00000000
SPI_ERROR_MODF
0x00000001
SPI_ERROR_CRC
0x00000001
SPI_ERROR_OVR
0x00000004
SPI_ERROR_FRE
0x00000008
SPI_ERROR_DMA
0x00000010
SPI_ERROR_TIMEOUT
0x00000010
表 4.1.3.3.1 ErrorCode の内容

内容

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

36

図 4.1.3.3.1 SPI 送受信フローチャート

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

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

項目

型

機能

1
1
3
4
5
6

ClockPrescaler
Resolution
DataAlign
ScanConvMode
EOCSelection
ContinuousConvModeuint31_t
uint31_t
uint31_t
uint31_t
uint31_t
uint31_t

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

37

7
8
9
10
11
11
13

DMAContinuousRequests
NumConversion
DiscontinuousConvMode
NumDiscConversion
ExternalTrigConv
ExternalTrigConvEdge
DMAChannel(Stream)

uint31_t
uint31_t
uint31_t
uint31_t
uint31_t
uint31_t
int31_t

番号

項目

型

1
1
3
4
5

Channeluint31_t
Rank
uint31_t
SamplingTime
uint31_t
GpioBaseuint31_t
GpioPinuint31_t
表 4.1.4.1.1 ADC チャネル設定型

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

番号

項目

機能

1
1
3
4
5

WatchdogMode
uint31_t
ADC アナログウォッチドッグモード
HighThresholduint31_t
ADC スレッシュホールド上限値
LowThresholduint31_t
ADC スレッシュホールド下限値
Channeluint31_t
ADC 対応チャネル番号
ITModeuint31_t
ADC アナログウォッチドック割込み設定
表 4.1.4.1.1 ADC ウォッチドック設定型

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

型

番号

項目

型

機能

1
1
3
4
5
6
7
8
9
10

base
uint31_t
Init
ADC_Init_t
NumCurrentConversionRank volatile uint31_t
hdmarxDMA_Handle_t*xfercallback
void (*)()
xferhalfcallback
void (*)()
outofwincallback
void (*)()
errorcallback
void (*)()
statusvolatile uint31_t
ErrorCodevolatile uint31_t
表 4.1.4.1.4 ADC ハンドラ型

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

値

ADC_CLOCK_SYNC_PCLK_DIV1 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.1.4.1.5 ClockPrescaler 設定値

内容

1 分周
4 分周
6 分周
8 分周

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

ADC_RESOLUTION_11B

値

0x00000000

内容

11bit

38

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

10bit
8bit
6bit

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

値

内容

ADC_DATAALIGN_RIGHT
0x00000000
ADC_DATAALIGN_LEFT
ADC_CR1_ALIGN
表 4.1.4.1.7 DataAlign 設定値④ ScanConvMode
ADC スキャンモード設定。
値

内容

ADC_SCANMODE_DISABLE
0x00000000
ADC_SCANMODE_ENABLE
ADC_CR1_SCAN
表 4.1.4.1.8 ScanConvMode 設定値

定義

無効
有効

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

内容

ADC_EOC_SEQ_DISABLE
0x00000000
ADC_EOC_SEQ_ENABLE
ADC_CR1_EOCS
表 4.1.4.1.9 EOCSelection 設定値

定義

無効
有効

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

内容

ADC_CONTINUOUS_DISABLE 0x00000000
ADC_CONTINUOUS_ENABLE ADC_CR1_CONT
表 4.1.4.1.10 ContinuousConvMode 設定値

定義

無効
有効

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

値

ADC_DMACONTINUOUS_DISABLE
0x00000000
ADC_DMACONTINUOUS_ENABLE
ADC_CR1_DDS
ADC_DMACONTINUOUS_ENABLE1
ADC_CR1_DDS+1<<31
表 4.1.4.1.11 DMAContinuousRequests 設定値

内容

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

値

内容

ADC_DISCONTINUOUS_DISABLE
0x00000000
ADC_DISCONTINUOUS_ENABLE
ADC_CR1_DISCEN
表 4.1.4.1.11 DiscontinuousConvMode 設定値

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

ADC_EXTERNALTRIGCONV_T1_CC1
ADC_EXTERNALTRIGCONV_T1_CC1

値0x00000000
ADC_CR1_EXTSEL_0

内容

T1 CC1T1 CC139

ADC_EXTERNALTRIGCONV_T1_CC3
ADC_EXTERNALTRIGCONV_T1_CC1

ADC_CR1_EXTSEL_1
ADC_CR1_EXTSEL_1 |ADC_CR1_EXTSEL_0
ADC_EXTERNALTRIGCONV_T1_CC3
ADC_CR1_EXTSEL_1
ADC_EXTERNALTRIGCONV_T1_CC4
ADC_CR1_EXTSEL_1 |ADC_CR1_EXTSEL_0
ADC_EXTERNALTRIGCONV_T1_TRGO ADC_CR1_EXTSEL_1 |ADC_CR1_EXTSEL_1
ADC_EXTERNALTRIGCONV_T3_CC1
ADC_CR1_EXTSEL_1 |ADC_CR1_EXTSEL_1 |ADC_CR1_EXTSEL_0
ADC_EXTERNALTRIGCONV_T3_TRGO ADC_CR1_EXTSEL_3
ADC_EXTERNALTRIGCONV_T4_CC4
ADC_CR1_EXTSEL_3 |ADC_CR1_EXTSEL_0
ADC_EXTERNALTRIGCONV_T5_CC1
ADC_CR1_EXTSEL_3 |ADC_CR1_EXTSEL_1
ADC_EXTERNALTRIGCONV_T5_CC1
ADC_CR1_EXTSEL_3 |ADC_CR1_EXTSEL_1 |ADC_CR1_EXTSEL_0
ADC_EXTERNALTRIGCONV_T5_CC3
ADC_CR1_EXTSEL_3 |ADC_CR1_EXTSEL_1
ADC_EXTERNALTRIGCONV_T8_CC1
ADC_CR1_EXTSEL_3 |ADC_CR1_EXTSEL_1 |ADC_CR1_EXTSEL_0
ADC_EXTERNALTRIGCONV_T8_TRGO ADC_CR1_EXTSEL_3 |ADC_CR1_EXTSEL_1 |ADC_CR1_EXTSEL_1
ADC_EXTERNALTRIGCONV_Ext_IT11 ADC_CR1_EXTSELADC_SOFTWARE_STARTADC_CR1_EXTSEL+1
表 4.1.4.1.13 ExternalTrigConv 設定値

T1 CC3T1 CC1T1 CC3T1 CC4
T1 TRGOT3 CC1T3 TRGO
T4 CC4T5 CC1
T5 CC1

T5 CC3
T8 CC1

T8 TRGO外部 IT11
ソフトトリガ

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

値

ADC_EXTERNALTRIGCONVEDGE_NONE
ADC_EXTERNALTRIGCONVEDGE_RISING
ADC_EXTERNALTRIGCONVEDGE_FALLING
ADC_EXTERNALTRIGCONVEDGE_RISINGFALLING
表 4.1.4.1.14 ExternalTrigConvEdge 設定値

内容0x00000000
ADC_CR1_EXTEN_0
ADC_CR1_EXTEN_1
ADC_CR1_EXTEN

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

値

ADC_CHANNEL_0
ADC_CHANNEL_1
ADC_CHANNEL_1
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_1
ADC_CR1_AWDCH_1 | ADC_CR1_AWDCH_0
ADC_CR1_AWDCH_1 | ADC_CR1_AWDCH_1
ADC_CR1_AWDCH_1 | 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チャネル 1チャネル 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_11
ADC_CR1_AWDCH_3 | ADC_CR1_AWDCH_1
ADC_CHANNEL_13
ADC_CR1_AWDCH_3 | ADC_CR1_AWDCH_1 |ADC_CR1_AWDCH_0
ADC_CHANNEL_14
ADC_CR1_AWDCH_3 | ADC_CR1_AWDCH_1 |ADC_CR1_AWDCH_1
ADC_CHANNEL_15
ADC_CR1_AWDCH_3 | ADC_CR1_AWDCH_1 |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.1.4.1.15 Channel 設定値

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

値

内容

ADC_SAMPLETIME_3CYCLES
ADC_SAMPLETIME_15CYCLES
ADC_SAMPLETIME_18CYCLES
ADC_SAMPLETIME_56CYCLES

0x00000000
ADC_SMPR1_SMP10_0
ADC_SMPR1_SMP10_1
ADC_SMPR1_SMP10_0 |ADC_SMPR1_SMP10_1
ADC_SAMPLETIME_84CYCLES
ADC_SMPR1_SMP10_1
ADC_SAMPLETIME_111CYCLES
ADC_SMPR1_SMP10_1 |ADC_SMPR1_SMP10_0
ADC_SAMPLETIME_144CYCLES
ADC_SMPR1_SMP10_1 |ADC_SMPR1_SMP10_1
ADC_SAMPLETIME_480CYCLES
ADC_SMPR1_SMP10
表 4.1.4.1.16 SamplingTime 設定値⑬ WatchdogMode
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

3 サイクル
15 サイクル18 サイクル56 サイクル
84 サイクル111 サイクル
144 サイクル
480 サイクル

値

内容

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.1.4.1.17 WatchdogMode 設定値⑭ ITMode
ADC アナログウォッチドック割込みモード設定。
定義

ADC_ANALOGWATCHDOG_ITMODE_DISABLE
ADC_ANALOGWATCHDOG_ITMODE_ENABLE
表 4.1.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

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

ADC_Handler* hadc
ADC_Handler* hadc
ADC_Handler* hadc
ADC_Handler* hadc
uint31_t *pdata
uint31_t length
adc_end_dma
ER
ADC_Handler* hadc
adc_setupchannel
ER
ADC_Handler* hadc
ADC_ChannelConf_t*
sConfig
adc_setupwatchdoc ER
ADC_Handler* hadc
ADC_AnalogWDGConf_t*
AnalogWDGConfig
adc_handler
void
ADC_Handler* hadc
adc_int_handler
void
void
表 4.1.4.1.1 ADC ドライバ関数

備考

ADC DMA モード終了
ADC チャネル設定

ADC ウォッチドック設定

ADC 割込みハンドラ関数
ADC 割込みハンドラ

4.2.4.3 フローチャート
実行手順に影響を与えるモードは、以下の４つである。
(1) ScanConvMode
複数のチャネルが設定された場合、自動的にチャネルを変えながら AD 変換を行う設定(1) ContinuousConvMode
AD 変換回数を指定する。
回数は NumConversion にセットする。このモードを無効にした場合は single
mode になり、一度の AD 変換で終了。
Singe mode で NumConversion を設定した場合、割込みの停止回数設定となる。
(3) DiscontinuousConvMode
外部トリガの後、AD 変換を停止するチャネルの数を設定する。
(4) ExternalTrigConv
スキャンのタイミングを外部トリガで設定する。
ADC の複数機能を設定した場合、複雑なフローチャートのなるため、DMA を使用して１チャネルを１回変換するフローチャートを示す。
ADC の初期化(図 4.1.4.3.1)は、adc_init 関数にて ADC コントローラの初期化を行い。そのあと、ADC
チャネルの設定を行う。ADC 変換の実行(図 4.1.4.3.1)は adc_start_dma で起動、ハンドラ内の statusの値が ADC_STATUS_BUSY の間は実行中、終了すると ADC_STATUS_BUSY 以外の値に変わる。
ADC_STATUS_READY ならば正常終了であり、それ以外の値はエラーを示す。Adc_end_dma 関数で処理の停止を指定する。

41

図 4.1.4.3.1 ADC の初期設定

図 4.1.4.3.1 ADC 変換の実行

43

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

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

項目

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

manuf_id
uint31_t
Quad SPI フラッシュメモリのマニュファクチャ ID
type_capacity
uint31_t
Quad SPI フラッシュメモリのキャパシティタイプ
clockprescaler
uint31_t
AHB に対するプリスケーラ
fifothresholduint31_t
FIFO のスレッシュホールド値
sampleshift
uint31_t
chipselecthightime
uint31_t
CHIP Select High Timeclockmode
uint31_t
クロックモード
flashid
uint31_t
FLASH ID
dualflashuint31_t
DUAL FLASH モード
ddrmodeuint31_t
DDR モード
ddrholdhalfcycle
uint31_t
DDR ホールドのハーフサイクル設定
sioomode
uint31_t
スードモードaddr_size
uint31_t
アドレスサイズ設定
inst_typeuint31_t
通常インストラクションのタイプ
inst_data_xfer_type
uint31_t
通常インストラクションの転送タイプ
read_op_code
uint31_t
READ 処理のオペコード
read_addr_xfer_type
uint31_t
READ 処理の転送アドレスタイプ
read_data_xfer_type
uint31_t
READ 処理の転送データタイプ
read_dummy_cycle
uint31_t
READ ダミーサイクル値
write_op_code
uint31_t
WRITE 処理のオペコード
write_addr_xfer_type
uint31_t
WRITE 処理の転送アドレスタイプ
write_data_xfer_type
uint31_t
WRITE 処理の転送データタイプ
write_dummy_cycle
uint31_t
WRITE ダミーサイクル
erase_countuint8_t
ERASE 処理の数
erase_size
uint31_t x 1 ERASE の領域サイズ
erase_cmds
uint8_t x 1
ERASE オペコード
erase_secor_idx
uint8_t
セクタ消去の番号
device_size
uint31_t
デバイスのバイトサイズ
init_func
ER (*)()
初期化関数
enable_write_func
ER (*)()ENABLE WRITE 関数
wait_func
ER (*)()ERASE/WRITE 待ち関数
friendly_nameconst charフラッシュメモリ名
表 4.1.5.1.1 QSPI コンフィギュレーション型

型

機能

番号

項目

型

機能

1
1
3
4
5

InstructionMode
Instruction
AddressMode
AddressSize
Address

uint31_t
uint31_t
uint31_t
uint31_t
uint31_t

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

44

6
7
8
9
10
11

AlternateByteModeuint31_t
AlternateBytesSize
uint31_t
AlternateBytes
uint31_t
DummyCycles
uint31_t
DataMode
uint31_t
NbDatauint31_t
表 4.1.5.1.1 QSPI コマンド生成型

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

番号

項目

機能

1
1
3
4
5
6

Match
uint31_t
マッチデータMask
uint31_t
マッチデータのマスク値
Interval
uint31_t
READ とオートマチックポーリング間のインターバル
StatusBytesSize
uint31_t
ステータスのバイト長
MatchModeuint31_t
マッチモードAutomatchStop
uint31_t
マッチ後の自動停止設定
表 4.1.4.1.3 QSPI オートポーリング型

型

番号

項目

型

機能

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

base
Init
pBuffPtr
XferSize
XferCounttimeoutcallback
errorcallback
istatus
timeout
semidstatuserrorcode

uint31_t
QSPI_Init_t
uint31_t *uint31_t
uint31_t
ER (*)()ER (*)()
uint31_t
uint31_t
int
uint31_t
volatile
uint31_t

QSPI ペリフェラルのベースアドレス
QSPI コンフィギュレーション設定パラメータ
データ転送領域のポインタ
指定転送サイズ
現在の転送データカウント
タイムアウト時のコールバック関数
エラーのコールバック関数
最後に発生した割込みステータスの値
デフォルトタイムアウト値(ms)
通信セマフォ ID
QSPI の状態
QSPI エラーコード

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

QSPI_SAMPLE_SHIFTING_NONE
QSPI_SAMPLE_SHIFTING_HALFCYCLE
表 4.1.5.1.5 sampleshift 設定値

値

内容0x00000000
QUADSPI_CR_SHIFT

シフトなし
1/1 クロックシフト② chipselecthightime
コマンド間の CS STAY HIGH 設定のクロックサイクルを設定。
定義

値

QSPI_CS_HIGH_TIME_1_CYCLE
0x00000000
QSPI_CS_HIGH_TIME_1_CYCLEQUADSPI_DCR_CSHT_0
QSPI_CS_HIGH_TIME_3_CYCLEQUADSPI_DCR_CSHT_1
QSPI_CS_HIGH_TIME_4_CYCLEQUADSPI_DCR_CSHT_0|QUADSPI_DCR_CSHT_1
QSPI_CS_HIGH_TIME_5_CYCLEQUADSPI_DCR_CSHT_1
QSPI_CS_HIGH_TIME_6_CYCLEQUADSPI_DCR_CSHT_1|QUADSPI_DCR_CSHT_0
QSPI_CS_HIGH_TIME_7_CYCLEQUADSPI_DCR_CSHT_1|QUADSPI_DCR_CSHT_1
QSPI_CS_HIGH_TIME_8_CYCLEQUADSPI_DCR_CSHT
表 4.1.5.1.6 chipselecthightime 設定値

内容

1cycle1cycle3cycle4cycle5cycle6cycle7cycle8cycle45

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

値

内容

QSPI_CLOCK_MODE_0
0x00000000
QSPI_CLOCK_MODE_3
QUADSPI_DCR_CKMODE
表 4.1.5.1.7 clockmode 設定値

CS 設定時 LOW
CS 設定時 HIGH に遷移④ flashselectFLASH 選択設定。
定義

値

内容

QSPI_FLASH_ID_1
0x00000000
QSPI_FLASH_ID_1
QUADSPI_CR_FSEL
表 4.1.5.1.8 flahselect 設定値

FLASH 1
FLASH 1

⑤ dualflashmode
Dual Flash モード設定。
定義

値

内容

QSPI_DUALFLASH_DISABLE
0x00000000
QSPI_DUALFLASH_ENABLEQUADSPI_CR_DFM
表 4.1.5.1.9 dualflashmode 設定値

無効
有効⑥ ddrmode
Double data rate mode 設定。
定義

値

内容

QSPI_DDR_MODE_DISABLE
0x00000000
QSPI_DDR_MODE_ENABLEQUADSPI_CCR_DDRM
表 4.1.5.1.10 ddrmode 設定値

無効
有効⑦ ddrholdhalfcycle
DDR モード時、データ出力デレィ設定。
定義

値

QSPI_DDR_HHC_ANALOG_DELAY
0x00000000
QSPI_DDR_HHC_HALF_CLK_DELAY QUADSPI_CCR_DHHC
表 4.1.5.1.11 ddrholdhalfcycle 設定値

内容

アナログデレィ
1/1 clock cycle⑧ sioomode
送信インストラクションモード設定。
定義

値

QSPI_SIOO_INST_EVERY_CMD

0x00000000

QSPI_SIOO_INST_ONLY_FIRST_CMD
表 4.1.5.1.11 sioomode 設定値

QUADSPI_CCR_SIOO

内容

すべての転送にインストラクショ
ン送信
転送の最初のみ⑨ AddressMode
コマンド生成、アドレスモード設定。
定義

値

QSPI_ADDRESS_NONE
0x00000000
QSPI_ADDRESS_1_LINEQUADSPI_CCR_IMODE_0
QSPI_ADDRESS_1_LINESQUADSPI_CCR_IMODE_1
QSPI_ADDRESS_4_LINESQUADSPI_CCR_IMODE
表 4.1.5.1.13 AddressMode 設定値

⑩

内容

なし
1 lne
1 lines
4 lines

AddressSize

46

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

値

内容

QSPI_ADDRESS_8_BITS
0x00000000
QSPI_ADDRESS_16_BITS
QUADSPI_CCR_ADSIZE_0
QSPI_ADDRESS_14_BITS
QUADSPI_CCR_ADSIZE_1
QSPI_ADDRESS_31_BITS
QUADSPI_CCR_ADSIZE
表 4.1.5.1.14 AddressSize 設定値

8 ビットアドレス
16 ビットアドレス
14 ビットアドレス
31 ビットアドレス⑪ InstructionMode
コマンド生成、インストラクションモード設定。
定義

値

内容

QSPI_INSTRUCTION_NONE
0x00000000
QSPI_INSTRUCTION_1_LINEQUADSPI_CCR_IMODE_0
QSPI_INSTRUCTION_1_LINESQUADSPI_CCR_IMODE_1
QSPI_INSTRUCTION_4_LINESQUADSPI_CCR_IMODE
表 4.1.5.1.15 InstructionMode 設定値

なし
1line
1lines4lines⑫
AlternateBytesMode
コマンド生成、アルタネートバイトモード設定。
定義

値

内容

QSPI_ALTERNATE_BYTES_NONE
0x00000000
QSPI_ALTERNATE_BYTES_1_LINEQUADSPI_CCR_ABMODE_0
QSPI_ALTERNATE_BYTES_1_LINES QUADSPI_CCR_ABMODE_1
QSPI_ALTERNATE_BYTES_4_LINES QUADSPI_CCR_ABMODE
表 4.1.5.1.16 AlternaleBytesMode 設定値

なし
1line
1lines4lines

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

値

内容

QSPI_DATA_NONE
0x00000000
QSPI_DATA_1_LINEQUADSPI_CCR_DMODE_0
QSPI_DATA_1_LINESQUADSPI_CCR_DMODE_1
QSPI_DATA_4_LINESQUADSPI_CCR_DMODE
表 4.1.5.1.17 DataMode 設定値

なし
1line
1lines4lines

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
uint31_t src
uint31_t size
QSPI_Handler* hspi
uint31_t dest
void *src

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

備考

QSPI INDIRECT WRITE

47

uint31_t size
QSPI_Handler* hqspi
uint31_t address
uint31_t size
qspi_erase_sector
ER
QSPI_Handler* hqspi
uint31_t address
qspi_direct_disable ER
QSPI_Handler* hqspi
qspi_direct_enable ER
QSPI_Handler* hspi
qspi_handler
void
QSPI_Handler* hspi
qspi_isrvoid
intptr_t exinf
表 4.1.5.1.1 QSPI ドライバ関数
qspi_eraseER

アドレス指定消去

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

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

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

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

項目

1
1
3
4
5
6
7
8
9

tm_secint
tm_minint
tm_hourint
tm_mdayint
tm_monint
tm_yearint
tm_wdayint
tm_ydayint
tm_isdstint
表 4.1.6.1.1 tm1 構造体

型

機能

番号

項目

型

機能

1

alarm

uint31_t

アラーム選択秒(0～59)分(1～60)時(0～13)
月の中の日
月
年(1970 を 0 とした年数)
曜日
年の中の日
夏時間：０以外の値

48

1
3
4
5
6

alarmmask
uint31_t
subsecondmask
uint31_t
dayselect
uint31_t
subsecnd
uint31_t
callback(*)(void)
表 4.1.6.1.1 RTC_Alarm 型

アラームマスク設定
アラームサブセコンドマスク
アラーム日付設定
アラームサブセコンド
アラームコールバック① alarm
アラームレジスタを指定する
定義

RTC_ALARM_A
RTC_ALARM_B
表 4.1.6.1.3 alarm 設定値

値

内容

RTC_CR_ALRAE
RTC_CR_ALRBE

アラームＡレジスタを指定
アラームＢレジスタを指定② dayselect
垂直同期極性設定をする。
定義

値

内容

ALARMDAYSEL_DATE
0x00000000
ALARMDAYSEL_WEEKDAY
0x40000000
表 4.1.6.1.4 dayselect 設定値

月中の日を指定
ウィークディを指定③ alarmmask
アラームのマスク設定を行う。
定義

値

内容

ALARMMASK_NONE
0x00000000
ALARMMASK_DATESELRTC_ALRMAR_MSK4
ALARMMASK_HOURS
RTC_ALRMAR_MSK3
ALARMMASK_MINUTES
RTC_ALRMAR_MSK1
ALARMMASK_SECONDS
RTC_ALRMAR_MSK1
表 4.1.6.1.5 alarmmask 設定値

マスクなし
日のアラームをマスク
時のアラームをマスク
分のアラームをマスク
秒のアラームをマスク④ subsecondmask
サブセコンドマスク設定をする。
定義

ALARMSSMASK_ALL
ALARMSSMASK_SS14_1
ALARMSSMASK_SS14_1
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_11
ALARMSSMASK_SS14_13
ALARMSSMASK_SS14
ALARMSSMASK_NONE

値

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

内容ｓ

サブセコンドとのマッチをしない
SS[0]がマッチでアラーム
SS[1:0]がマッチでアラーム
SS[1-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[11-0]がマッチでアラーム
SS[13-0]がマッチでアラーム
SS[14-0]がマッチでアラーム

49

表 4.1.6.1.6 subsecondmask 設定値

4.2.6.2

インターフェイス仕様

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

rtc_init
rtc_set_time
rtc_get_time
rtc_setalarm

void
ER
ER
ER

引数

intptr_exinf
struct tm1 *pt
struct tm1 *pt
RTC_alarm_t *parm
struct tm1 *ptm
rtc_stopalarmER
uint31_t Alarm
rtc_getalarm
ER
RTC_alarm_t *parm
struct tm1 *ptm
uint31_t Alarm
rtc_handler
void
void
表 4.1.6.1.1 RTC 設定関数

4.2.6.3

機能

備考

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

割込みハンドラ

設定手順

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

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.1.7.1.1 の USB OTG 初期設定定義型と、ハンドラ
として表 4.1.7.1.4 の USB OTG ハンドラ型を持つ。内部の型としてエンドポイントを管理するための表 4.1.7.1.1 のエンドポイント定義型と、ホストチャネルを管理するための表 4.1.7.1.3 のホストクラス
定義型をもつ。エンドポイントとホストクラス定義は、USB の上位層のモジュールで設定を行う必要がある。この実装では、Stm31Cube 中の USB ミドルウェアが設定を行っている。
初期設定定義型の有効無効設定は、1 が有効、0 が無効の設定となる。
番号

項目

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

usb_otg_mode
uint31_t
USB OTG の実行モード指定
dev_endpoints
uint31_t
デバイス用のエンドポイントの数(1-15)
host_channels
uint31_t
ホストチャネルの数(1-15)
speed
uint31_t
USB コアスピード
dma_enable
uint31_t
USB DMA 機能の有効無効設定
phy_itface
uint31_t
PHY の指定
sof_enable
uint31_t
デバイスモードでの SOF 割込みの有効無効設定
low_power_enable
uint31_t
LOW POWER モードの有効無効設定
lpm_enable
uint31_t
LPM 機能の有効無効設定
vbus_sessing_enable
uint31_t
VBUS のセンシング機能の有効無効設定
use_dedicated_ep1
uint31_t
エンドポイント 1 専用割込みの有効無効設定
use_external_vbus
uint31_t
外部 VBUS の有効無効設定
表 4.1.7.1.1 USB OTG 初期設定定義型

型

番号

項目

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

num
uint8_t
is_in
uint8_t : 1
is_stalluint8_t : 1
type
uint8_t : 1
data_pid_start
uint8_t : 1
even_off_frame
uint8_t : 1
tx_fifo_num
uint16_t
maxpacket
uint16_t
xfer_buff
uint8_t *dma_addr
uint31_t
xfer_lenuint31_t
xfer_countuint31_t
表 4.1.7.1.1 エンドポイント定義型

型

機能

機能

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

51

番号

項目

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

dev_addr
uint8_tch_numuint8_tep_numuint8_tep_is_in
uint8_t
speed
uint8_tdo_ping
uint8_tprocess_ping
uint8_tep_typeuint8_tmax_paket
uint16_t
data_pid
uint8_txfer_buff
uint8_t *xfer_lenuint31_t
xfer_countuint31_t
toggle_in
uint8_ttoggle_out
uint8_tdma_addr
uint31_t
err_countuint31_t
urb_state
uint8_t
state
uint8_t
表 4.1.7.1.1 ホストクラス定義型

型

機能

番号

項目

型

機能

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

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

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

15

devdataoutstagecallback

void (*)()

16

devdatainstagecallback

void (*)()

17
18
19
10
11
11
13
14
15

devsofcallback
devresetcallback
devsuspendcallback
devresumecallback
devisooutcallback
devisoincallback
devconnectcallback
devdisconnectcallback
devlpmcallback

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

USB-OTG ペリフェラルのベースアドレス
USB-OTG 初期化設定パラメータ
ホストチャネル領域
IN エンドポイント領域
OUT エンドポイント領域
セットアップパケット保存領域
BESL データの保存領域
LPM の状態
LPM 機能有効無効設定
ホスト用 SOF 割込みコールバック関数
ホストコネクト時コールバック関数
ホストディスコネクト時コールバック関数
ホスト URB 変更時コールバック関数
デバイスセットアップステージコールバッ
ク関数
デバイスデータアウトステージコールバッ
ク関数
デバイスデータインステージコールバック
関数
デバイス SOF 割込みコールバック関数
デバイスリセットコールバック関数
デバイスサスペンドコールバック関数
デバイスレジュームコールバック関数
デバイス ISOOUT コールバック関数
デバイス ISOIN コールバック関数
デバイスコネクトコールバック関数
デバイスディスコネクトコールバック関数
デバイス LPM コールバック関数

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

51

16
17

pHost
void *
pDev
void *
表 4.1.5.1.4 USB OTG ハンドラ型

上位ホストハンドラ格納領域
上位デバイスハンドラ格納領域② usb_otg_mode
USB OTG の設定モードを指定する。
定義

値

USB_OTG_MODE_DEVICE0
USB_OTG_MODE_HOST
1
USB_OTG_MODE_DRD1
表 4.1.7.1.5 usb_otg_mode 設定値

内容

USB DEVICE 固定
USB HOST 固定
OTG モード③ speed
USB の転送スピードを設定する。
定義

値

USB_SPEED_HIGH
0
USB_SPEED_FULL3
表 4.1.7.1.6 speed 設定値

内容

HIGH スピード指定
FULL スピード指定④ phy_inface
PHY 種別設定を行う。
定義

値

USB_PHY_ULPI
1
USB_PHY_EMBEDDED1
表 4.1.7.1.7 phy_inface 設定値

内容

ULPI-PHY
EMBEDDED-PHY

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_setcurrentmodeuint31_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
uint31_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
uint31_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.1.7.1.1 USB-OTG ドライバ関数

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

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

図 4.1.7.3.1 USB ホスト初期化(1) ホスト接続とエナミュネーション
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.1.7.3.1 接続処理

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

56

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

58

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

図 4.1.7.3.6 USB デバイスの切断

4.3 F7 Depend Driver
4.3.1 概要
F7 Depend Driver は、STM31F746 ハードウェア専用のデバイスドライバである。F7 専用ドライバ
として以下のドライバをサポートする。
(1) ltdc
ROCKTECH 4.3-inch 480x171 LCD-TFT 用デバイスドライバ(1) 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(1) 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)
出力は 14-bit RGB Parallel Pixel Output, 8 bits-per-pixel(RGB888)

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

項目

型

1
1
3
4

Blue
uint8_tGreen
uint8_tRed
uint8_t
Reserved
uint8_t
表 4.3.1.1.1 Color_t 型

番号

項目

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

HSPolaiity
uint31_t
VSPolarity
uint31_t
DEPolarity
uint31_t
PCPolarity
uint31_t
HorizontalSync
uint31_t
VerticalSync
uint31_t
AccumulatedHBP
uint31_t
AccumulatedVBP
uint31_t
AccumulatedActiveW uint31_t
AccumulatedActiveH uint31_t
TotalWidthuint31_t
TotalHeightuint31_t
Backcolor
Color_t
表 4.3.1.1.1 LTDC_Init_t 型

番号

項目

型

機能

1
1
3
4
5
6
7
8
9

WindowX0
WindowX1
WindowY0
WindowY1
PixelFormat
Alpha
Alpa0
BlendingFactor1
BlendingFactor1

uint31_t
uint31_t
uint31_t
uint31_t
uint31_t
uint31_t
uint31_t
uint31_t
uint31_t

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

型

機能

青色
緑色
赤色
リザーブ

機能

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

60

10
11
11
13

FBStartAddress
uint31_t
ビットマップメモリのスタートアドレス
ImageWidthuint31_t
イメージのピクセル数
ImageHeightuint31_t
イメージのピクセル高さ
Backcolor
Color_t
バックグラウンド色
表 4.3.1.1.3 LTDC_LayerCfg_t 型

番号

項目

1
1

Init
LTDC_Init_t
LayerCfg[MAX_LAYER] LTDC_LayerCfg_t
表 4.3.1.1.4 LTDC_Handle_t 型

型

機能

初期化型
レイヤ型

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

値

LTDC_HSPOLARITY_AL
0x00000000
LTDC_HSPOLARITY_AH
LTDC_GCR_HSPOL
表 4.3.1.1.5 HSPolerty 設定値

内容

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

値

LTDC_VSPOLARITY_AL
0x00000000
LTDC_VSPOLARITY_AH
LTDC_GCR_VSPOL
表 4.3.1.1.6 VSPolarity 設定値

内容

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

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

値

内容

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

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

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

値

内容

LTDC_PCPOLARITY_IPC
0x00000000
LTDC_PCPOLARITY_IIPC
LTDC_GCR_PCPOL
表 4.3.1.1.8 PCPolarity 設定値

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

値

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

内容

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

値

LTDC_BLENDING_FACTOR1_CA
0x00000005
LTDC_BLENDING_FACTOR1_PAxCA
0x00000007
表 4.3.1.1.10 BlendingFactor1 設定値

内容

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
uint31_t index
LTDC_handle_t *phandle
uint31_t Alphauint31_t index

オプション

ltdc_setaddress

ER

LTDC_handle_t *phandle
uint31_t Adress
uint31_t index

ltdc_setwindowsize

ER

LTDC_handle_t *phandle
uint31_t XSize
uint31_t YSize
uint31_t index

ltdc_setwindowpositionERltdc_configcolorkeying

ER

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

オプション

オプション

オプション

オプション

61

ltdc_enablecolorkeyingERltdc_disablecolorkeyingER

uint31_t index
LTDC_handle_t *phandle
uint31_t index
LTDC_handle_t *phandle
uint31_t index

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

オプション

オプション

表 4.3.1.1.1 LTDC 設定関数

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

項目

1
1
3
4
5
6
7
8
9

HSPolaiity
VSPolarity
DEPolarity
PCPolarity
HorizontalSync
VerticalSync
AccumulatedHBP
AccumulatedVBP
AccumulatedActiveW

10
11
11
13

設定値

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(1) - 1
RK043FN48H_WIDTH(480) + RK043FN48H_HSYNC
RK043FN48H_HBP - 1
AccumulatedActiveH RK043FN48H_HEIGHT(171) + RK043FN48H_VSYNC
RK043FN48H_VBP - 1
TotalWidth
RK043FN48H_WIDTH+
RK043FN48H_HSYNC
RK043FN48H_HBP + RK043FN48H_HFP(31) - 1
TotalHeight
RK043FN48H_HEIGHT+
RK043FN48H_VSYNC
RK043FN48H_VBP + RK043FN48H_VFP(1) - 1
Backcolor
オールゼロ
表 4.3.1.3.1 480x171LCD の LTDC_Init_t 型の設定値

番号

項目

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

WindowX0
0
WindowX1
RK043FN48H_WIDTH(480)WindowY0
0
WindowY1
RK043FN48H_HEIGHT(171)
PixelFormat
LTDC_PIXEL_FORMAT_ARGB8888
Alpha
155
Alpa0
0
BlendingFactor1
可変BlendingFactor1
可変FBStartAddress
メモリアドレス（可変）ImageWidth
RK043FN48H_WIDTHImageHeight
RK043FN48H_HEIGHT
Backcolor
オールゼロ
表 4.3.1.3.1 480x171LCD の LTDC_LayerCfg_t 型の設定値

+
+
+
+

機能

63

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

4.3.4 SDMMC
SDMMC(SD/SDIO/MMC card host interface)は SD カードメモリや SDIO とのインターフェイスを行うペリフェラルである。STM31F746 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.1 に SD カード情報を設定する SDMMC_CardInfo_t 型を定義す
る。
番号

項目

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

base
uint31_t
SDMMC レジスタベースアドレス
ClockModeuint31_t
指定クロックモード
BusWideuint31_t
指定バス幅
RetryCountuint31_t
リトライ回数cardtype
uint31_t
カード種類
RCA
uint31_t
RCA 値
CSD[4]
uint31_t
CSD 値
CID[4]
uint31_t
CID 値
statusvolatile uint31_t
転送状態
SdCmd
volatile uint31_t
転送指定コマンドhdmarxDMA_Handle_t * 受信用 DMA ハンドラ
hdmatxDMA_Handle_t * 送信用 DMA ハンドラ
表 4.3.4.1.1 SDMMC_Handle_t 型

型

番号

項目

1
1
3
4
5
6

capacity
uint64_t
容量(バイト)blocksize
uint31_t
ブロックサイズmaxsector
uint31_t
ブロックの数
RCA
uint16_t
SD RCA 値
cardtype
uint8_t
カード種類
statusuint8_t
ステータス
表 4.3.4.1.1 SDMMC_CardInfo_t 型

型

機能

機能

① ClockMode
クロックモードを設定する。
定義

値

SDMMC_TRANSFER_CLK_DIV
0x0
表 4.3.4.1.3 ClockMode 設定値

内容

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

値

内容

64

SDMMC_BUS_WIDE_1B
0x00000000
SDMMC_BUS_WIDE_4B
SDMMC_CLKCR_WIDBUS_0
SDMMC_BUS_WIDE_8B
SDMMC_CLKCR_WIDBUS_1
表 4.3.4.1.4 BusWidth 設定値

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

③ cardtype
カード情報取得後判定したカード種類
定義

値

SD_CARD_V11
0
SD_CARD_V10
1
SD_CARD_HC
1
MMC_CARD
3
SD_IO_CARD
4
HS_MM_CARD
5
SD_IO_COMBO_CARD
6
MMC_CARD_HC
7
表 4.3.4.1.5 cardtype 設定値

内容

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

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

値

E_SDCOM-80
E_SDCRC-81
E_SDECMD-81
E_SDVOL-83
E_SDTRS-84
表 4.3.4.1.6 エラーコード拡張

内容

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

4.3.4.2 インターフェイス仕様
SDMMC を設定するドライバ関数を以下に示す。ドライバは表 4.3.5.1.1 に示す基本動作を行うドラ
イバと、表 4.3.5.1.1 の 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
uint31_t *pbuff
uint31_t ReadAddr
uint31_t blocksize
uint31_t num
SDMMC_handle_t *hsd
uint31_t *pbuff

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

備考

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

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

uint31_t WriteAddr
uint31_t blocksize
uint31_t num
sdmmc_wait_transfar ER
SDMMC_handle_t *hsd
uint31_t Timeout
sdmmc_checkint
void
SDMMC_handle_t *hsd
表 4.3.4.1.1 SDMMC 基本ドライバ関数

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

関数名

型

引数

機能

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
uint31_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.1.1 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 カードのドライバは STM31F4xx の場合、SPI となる。SPI の場合は SPI 用にドライバを用いてSD カードの初期化やアクセスを行う。上位層が仮想関数を用いるのは、ドライバ関数を入れ替えれば上位層のプログラムを書き換えなくてもファイルシステムを処理させるためである。
メディアの初期化が終了したと、FATFs のドライバ層を経由して、メディアに対するブロック単位の
READ/WRITE と IO アクセスが発生する。図 4.3.5.3.1 に FATFs のドライバからのブロックリードのフローを示す。ブロックライトは実行関数を mci_wri_blk(sdmmc_block_write)に置き換えればよい。
なお、ブロックリード、ライトのバッファ領域のポインタが 4 バイトアラインとなっているが、FATFsのブロックリード、ライトドライバは 1 バイトアラインの領域にデータの読み書きを指定する。そのため、SDMMC ドライバのブロックリード、ライトは 1 バイトアラインの読み書きを有効にしている。

66

図 4.3.4.3.1 初期化フロー67

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

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

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

項目

型

機能

1
1

AudioMode
Synchrouint31_t
uint31_t

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

68

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

SynchroExt
uint31_t
OutputDrive
uint31_t
NoDivideruint31_t
FIFOThresholduint31_t
AudioFrequency
uint31_t
Mckdiv
uint31_t
MonoStereoMode
uint31_t
CompandingMode
uint31_t
TriSizeuint31_t
Protocoluint31_t
DataSizeuint31_t
FirstBit
uint31_t
ClockStrobing
uint31_t
FrameLength
uint31_t
ActiveFrameLength uint31_t
FSDefinition
uint31_t
FSPolarity
uint31_t
FSOffsetuint31_t
FirstBitOffset
uint31_t
SlotSizeuint31_t
SlotNumber
uint31_t
SlotActive
uint31_t
表 4.3.5.1.1 SAI_Init_t 型

番号

項目

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

base
uint31_t
pcb
AUDIO_PortControlBlock*
OutInitSAI_Init_t
InInitSAI_Init_t
pBuffPtr
uint8_t*
XferSizeuint16_t
XferCountuint16_t
hdmatxDMA_Handle_t *hdmarxDMA_Handle_t *audiomutecallback void(*)(Audio_Handle_t*)
audioerrorcallback void(*)(Audio_Handle_t*)transcallback
void(*)(Audio_Handle_t*)transhalfcallback
void(*)(Audio_Handle_t*)
recevcallback
void(*)(Audio_Handle_t*)
recvhalfcallbak
void(*)(Audio_Handle_t*)
errorcallback
void(*)(Audio_Handle_t*)status[1]volatile uint31_t
ErrorCodevolatile uint31_t
表 4.3.5.1.1 AUDIO_Handle_t 型

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

型

機能

SAI デバイスのベースアドレス
ハードウェア定義構造体へのポインタ
出力ブロック初期設定
入力ブロック初期設定
データ領域へのポインタ
データサイズ
送受信カウント
送信 DMA ハンドラへのポインタ
受信 DMA ハンドラへのポインタ
MUTE コールバック関数
割込みエラーコールバック関数
送信終了コールバック関数
ハーフ送信終了コールバック関数
受信終了コールバック関数
ハーフ受信終了コールバック関数
エラーコールバック関数
AUDIO ステータス
エラーコード① 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
0x00000000
SAI_SYNCHRONOUS
SAI_xCR1_SYNCEN_0
SAI_SYNCHRONOUS_EXT
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
表 4.3.5.1.5 SynchroExt 設定値

値0x00000000
0x00000001
0x00000001
0x00000004

内容

無効
IN 有効
OUTBLOCKA 有効
OUTBLOCKB 有効④ OutputDrive
出力ドライブ設定
定義

値

SAI_OUTPUTDRIVE_DISABLE
0x00000000
SAI_OUTPUTDRIVE_ENABLE
SAI_xCR1_OUTDRIV
表 4.3.5.1.6 OutputDrive 設定値

内容

無効
有効

⑤ NoDivider
DIVIER 有効、無効設定
定義

値

SAI_MASTERDIVIDER_ENABLE 0x00000000
SAI_MASTERDIVIDER_DISABLE SAI_xCR1_NODIV
表 4.3.5.1.7 NoDivider 設定値

内容

有効
無効

⑥ FIFOThreshold
FIFO スレシュホールド設定
定義

値

SAI_FIFOTHRESHOLD_EMPTYSAI_FIFOTHRESHOLD_1QF
SAI_FIFOTHRESHOLD_HF
SAI_FIFOTHRESHOLD_3QF

0x00000000
SAI_xCR1_FTH_0
SAI_xCR1_FTH_1(SAI_xCR1_FTH_0|
SAI_xCR1_FTH_1)
SAI_FIFOTHRESHOLD_FULL
SAI_xCR1_FTH_1
表 4.3.5.1.8 FIFOThreshold 設定値

内容

0
1/4
1/1
3/4
1

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

値

SAI_STEREOMODE
0x00000000
SAI_MONOMODESAI_xCR1_MONO
表 4.3.5.1.9 MonoStrereoMode 設定値

⑧

内容

ステレオ
モノクロ

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

値

内容

SAI_NOCOMPANDING
SAI_ULAW_1CPL_COMPANDING
SAI_ALAW_1CPL_COMPANDING

0x00000000
SAI_xCR1_COMP_1(SAI_xCR1_COMP_1|
SAI_xCR1_COMP_0)
SAI_ULAW_1CPL_COMPANDING (SAI_xCR1_COMP_1|
SAI_xCR1_CPL)
SAI_ALAW_1CPL_COMPANDING (SAI_xCR1_COMP_1|
SAI_xCR1_COMP_0|
SAI_xCR1_CPL)
表 4.3.5.1.10 CompandingMode 設定値

なし
ULAW 1CPL
ALAW 1CPLULAW 1CPL
ALAW 1CPL⑨ TriState
TriState マネージメント設定
定義

値

内容

SAI_OUTPUT_NOTRELEASED
0x00000000
SAI_OUTPUT_RELEASEDSAI_xCR1_TRIS
表 4.3.5.1.11 TriState 設定値

無効
有効⑩ Protocol
BLOCK プロトコル設定
定義

値

内容

SAI_FREE_PROTOCOL
0x00000000
SAI_SPDIF_PROTOCOL
SAI_xCR1_PRTCFG_0
SAI_AC97_PROTOCOL
SAI_xCR1_PRTCFG_1
表 4.3.5.1.11 Protocol 設定値

フリー
SPDIF
AC97

⑪ DataSize
BLOCK データサイズ設定
定義

値

内容

SAI_DATASIZE_8
SAI_DATASIZE_10

SAI_xCR1_DS_1(SAI_xCR1_DS_1|
SAI_xCR1_DS_0)
SAI_DATASIZE_16
SAI_xCR1_DS_1
SAI_DATASIZE_10(SAI_xCR1_DS_1|
SAI_xCR1_DS_0)
SAI_DATASIZE_14(SAI_xCR1_DS_1|
SAI_xCR1_DS_1)
SAI_DATASIZE_31(SAI_xCR1_DS_1|
SAI_xCR1_DS_1|
SAI_xCR1_DS_0)
表 4.3.5.1.13 DataSize 設定値

8
10
16
10
14
31

⑫ FirstBit
MSB/LSB 設定
定義

値

内容

SAI_FIRSTBIT_MSB
0x00000000
SAI_FIRSTBIT_LSB
SAI_xCR1_LSBFIRST
表 4.3.5.1.14 FirstBit 設定値

MSB
LSB

⑬ ClockStrobing
クロック・ストロービング設定
定義

値

内容

71

SAI_CLOCKSTROBING_FALLINGEDGE 0x00000000
SAI_CLOCKSTROBING_RISINGEDGE
SAI_xCR1_CKSTR
表 4.3.5.1.15 ClockStrobing 設定値

立下りエッジ立ち上がりエッジ⑭ FSDefinition
フレーム・シンクロナス設定
定義

値

SAI_FS_STARTFRAME
0x00000000
SAI_FS_CHANNEL_IDENTIFICATION
SAI_xFRCR_FSDEF
表 4.3.5.1.16 FSDefintion 設定値

内容

START FRAME
CHANNEL IDENTIFICATION⑮ FSPolarity
フレーム・シンクロナス POLARITY 設定
定義

値

SAI_FS_ACTIVE_LOW
SAI_FS_ACTIVE_HIGH
表 4.3.5.1.17 FSPolarity 設定値

0x00000000
SAI_xFRCR_FSPO⑯ FSOffset
フレーム・シンクロナス

内容

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

オフセット設定

定義

値

SAI_FS_FIRSTBIT
0x00000000
SAI_FS_BEFOREFIRSTBITSAI_xFRCR_FSDEF
表 4.3.5.1.18 FSDefintion 設定値

内容

ファーストビットファーストビットの前⑰ SlotSize
スロットサイズ設定
定義

値

SAI_SLOTSIZE_DATASIZE
SAI_SLOTSIZE_16B
SAI_SLOTSIZE_31B
表 4.3.5.1.19 SlotSize 設定値

0x00000000
SAI_xSLOTR_SLOTSZ_0
SAI_xSLOTR_SLOTSZ_1

内容

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

⑱ SlotActive
スロットアクティブ設定
定義

SAI_SLOT_NOTACTIVESAI_SLOTACTIVE_0
SAI_SLOTACTIVE_1
SAI_SLOTACTIVE_1
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_11
SAI_SLOTACTIVE_13
SAI_SLOTACTIVE_14
SAI_SLOTACTIVE_15

値

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

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

71

SAI_SLOTACTIVE_FULL
表 4.3.5.1.10 SlotActive 設定値

0xFFFF0000

フル

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

値

AUDIO_ERROR_NONE
0x00000000
AUDIO_ERROR_OVRUDR
0x00000001
AUDIO_ERROR_AFSDET
0x00000004
AUDIO_ERROR_LFSDET
0x00000008
AUDIO_ERROR_WCKCFG
0x00000010
AUDIO_ERROR_TIMEOUT
0x00000040
表 4.3.5.1.11 エラーコード値

内容

エラーなし
オーバーランまたはアンダーラン
Anticipated Frame synchronisation detection
Late Frame synchronisation detection
Wrong clock configuration
タイムアウト4.3.5.2 インターフェイス仕様
AUDIO ドライバは表 4.3.5.1.1 の設定ドライバと表 4.3.6.1.1 の入出力制御を行うドライバの二種類がある。引数で設定する mode は入力用と主力用に関数を設定する。mode の設定値は以下の２つがある。
① AUDIO_OUT_BLOCK：出力制御を行う② AUDIO_IN_BLOCK：入力制御を行う
関数名

型

引数

機能

audio_init

AUDIO_H
andle_t*
void

ID id

AUDIO ハード初期化

audio_deinit

AUDIO_Handle_t* haudio
uint31_t mode
audio_clockconfig
void
AUDIO_Handle_t* haudio
uint31_t AudioFreq
void *Paramaudio_irqhandler
void
SDMMC_handle_t *hsd
表 4.3.5.1.1 AUDIO 設定ドライバ関数

AUDIO 設定解除

関数名

型

引数

機能

audio_startER

入出力機能開始

audio_endERaudio_transmit

ERaudio_receiveER

audio_dmapauseER

audio_dmaresume

ERaudio_dmastop

ERaudio_enable

void

AUDIO_Handle_t* haudio
uint31_t mode
AUDIO_Handle_t* haudio
uint31_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
uint31_t mode
AUDIO_Handle_t* haudio
uint31_t mode
AUDIO_Handle_t* haudio
uint31_t mode
SDMMC_handle_t *hsd

audio_disable

ERaudio_gethandle

AUDIO_Ha

AUDIO_Handle_t* haudio
uint31_t mode
ID id

備考

AUDIO クロック設定

AUDIO 割込み関数

備考

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

出力

入力データ転送開始

入力

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

audio_status

ndle_t*void

AUDIO_Handle_t* haudio
uint31_t mode
表 4.3.5.1.1 AUDIO 制御ドライバ関数

実行状態取出し

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

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

74

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

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

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

75

演奏終了

audio_dmastop
audio_disable

送信DMAを停止
出力用SAIを無効にする（AUDIO_OUT_BLOCK）

wm8994に停止要求

結果

失敗

成功
正常終了

エラー終了

図 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.1 にハンドラ型 DSI_Handle_t型を定義する。ハードウェア定義構造体は内部処理に使用するため構成は示さない。
番号

項目

型

機能

1
1
3
4
5
6

AutomaticClockLaneControl
TXEscapeCkdiv
NumberOfLanes
pllndiv
pllidfpllodf
表 4.3.6.1.1 DSI_Init_t 型

uint31_t
uint31_t
uint31_t
uint31_t
uint31_t
uint31_t

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

番号

項目

1
1
3
4
5
6
7

base
uint31_t
Init
DSI_Init_t
teffectcallback
void(*)(DSI_Handle_t*)refreshcallback
void(*)(DSI_Handle_t*)
errorcallback
void(*)(DSI_Handle_t*)statusvolatile uint31_t
errorCodevolatile uint31_t
表 4.3.6.1.1 DSI_Handle_t 型

型

機能

DSI デバイスのベースアドレス
DSI 初期化データ
TearEffct コールバック関数
リフレッシュコールバック関数
エラーコールバック関数
DSI ステータス
エラーコード① 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
0x00000000
DSI_ERROR_ACK
0x00000001
DSI_ERROR_PHY
0x00000001
DSI_ERROR_TX
0x00000004
DSI_ERROR_RX
0x00000008
DSI_ERROR_ECC
0x00000010
DSI_ERROR_CRC
0x00000010
DSI_ERROR_PSE
0x00000040
DSI_ERROR_EOT
0x00000080
DSI_ERROR_OVF
0x00000100
DSI_ERROR_GEN
0x00000100
表 4.3.6.1.4 エラーコード値

内容

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

4.3.6.2 インターフェイス仕様
DSI ドライバの設計関数を表 4.3.7.1.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
uint31_t ackactive
DSI_Handle_t *hdsi
uint31_t lpcmodeuint31_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
uint31_t Channel
uint31_t Modeuint31_t Param1
uint31_t Param1
DSI_Handle_t *hdsi
uint31_t Channel
uint31_t Modeuint31_t NbParams
uint31_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

uint31_t Channel
uint8_t *Array
uint31_t Sizeuint31_t Modeuint31_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
uint31_t Modeuint31_t Orientation
DSI_Handle_t *hdsi

ER

DSI_Handle_t *hdsi
uint31_t CustmLane
uint31_t Lane
uint31_t active
dsi_setPHYTimingER
DSI_Handle_t *hdsi
uint31_t timing
uint31_t active
uint31_t Value
dsi_forceTXStopMode
ER
DSI_Handle_t *hdsi
uint31_t Lane
uint31_t active
dsi_irqhandler
void
DSI_Handle_t *hdsi
表 4.3.6.1.1 DSI ドライバ関数

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

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

PHY タイミング設定

クロック、データレーン強制停止
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.1 の EMAC ハ ン ド ラ 型 を 持 つ 。 EMAC コ ン フ ィ グ レ ー シ ョ ン 構 造 体 は
DESCRIPTOR キューと送受信バッファ等の設定を定義する。EMAC ドライバは、この設定に従って
DESCRIPTOR を設定する。
番号

項目

1
1
3
4
5
6

packetbufsize
uint31_t
パケットバッファ長
rxquecountuint31_t
受信キューの数
txquecountuint31_t
送信キューの数
quebuffervoid *
キューバッファ領域へのポインタ
databuffer
void *
データ領域へのポインタ
semidID
mdio 用セマフォ ID(LOCK 用)
表 4.3.7.1.1 EMAC コンフィギュレーション構造体

型

機能

番号

項目

型

機能

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

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

uint31_t
EMAC_Init_t
uint8_tuint8_t *uint8_tuint8_tuint31_t
uint31_t
volatile uint31_t *volatile uint31_t *volatile uint31_t *volatile uint31_t *void (*) ()void (*) ()uint31_t
uint31_t
uint31_t
uint31_t
uint31_t
uint31_t
uint31_t
uint31_t
uint31_t
uint31_t
uint31_t
uint31_t
uint31_t
uint31_t
uint31_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
31
33
34
35

rx_normal_irq_n
uint31_trx_early_irq
uint31_t
rx_overflow_irq
uint31_trx_buf_unav_irq
uint31_trx_process_stopped_irq
uint31_trx_watchdog_irq
uint31_t
表 4.3.7.1.1 EMAC ハンドラ型

TX/RX NORMAL/RIE の発生回数
TX/RX NORMAL/ERI の発生回数
ABNORMAL/OVF の発生回数
ABNORMAL/RU の発生回数
ABNORMAL/RPS の発生回数
ABNORMAL/RWT の発生回数① 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
uint31_t link
EMAC_Handle_t* hmac
int disable
EMAC_Handle_t* hmac
EMAC_Handle_t* hmac
uint31_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.1.1 EMAC ドライバ関数

4.3.7.3 フローチャート
EMAC ドライバは、TCP/IP プロトコル・スタックから呼び出されることを前提に設計している。
TCP/IP プロトコル・スタックとの依存性が高い部分は、送受信用のパケットの受け渡し処理である。
このドライバでは、LWIP 用の pbuf を使用してパケットを受け渡すことを前提に設計している。
EMAC の初期化フローを図 4.1.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.1 に示す。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.1 EAC 送信

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

81

図 4.3.7.3.4 EMAC 終了処理

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

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

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

項目

型

機能

1
1
3
4
5
6
7
8

_flags_file_func_in_func_ins_func_out_func_outs_func_flush_dev
表 5.1.1 FILE 型

int
int
int
int
void
int
int
void *

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

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

型

引数

機能

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

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

int
int
FILE *fp
表 5.1.1 サポートしている標準入出力関数

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

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

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

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

結果は num数

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

結果は num数

ファイルへプリント

結果は項目数

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

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 1]
portnotaskid-

バイト単位でメモリ DUMP する
２バイト単位でメモリ DUMP する
４バイト単位でメモリ DUMP する
タスクの状態を表示する
CPU レジスタの内容を表示する
バイト単位で、メモリ内容を変更する
２バイト単位で、メモリ内容を変更する
４バイト単位で、メモリ内容を変更する
デフォルト 1、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.1 ファイルデバッグコマンド

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

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
1

commandconst char *func
int_t (*)()
表 5.4.1.1 COMMAND_INFO 型

型

機能

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

番号

項目

1
1
3
4
5
6

pcnextCOMMAND_LINK *num_commandint
commandconst char *func
int_t (*)()
help
const char *pcinfoCOMMAND_INFO *表 5.4.1.1 COMMAND_LINK 型

型

機能

COMMAND_LINK のチェーン用
第２コマンドの数
第１（カテゴリ）コマンド名
カテゴリコマンドの実行関数（通常は NULL）
カテゴリの HELP メッセージ
COMMAND_INFO の配列へのポインタ

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

型

引数

機能

備考

85

setup_command
int
COMMAND_LINK *表 5.4.1.1 デバッグコマンド追加定関数

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

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

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

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

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

6.2.1 ファイルライブラリ
ファイルライブラリは標準入出力関数に合わせて、表 6.1.1.1 関数を提供する。これらはＣ言語上のファイル関数とファイル関係の POSIX 仕様であるが、以下の規定に従って関数の選択を行った。
・Ｃ言語標準のもの（C89,C99）
・POSIX.1-1001 でよく使われるもの
・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 statfs1*stat

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

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

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

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

6.2.2.1

データ仕様

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

項目

1
1
3
4
5
6

_sdev_sens
int (*)()_sdev_diskinitint (*)()_sdev_diskstatusint(*)()_sdev_diskreadint(*)()_sdev_diskwrite
int(*)()_sdev_diskioctl
int(*)()
表 6.1.1.1.1 StroageDeviceFunc_t 型

型

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

番号

項目

機能

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

_sdevff_opendir
void *(*)()_sdevff_closedirint (*)()_sdevff_readdirint (*)()_sdevff_mkdir
int (*)()_sdevff_rmdir
int (*)()_sdevff_unlink
int (*)()_sdevff_rename
int (*)()_sdevff_chmodint (*)()_sdevff_stat
int (*)()_sdevff_statfs
int (*)()_sdevff_open
int (*)()_sdevff_closeint (*)()_sdevff_fstat
int (*)()_sdevff_lseek
off_t (*)()_sdevff_readlong (*)()_sdevff_write
long (*)()_sdevff_mmap
void *(*)()
表 6.1.1.1.1 StorageDeviceFunc_t 型

型

機能

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

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

88

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

項目

1
1
3
4
5
6
7
8
9
10
11

_sdev_attributeuint16_t_sdev_devno
uint8_t_sdev_port
uint8_t_sdev_maxsec
uint31_t_sdev_secsize
uint31_t_sdev_instimer
uint16_t_sdev_inswait
uint16_t_sdev_notice
void (*)()_sdev_local[4]void *
pdevf
StorageDeviceFunc_t
pdevffStorageDeviceFileFunc_t*
表 6.1.1.1.3 StroageDevice_t 型

型

機能

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

番号

項目

機能

1
1
3
4
5

_num_activedev
uint16_t_sdev_active
uint8_t_default_device
uint8_t_get_datetime
uint31_t (*)()_psd
StorageDevice_t *表 6.1.1.1.4 StroageDeviceHead_t 型

型

定義

値

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

内容

SDEV_ACTIVE(1<<15)
デバイスがアクティブの状態
SDEV_INSERTCHK(1<<14)
挿入・排出の設定あり
SDEV_CHKREMOVE(1<<13)
排出検査を行う
SDEV_ONEEXIT(1<<11)
一度以上排出があった
SDEV_EMPLOY(1<<8)
デバイス動作中
SDEV_ERROR(1<<7)
デバイスエラー
SDEV_DEVNOTUSE(1<<0)
デバイス使用不可
SDEV_NOTUSE
155
使用不可のビット定義
表 6.1.1.1.5 _sdev_attribute 設定値

6.2.2.2

インターフェイス仕様

表 6.1.1.1.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.1.1.1.1 ストレージデバイスマネージャー関数
定義

内容

SDEV_SENSE_ONETIME
SDMSense_task を関数として使用
NUM_STORAGEDEVICE
ストレージデバイスの数(デフォルトは 4)
DEAFULT_DEVNO
デフォルトのデバイス番号(通常は 0)
表 6.1.1.1.1 コンパイルスイッチ設定値

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

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

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

項目

型

機能

1
1
3
4
5

tm_sectm_mintm_hour
tm_mdaytm_mon

int
int
int
int
int

秒(0～59)分(0～59)時(0～13)
月中の日(1～31)
月(1～11)

90

6
7
8
9

tm_yearint
tm_wdayint
tm_ydayint
tm_isdstint
表 6.1.1.1 tm 構造体

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

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

mktimegmtime_r

time_tstruct tm *引数

struct tm *ptm
const time_t *pt
struct tm *ptm
表 6.3.1.1 時刻管理関数

機能

備考

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

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

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

ID

機能

HUB
0x09
HUB のサポート
HID
0x03
MOUSE/KEYBOAED
MSC
0x08
USB メモリ
PRT
0x07
プリンタ
CDC/SERIAL 0x01
USB シリアル
BLUETOOTH 0xE0
BLUETOOTH
表 6.4.1.1 USB ホストクラス

アプリとの通信機能

備考

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

1.3.1

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

HID
MSC

ID

機能

備考

0x03
MOUSE/KEYBOAED
0x08
USB メモリ
表 6.4.1.1 USB デバイスクラス

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

91

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

フォント

1 バイトフォント高さ

漢字フォント高さ

STM31Cube フォント
東雲フォント

8,11,16,10,14
9,11,16

なし
11,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/STM31F713DISCOVERY_GCC/MON3
漢字フォントをプログラムのデータ領域に置きたい場合は、USE_ROMFONT コンパイルスイッチを有効にすれば、romfont というグローバル変数として定義される。ROM ファイル機能を使って ROM
ファイルに変換すればファイルとしてアクセスができる。
以下に漢字フォントビットマップファイルのヘッダを示す。数値はリトルエンディアンとなる。
番号

項目

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

magic
0
char [4]“FONT”
name4char [31]
フォント名
fsize
36
unsigned int
ファイルサイズcsize
40
unsigned int
ビットマップデータのコード部のバイト数
isize
44
unsigned int
ビットマップデータのイメージ部のバイト数
off_cnv_table1
48
unsigned int
UTF-8N 1 バイトコード検索テーブルへのオフセット
siz_cnv_table1 51
unsigned int
UTF-8N 1 バイトコード検索テーブルへのコード数
off_cnv_table1
56
unsigned int
UTF-8N 3-1 バイトコード検索テーブルへのオフセット
siz_cnv_table1 60
unsigned int
UTF-8N 3-1 バイトコード検索テーブルへのコード数
off_cnv_table3
64
unsigned int
UTF-8N 3-1 バイトコード検索テーブルへのオフセット
siz_cnv_table3 68
unsigned int
UTF-8N 3-1 バイトコード検索テーブルへのコード数
off_1byte_font
71
unsigned int
UTF-8N 1 バイトコード＋イメージへのオフセット
siz_1byte_font
76
unsigned int
UTF-8N 1 バイトコード＋イメージのアイテム数
off_3byte_font
80
unsigned int
UTF-8N 3 バイトコード＋イメージへのオフセット
siz_3byte_font84
unsigned int
UTF-8N 3 バイトコード＋イメージのアイテム数
表 6.5.1.1 東雲フォントファイルのヘッダ部構造体型

機能

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

91

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

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

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

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

ディレクトリ

内容

区分

serial_if.cshci.c

STM31_WPAN/ble/mesh/Src
UART ドライバの違いを修正
修正
STM31_WPAN/interface/ble_thread/sh ハードウェアアクセス直接記載部修 修正
ci
正tl_mbox.c
STM31_WPAN/interface/ble_thread/tl
サブコアとの通信処理の違いを修正
修正
cmsis_compiler.h STM31_WPAN/
アプリから移動し一本化
追加
hw_if.h
STM31_WPAN/
アプリから移動し一本化
追加
STM31_WPAN/
アプリから移動し一本化
追加
Makefile.config
STM31_WPAN/STM31_WPAN 用 makefile
追加
表 6.7.1 STM31_WPAN ミドルウェア追加、修正ファイル
STM31_WPAN を 使 用 す る 場 合 は 、 以 下 の ユ ー テ ィ リ テ ィ も 必 要 と な る た め 、STM31Cube_FW_WB_V1.11.0/Utilities からコピーして、asp/stmcube/Utilities/にコピーしなければならない。
ディレクトリ名

STMCube31 上のパス

内容

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

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

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

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

files
monitorgdic
pdic
syssvcui
usb
stmcubeファイルシステムのソースとインクルードファイル
タスクモニタと標準入手力のソースとインクルードファイル
GDIC ドライバ
PDIC ドライバ、STM31xxx にボード依存ドライバを持つ
malloc,calloc,free 関数
GLCD に文字、グラフィックデータ表示
USB ホスト、デバイスのミドルウェア
V1.3.1 より Font のみを使用、BSP 部は gdic に移管した(gdic ドライバには、この領域を拡張して使用するものがある)
jpeg-9b
JPEG ライブラリ、Web より jpeg-9b をダウンロードセットし、ディレクトリ中の Makefile でライブラリをビルドしてください
libmad-0.15.1b
MAP3 でコードライブラリ、Web より libmad-0.15.1b をダウンロー
ドセットし、ディレクトリ中の Makefile でライブラリをビルドして
ください
lwip
lwip プロトコル・スタック、Web より lwip-1.1.1 と contrib-1.1.0 を
ダウンロードセットし、patch ディレクトリ中のソースパッチを行ってください
表 7.1.1 共通部ディレクトリ

備考

V1.3.1 以降

ソースなし
ソースなし

ソースなし

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

内容

adc.c
adc.h
device.cdevice.cfg
device.h
i1c.c
i1c.h
pinmode.cpinmode.h
rts.c
rts.cfg

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

備考

Base
Base
Base

94

rts.hRTS ドライバ・インクルードファイル
spi.c
SPI ドライバ・ソースファイル
spi.h
SPI ドライバ・インクルードファイル
usb_otg.c
USB-OTG ドライバ・ソースファイル
usb_otg.h
USB-OTG ドライバ・インクルードファイル
表 7.1.1 STM31F4xx ドライバファイル

144 のみ144 のみ7.3 STM32L4xx ドライバ
STM31L4xx 用ドライバ部、pdic/stm31l4xx にソースファイルがある。
ファイル

内容

adc.c
ADC ドライバ・ソースファイル
adc.h
ADC ドライバ・インクルードファイル
device.c
GPIO,DMA,LED,SW ドライバ・ソースファイル
device.cfg
LED,SW の RTOS リソースファイル
device.hGPIO,DMA,LED,SW ドライバ・インクルードファイル
i1c.c
I1C ドライバ・ソースファイル
i1c.h
I1C ドライバ・インクルードファイル
pinmode.cArduino の GPIO ピン設定・ソースファイル
pinmode.hArduino の GPIO ピン設定・インクルードファイル
qspi.cQSPI ドライバ・ソースファイル
qspi.hQSPI ドライバ・インクルードファイル
rts.c
RTS ドライバ・ソースファイル
rts.cfg
RTS の RTOS リソースファイル
rts.h
RTS ドライバ・インクルードファイル
spi.c
SPI ドライバ・ソースファイル
spi.h
SPI ドライバ・インクルードファイル
表 7.3.1 STM31L4xx ドライバファイル

備考

Base
Base
Base

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

内容

adc.c
adc.h
clock.cdevice.c

ADC ドライバ・ソースファイル
ADC ドライバ・インクルードファイル
RTC デバッグコマンド・ソースファイル
GPIO,DMADMA1D,RTC,CHACHE,LED,SW ドライバ・ソースファ
イル
RTS,LED,SW の RTOS リソースファイル
GPIO,DMADMA1D,RTC,CHACHE,LED,SW ドライバ・インクルー
ドファイル
DFSDM 入力ドライバ・ソースファイル
DFSDM 入力ドライバ・インクルードファイル
DSI LCD インターフェイス・ソースファイル
DSI LCD インターフェイス・インクルードファイル
I1C ドライバ・ソースファイル
I1C ドライバ・インクルードファイル
GLCD ドライバ・ソースファイル
GLCD インクルード・ソースファイル
ファイルシステム用インクルードファイル
Arduino の GPIO ピン設定・ソースファイル
Arduino の GPIO ピン設定・インクルードファイル

device.cfg
device.hdfsdm.cdfsdm.h
dsi.c
dsi.h
i1c.c
i1c.h
ltdc.cltdc.hmcicmd.hpinmode.cpinmode.h

備考

Base
Base
Base
769 のみ769 のみ769 のみ769 のみ95

qspi.c
QSPI ドライバ・ソースファイル
qspi.hQSPI ドライバ・インクルードファイル
sai.c
オーディオドライバ・ソースファイル
sai.h
オーディオドライバ・インクルードファイル
sdmmc.c
SD-card ドライバ・ソースファイル
sdmmc.cfg
SD-card ドライバ・RTOS リソースファイル
sdmmc.hSD-card ドライバ・インクルードファイル
spi.c
SPI ドライバ・ソースファイル
spi.h
SPI ドライバ・インクルードファイル
stm31f7xx_hal.h
STMCube 連結用インクルードファイル
usb_otg.c
USB-OTG ドライバ・ソースファイル
usb_otg.h
USB-OTG ドライバ・インクルードファイル
emac.cEMAC ドライバ・ソースファイル
emac.hEMAC ドライバ・インクルードファイル
phyreg.hehernet-phy 設定・インクルードファイル
wifi.c
ESP31 用 WIFI ドライバ・ソースファイル
wifi.hESP31 用 WIFI ドライバ・インクルードファイル
wifiuart.c
WIFI 用 UART 通信ドライバ・ソースファイル
wifiuart.h
WIFI 用 UART 通信ドライバ・インクルードファイル
wifiuart.cfg
WIFI 用 UART 通信 RTOS リソースファイル
表 7.4.1 STM31F7xx ドライバファイル

1.3.1 で削除

1.4.1 で追加
1.4.1 で追加
1.4.1 で追加
1.4.1 で追加
1.4.1 で追加
1.4.1 で追加
1.4.1 で追加
1.4.1 で追加

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

内容

adc.c
ADC ドライバ・ソースファイル
adc.h
ADC ドライバ・インクルードファイル
clock.c
RTC デバッグコマンド・ソースファイル
device.c
GPIO,DMA,LED,SW ドライバ・ソースファイル
device.cfg
RTS,LED,SW の RTOS リソースファイル
device.hGPIO,DMA,LED,SW ドライバ・インクルードファイル
i1c.c
I1C ドライバ・ソースファイル
i1c.h
I1C ドライバ・インクルードファイル
pinmode.cArduino の GPIO ピン設定・ソースファイル
pinmode.hArduino の GPIO ピン設定・インクルードファイル
rtc.c
RTS ドライバ・ソースファイル
rtc.cfg
RTS の RTOS リソースファイル
rtc.h
RTS ドライバ・インクルードファイル
spi.c
SPI ドライバ・ソースファイル
spi.h
SPI ドライバ・インクルードファイル
表 7.5.1 STM31F0xx ドライバファイル

備考

Base
Base
Base

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

内容

adc.c
adc.h
clock.cdevice.cdevice.cfg
device.hi1c.c

ADC ドライバ・ソースファイル
ADC ドライバ・インクルードファイル
RTC デバッグコマンド・ソースファイル
GPIO,DMA,LED,SW ドライバ・ソースファイル
RTS,LED,SW の RTOS リソースファイル
GPIO,DMA,LED,SW ドライバ・インクルードファイル
I1C ドライバ・ソースファイル

備考

Base
Base
Base

96

i1c.hI1C ドライバ・インクルードファイル
pinmode.cArduino の GPIO ピン設定・ソースファイル
pinmode.hArduino の GPIO ピン設定・インクルードファイル
rtc.c
RTS ドライバ・ソースファイル
rtc.cfg
RTS の RTOS リソースファイル
rtc.h
RTS ドライバ・インクルードファイル
spi.c
SPI ドライバ・ソースファイル
spi.h
SPI ドライバ・インクルードファイル
usb_device.c
USB デバイスドライバ・ソースファイル
usb_device.h
USB デバイスドライバ・インクルードファイル
表 7.6.1 STM31L0xx ドライバファイル

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

内容

adc.c
ADC ドライバ・ソースファイル
adc.h
ADC ドライバ・インクルードファイル
clock.c
RTC デバッグコマンド・ソースファイル
device.c
GPIO,DMA,LED,SW ドライバ・ソースファイル
device.cfg
RTS,LED,SW の RTOS リソースファイル
device.hGPIO,DMA,LED,SW ドライバ・インクルードファイル
i1c.c
I1C ドライバ・ソースファイル
i1c.h
I1C ドライバ・インクルードファイル
pinmode.cArduino の GPIO ピン設定・ソースファイル
pinmode.hArduino の GPIO ピン設定・インクルードファイル
rtc.c
RTS ドライバ・ソースファイル
rtc.cfg
RTS の RTOS リソースファイル
rtc.h
RTS ドライバ・インクルードファイル
spi.c
SPI ドライバ・ソースファイル
spi.h
SPI ドライバ・インクルードファイル
表 7.7.1 STM31G0xx ドライバファイル

備考

Base
Base
Base

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

内容

adc.c
adc.h
clock.cdevice.cdevice.cfg
device.hemac.cemac.hi1c.ci1c.hphyreg.hpinmode.cpinmode.hspi.c

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

備考97spi.hSPI ドライバ・インクルードファイル
表 7.8.1 STM31H7xx ドライバファイル

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

内容

備考

adc.c
ADC ドライバ・ソースファイル
adc.h
ADC ドライバ・インクルードファイル
clock.c
RTC デバッグコマンド・ソースファイル
device.c
GPIO,DMA,LED,SW ドライバ・ソースファイル
device.cfg
RTS,LED,SW の RTOS リソースファイル
device.hGPIO,DMA,LED,SW ドライバ・インクルードファイル
i1c.c
I1C ドライバ・ソースファイル
i1c.h
I1C ドライバ・インクルードファイル
pinmode.cArduino の GPIO ピン設定・インクルードファイル
pinmode.h
SPI ドライバ・ソースファイル
rtc.c
RTS ドライバ・ソースファイル
rtc.cfg
RTS の RTOS リソースファイル
rtc.h
RTS ドライバ・インクルードファイル
spi.c
SPI ドライバ・インクルードファイル
spi.h
SPI ドライバ・インクルードファイル
usb_device.c
USB デバイスドライバ・ソースファイル
usb_device.h
USB デバイスドライバ・インクルードファイル
表 7.9.1 STM31G4xx ドライバファイル

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

内容

備考

adc.c
adc.h
clock.cdevice.cdevice.cfg
device.h
i1c.c
i1c.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.c

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

V1.4.198

wifi.h
ESP31 用 WIFI ドライバ・インクルードファイル
wifiuart.c
WIFI 用 UART 通信ドライバ・ソースファイル
wifiuart.cfg
WIFI 用 UART 通信ドライバ・リソースファイル
wifiuart.h
WIFI 用 UART 通信ドライバ・インクルードファイル
pwm.c
PWM ドライバ・ソースファイル（TIM1,TIM1 限定）
pwm.h
PWM ドライバ・インクルードファイル
表 7.10.1 STM31WBxx ドライバファイル

V1.4.1V1.4.1V1.4.1V1.4.1V1.4.1V1.4.1

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

内容

備考

device.c
GPIO,DMA,LED,SW ドライバ・ソースファイル
device.cfg
RTS,LED,SW の RTOS リソースファイル
device.hGPIO,DMA,LED,SW ドライバ・インクルードファイル
i1c.c
I1C ドライバ・ソースファイル
I1c.h
I1C ドライバ・インクルードファイル
pinmode.cArduino の GPIO ピン設定・インクルードファイル
pinmode.h
SPI ドライバ・ソースファイル
spi.c
SPI ドライバ・インクルードファイル
spi.h
SPI ドライバ・インクルードファイル
表 7.11.1 STM31MP1xx ドライバファイル

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

usb_otg

usb_otg(DWC1-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 1.4”LCD に対して、グラフィック
API を提供する
I1C インターフェイスの AQM0801 キャラクタ LCD に対して、キャラクタ表示 API を提供する
SPI インターフェイスの AQM1184 に対して、グラフィック API を提供する
Arduino BLE Shield1.1 に対して、BLE-API を提供する
ST 用 otm8009a に対して、LCD 用 API を提供する
ST 用 st7789h1 に対して、LCD 用 API を提供する
ST 用 rk043fn48h に対して、LCD 用 API を提供
ST 用 ft06x06 に対して、タッチパネル用 API を提供する
ST 用 ft5336 に対して、タッチパネル用 API を提供する

usb_device
spi_driveradafruit_st7735
adafruit_st7789
adafruit_ILI9341
aqm0801_st7031
aqm1184_st7565
bleshield1.1
stlcd_otm8009a
stlcd_st7789h1
stlcd_rk043fn48h
stts_ft06x06
stts_ft5336

備考

1.4.1
1.4.1

1.3.1
1.3.1
1.3.1
1.3.1
1.3.1
1.3.1
1.3.1

99

adafruitst_stmp610

Adafruit 1.4”LCD 用 stmp610 に対して、タッチパネル用 API を提供
する
studio_wm8994
ST 用 wm8994 に対して、オーディオ用 API を提供する
flash_file
QSPI フラッシュ上のデータを読み出し専用ファイルとしてアクセスする機能を提供する
rom_file
ROM 上のデータを読み出し専用ファイルとしてアクセスする機能を提供する
表 7.11.1 GDIC ディレクトリ

1.4.1
1.3.1
1.3.1
1.4.1

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

versiondate

functions

1.4.0

06/11/1018
06/15/1018

spi-SD-HC カードの不具合対応(プログラムのみ)
リードオンリーの fopen で open エラーとならない不具合対応(プログラムのみ)
usb host SERIAL/PRT 送受信を並行処理できるよう修正
usb host BLUETOOTH クラス対応
gdic/stlcd_otm8009a:gdic/stts_ft07x07:gdic/staudio_wm8994 を追加
STM31F713 Discovery ボード対応、gdic/stlcd_st7789h1 を追加
SYM31L4R5 Nucleo-144 ボードの対応
図 3.1 を TEB001 に修正
gdic/stlcd_rk043fn48h:gdic/stts_ft5336 を追加、stmcube の BSP ドライ
バを削除
ui ディレクトリ、gidc/flash_file:gdic/aqm1184_st7565 を追加
gdic/bleshield1.1 を追加
WATCH DOC ドライバの対応
STM31G071 Nucleo-64 ボードの対応
STM-BSP を削除
gdic/adafruit_ILI9341 を追加
STM31L4R5 の USB が動作可能に変更
STM31H743 Nucleo-144 ボードの対応
TLSF1.4.6 アロケート・フリーを繰り返すとアロケート領域の先頭８バイ
トが破壊される問題の暫定対策
ROM ファイル機能を GDIC に追加。ui/snfont_disp に漢字フォントをプ
ログラムデータとして取り込み機能を追加
STM31G474/431 Nucleo-64 ボードの対応
STM31WB44 Nucleo ボードの対応
メモリヒープの libc/LOCAL_HEAP 対応
ESP31 用 WIFI ドライバを STM31F7xx 用に追加
IWHI 1.54” LCD シールド(TEB001)の記載を追加
STM31WBXX に WIFI ドライバを拡張/BLE モジュール StmcubeV1.7.0
対応
STM31MP157C-DK1 用に OpenAMP の対応
ファイルシステムで long name を使用ない設定を可能する
STM31WBXX に PWM ドライバ追加
BLE モジュール StmcubeV1.11.0 対応(差分のみリリース)

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

1.4.1

10/17/1018
11/01/1018
11/07/1018
01/13/1019
03/13/1019
04/05/1019
07/18/1019
08/14/1019
11/07/1019
11/03/1019

1.4.1

11/13/1019
03/16/1010
03/31/1010
04/18/1010
05/11/1010
06/11/1010
09/19/1010
11/03/1010
01/14/1011
04/03/1011

100

05/14/1011
06/01/1011

lwip と STMCube ミドルウェアの設定方法を記載。
STM31_WPAN 用のユーティリティを追加。

101

Appendix A

STM32F401RE Nucleo

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

CN6
power

CN8
analogPin No.

1
NC
1
IOREF
3
RESET
NRST
4
+3V3
5
+5V
6
GND
7
GND
8
VIN
1
A0
PA0
1
A1
PA1
3
A1
PA4
4
A3
PB0
5
A4
PC1 or PB96A5
PC0 or PB8
表 A.1.1 左 Arduino connector 設定

CN No.

CN5
digitalCN9degital

MCU pin

Pin 名

Pin No.

MCU pin

Pin 名

10
D15
PB8
9
D14
PB9
8
AREF
7
GND
6
D13
PA5
5
D11
PA6
4
D11
PA7
3
D10
PB6
1
D9
PC7
1
D8
PA9
8
D7
PA8
7
D6
PB10
6
D5
PB4
5
D4
PB5
4
D3
PB3
3
D1
PA10
1
D1
PA1
1
D0
PA3
表 A.1.1 右 Arduino connector 設定

機能

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

機能

I1C1_SCL
I1C1_SDA
AVDD
GroundSPI1_SCKSPI1_MISO
TIM1_CH1N or SPI1_MOSITIM4_CH1 or SPI1_CS
TIM3_CH1
TIM1_CH3
TIM3_CH1
TIM1_CH1
USART1_TX
USART1_RX(1) I1C
Port No.

Device

1

I1C1

pin

SCL
SDA
I1C1
SCL
SDA
I1C3
SCL
SDA
表 A.1.1 I1C 接続ピン

1
3

MCU pinconnection

PB8
PB9
PB10
PB3
PA8
PB4

Arduino D15
Arduino D14
Arduino D6
Arduino D3
Arduino D7
Arduino D6(3) SPI
Port No.

Devicepin

MCU pinconnection

1

SPI1

SCK
MISO

PA5
PA6

Arduino D13
Arduino D11

101

MOSI
SCK
MISO
MOSI
表 A.3.1 SPI 接続ピン

1

SPI1

PA7
PB13
PB14
PB15

Arduino D11(4) ADCPort No.

1

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

Device1

USART1pin

MCU pin

TX
PA1
RX
PA3
USART1
TX
PA9
RX
PA10
表 A.5.1 UART ポート割り当て

1

connection

Arduino D1/ ST-LINK TX
Arduino D0/ ST-LINK RX
Arduino D8
Arduino D1(6) その他
Adafruit 1.8” TFT Shield 動作
RedBear BLE Shield1.1 動作

Appendix B

STM32F4 Discovery

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

Device

1

I1C1

pin

SCL
SDA
I1C1
SCL
SDA
I1C3
SCL
SDA
表 B.1.1 I1C 接続ピン

1
3

MCU pinconnection

PB8
PB9
PB10
PB11
PA8
PC9

(3) SPISTM31F401RE Nucleo に同じ(4) ADCSTM31F401RE Nucleo に同じ(5) USARTPort No.

Device1

USART1pin

MCU pinconnection

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

103

Appendix C

STM32F746 Discovery

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

CN6
power

CN8
analogPin No.

CN No.

CN5
digitalCN9degital

MCU pin

Pin 名

1
NC
1
IOREF
3
RESET
NRST
4
+3V3
5
+5V
6
GND
7
GND
8
VIN
1
A0
PA0
1
A1
PF10
3
A1
PF9
4
A3
PF8
5
A4
PF7 or PB96A5PF6 or PB8
表 C.1.1 左 Arduino connector 設定
Pin No.

MCU pin

Pin 名

10
D15
PB8
9
D14
PB9
8
AREF
7
GND
6
D13
PI1
5
D11
PB14
4
D11
PB15
3
D10
PI0
1
D9
PA15
1
D8
PI1
8
D7
PI3
7
D6
PH6
6
D5
PA8
5
D4
PG7
4
D3
PB4
3
D1
PG6
1
D1
PC6
1
D0
PC7
表 C.1.1 右 Arduino connector 設定

機能

3.3V Ref
RESET
3.3V input/output
5V output
GroundGroundPower input
ADC3_0
ADC3_8ADC3_7
ADC3_6
ADC3_5 or I1C1_SDA
ADC3_4 or I1C1_SCL

機能

I1C1_SCL
I1C1_SDA
AVDD
GroundSPI1_SCKSPI1_MISO
TIM11_CH1 or SPI1_MOSITIM5_CH4 or SPI1_NSS
TIM1_CH1
TIM11_CH1
TIM1_CH1
TIM3_CH1
USART6_TX
USART6_RX(1) I1C
Port No.

Device

1

I1C1

pin

SCL
SDA
I1C1
SCL
SDA
I1C3
SCL
SDA
表 C.1.1 I1C 接続ピン

1
3

MCU pinconnection

PB8
PB9
PH1
PH0
PH7
PH8

Arduino D15
Arduino D14

connection

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

(3) SPI
Port No.

Devicepin

MCU pin

1

SPI1

SCK

PA5

104

MISO
MOSI
SPI1
SCK
MISO
MOSI
表 C.3.1 SPI 接続ピン

1

PA6
PA7
PI1
PB14
PB15

Arduino D13
Arduino D11
Arduino D11(4) ADCPort No.

1
1
3

Device

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

Device1

USART1pin

MCU pinconnection

TX
PA9
RX
PB7
USART6
TX
PC6
RX
PC7
表 C.5.1 UART ポート割り当て

1

ST-LINK TX
ST-LINK RX
Arduino D1
Arduino D0(6) その他
RTC ドライバを使用可能
USB-OTG HS ポートサポート、但し、オーディオと並行動作させると動作不安定
Adafruit 1.8” TFT Shield：ADC 動作、LCD 不安定、SD カード通信できず
RedBear BLE Shield1.1：未評価
lwip 動作Appendix D

STM32F446RE Nucleo-64

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

CN6
power

CN8
analogPin No.

Pin 名

MCU pin

1
NC
1
IOREF
3
RESET
NRST
4
+3V3
5
+5V
6
GND
7
GND
8
VIN
1
A0
PA0
1
A1
PA1
3
A1
PA4
4
A3
PB0
5
A4
PC1 or PB96A5
PC0 or PB8
図 D.1.1 左 Arduino connector 設定

機能

3.3V Ref
RESET
3.3V input/output
5V output
GroundGroundPower input
ADC113_0
ADC113_1
ADC11_4
ADC11_8
ADC113_11 or I1C1_SDA
ADC113_10 or I1C1_SCL

CN No.

Pin No.

Pin 名

MCU pin機能

CN5
digital

10
9
8
7

D15
D14
AREF
GND

PB8
PB9
-

I1C1_SCL
I1C1_SDA
AVDD
Ground105

CN9degital

6
D13
PA5
5
D11
PA6
4
D11
PA7
3
D10
PB6
1
D9
PC7
1
D8
PA9
8
D7
PA8
7
D6
PB10
6
D5
PB4
5
D4
PB5
4
D3
PB3
3
D1
PA10
1
D1
PA1
1
D0
PA3
図 D.1.1 右 Arduino connector 設定

SPI1_SCKSPI1_MISOTIM14_CH1N or SPI1_MOSITIM4_CH1 or SPI1_CS
TIM8_CH1
TIM1_CH3
TIM3_CH1
TIM1_CH1
USART1_TX
USART1_RX(1) I1C
Port No.

Device

1

I1C1

pin

SCL
SDA
I1C1
SCL
SDA
I1C3
SCL
SDA
表 D.1.1 I1C 接続ピン

1
3

MCU pinconnection

PB8
PB9
PB10
PB3
PA8
PC9

Arduino D15
Arduino D14
Arduino D6
Arduino D3
Arduino D7(3) SPISTM31F401RE Nucleo に同じ(4) ADCSTM31F401RE Nucleo に同じ(5) USARTPort No.

Device1

USART1pin

MCU pinconnection

TX
PA1
RX
PA3
表 D.5.1 UART ポート割り当て

Arduino D1/ ST-LINK TX
Arduino D0/ ST-LINK RX(6) その他
RTC ドライバを使用可能
Adafruit 1.8” TFT Sheild 動作
RedBear BLE Shield1.1 動作

Appendix E

STM32F446ZE Nucleo-144

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

Pin No.

Pin 名

MCU pin

機能

CN6
power

1
1
3
4
5
6

NC
IOREF
RESET
+3V3
+5V
GND

NRST
-

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

CN8analog

7
GND
8
VIN
1
A0
PA3
1
A1
PC0
3
A1
PC3
4
A3
PF3
5
A4
PF5 or PB9
6
A5
PF10 or PB8
図 E.1.1 左 Arduino connector 設定

CN No.

CN5
digitalCN9degitalPin No.

MCU pin

Pin 名

10
D15
PB8
9
D14
PB9
8
AREF
7
GND
6
D13
PA5
5
D11
PA6
4
D11
PA7 or PB5
3
D10
PD14
1
D9
PD15
1
D8
PF11
8
D7
PF13
7
D6
PE9
6
D5
PE11
5
D4
PF14
4
D3
PE13
3
D1
PF15
1
D1
PG14
1
D0
PG9
図 E.1.1 右 Arduino connector 設定

GroundPower input
ADC113_IN3
ADC113_IN10
ADC113_IN13
ADC3_IN9
ADC3_IN15 or I1C1_SDA
ADC3_IN8 or I1C1_SCL

機能

I1C1_SCL
I1C1_SDA
AVDD
GroundSPI1_SCKSPI1_MISOTIM14_CH1N or SPI1_MOSITIM4_CH3 or SPI1_CS
TIM4_CH4
TIM1_CH1
TIM1_CH1
TIM1_CH3
USART6_TX
USART6_RX(1) I1C
Port No.

Device

1

I1C1

pin

SCL
SDA
I1C1
SCL
SDA
I1C3
SCL
SDA
表 E.1.1 I1C 接続ピン

1
3

MCU pinconnection

PB8
PB9
PB10
PB3
PA8
PC9

Arduino D15
Arduino D14(3) SPI
Port No.

Device

1

SPI1

pin

SCK
MISO
MOSI
SPI1
SCK
MISO
MOSI
表 E.3.1 SPI 接続ピン

1

MCU pinconnection

PA5
PA6
PA7
PB13
PB14
PB15

Arduino D13
Arduino D11
Arduino D11(4) ADCPort No.

Device

1
1

ADC1
ADC1

107

3

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

Device1

USART3pin

MCU pinconnection

TX
PD8
RX
PD9
USART6
TX
PG14
RX
PG9
表 E.5.1 UART ポート割り当て

1

ST-LINK TX
ST-LINK RX
Arduino D1
Arduino D0(6) その他
RTC ドライバを使用可能
USB-OTG FULL ポートサポート
Adafruit 1.8” TFT Sheild 動作
RedBear BLE Shield1.1 動作しない
Bluetooth ドングル正常動作しない

Appendix F

STM32F746ZG Nucleo-144

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

CN6
power

CN8
analogPin No.

Pin 名

MCU pin

1
NC
1
IOREF
3
RESET
NRST
4
+3V3
5
+5V
6
GND
7
GND
8
VIN
1
A0
PA3
1
A1
PC0
3
A1
PC3
4
A3
PF3
5
A4
PF5 or PB9
6
A5
PF10 or PB8
図 E.1.1 左 Arduino connector 設定

機能

3.3V Ref
RESET
3.3V input/output
5V output
GroundGroundPower input
ADC113_IN3
ADC113_IN10
ADC113_IN13
ADC3_IN9
ADC3_IN15 or I1C1_SDA
ADC3_IN8 or I1C1_SCL

CN No.

Pin No.

Pin 名

MCU pin機能

CN5
digital

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

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

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

I1C1_SCL
I1C1_SDA
AVDD
GroundSPI1_SCKSPI1_MISOTIM14_CH1N or SPI1_MOSITIM4_CH3 or SPI1_CS
TIM4_CH4
TIM1_CH1
TIM1_CH1-

CN9
degital

108

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

TIM1_CH3
USART6_TX
USART6_RX(1) I1C
Port No.

Device

1

I1C1

pin

SCL
SDA
I1C1
SCL
SDA
I1C3
SCL
SDA
表 F.1.1 I1C 接続ピン

1
3

MCU pinconnection

PB8
PB9
PB10
PB3
PA8
PC9

Arduino D15
Arduino D14(3) SPI
Port No.

Device

1

SPI1

pin

SCK
MISO
MOSI
SPI1
SCK
MISO
MOSI
表 F.3.1 SPI 接続ピン

1

MCU pinconnection

PA5
PA6
PA7
PB13
PB14
PB15

Arduino D13
Arduino D11
Arduino D11(4) ADCPort No.

1
1
3

Device

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

Device1

USART3pin

MCU pinconnection

TX
PD8
RX
PD9
USART6
TX
PG14
RX
PG9
表 F.5.1 UART ポート割り当て

1

ST-LINK TX
ST-LINK RX
Arduino D1
Arduino D0(6) その他
RTC ドライバを使用可能
USB-OTG FULL ポートサポート
Adafruit 1.8” TFT Shield：SD カードは SPIDRIVER がないので未確認
RedBear BLE Shield1.1 動作しない
lwip 動作Appendix G

STM32F767ZIT6 Nucleo-144

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

Pin No.

Pin 名

MCU pin

機能

CN6

1

NC

-

-

109

power

CN8
analog

1
IOREF
3
RESET
NRST
4
+3V3
5
+5V
6
GND
7
GND
8
VIN
1
A0
PA3
1
A1
PC0
3
A1
PC3
4
A3
PF3
5
A4
PF5 or PB9
6
A5
PF10 or PB8
図 G.1.1 左 Arduino connector 設定

CN No.

CN5
digitalCN9degitalPin No.

MCU pin

Pin 名

10
D15
PB8
9
D14
PB9
8
AREF
7
GND
6
D13
PA5
5
D11
PA6
4
D11
PA7 or PB5
3
D10
PD14
1
D9
PD15
1
D8
PF11
8
D7
PF13
7
D6
PE9
6
D5
PE11
5
D4
PF14
4
D3
PE13
3
D1
PF15
1
D1
PG14
1
D0
PG9
図 G.1.1 右 Arduino connector 設定

3.3V Ref
RESET
3.3V input/output
5V output
GroundGroundPower input
ADC113_IN3
ADC113_IN10
ADC113_IN13
ADC3_IN9
ADC3_IN15 or I1C1_SDA
ADC3_IN8 or I1C1_SCL

機能

I1C1_SCL
I1C1_SDA
AVDD
GroundSPI1_SCKSPI1_MISOTIM14_CH1N or SPI1_MOSITIM4_CH3 or SPI1_CS
TIM4_CH4
TIM1_CH1
TIM1_CH1
TIM1_CH3
USART6_TX
USART6_RX(1) I1C
Port No.

Device

1

I1C1

pin

SCL
SDA
I1C1
SCL
SDA
I1C3
SCL
SDA
I1C4
SCL
SDA
表 G.1.1 I1C 接続ピン

13
4

MCU pinconnection

PB8
PB9
PH1
PH0
PH7
PH8
PD11
PB13

Arduino D15
Arduino D14(3) SPI
Port No.

Devicepin

MCU pinconnection

1

SPI1

SPI1

PA5
PA6
PA7
PB13
PB14

Arduino D13
Arduino D11
Arduino D11

1

SCK
MISO
MOSI
SCK
MISO

110

MOSI
表 G.3.1 SPI 接続ピン

PB15(4) ADCPort No.

1
1
3

Device

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

Device1

USART3pin

MCU pinconnection

TX
PD8
RX
PD9
USART6
TX
PG14
RX
PG9
表 G.5.1 UART ポート割り当て

1

ST-LINK TX
ST-LINK RX
Arduino D1
Arduino D0(6) その他
RTC ドライバを使用可能
USB-OTG FULL ポートサポート
Adafruit 1.8” TFT Shield：SD カードは SPIDRIVER がないので未確認
RedBear BLE Shield1.1 動作しない
lwip 動作Appendix H

STM32F769NIH6 Discovery

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

CN6
power

CN8
analogPin No.

Pin 名

MCU pin

1
NC
1
IOREF
3
RESET
NRST
4
+3V3
5
+5V
6
GND
7
GND
8
VIN
1
A0
PA6
1
A1
PA4
3
A1
PC1
4
A3
PF10
5
A4
PF8 or PB9
6
A5
PF90 or PB8
図 H.1.1 左 Arduino connector 設定

機能

3.3V Ref
RESET
3.3V input/output
5V output
GroundGroundPower input
ADC1_IN6
ADC1_IN4
ADC1_IN11
ADC3_IN8
ADC3_IN6 or I1C1_SDA
ADC3_IN7 or I1C1_SCL

CN No.

Pin No.

Pin 名

MCU pin機能

CN5
digital

10
9
8
7
6
5
4

D15
D14
AREF
GND
D13
D11
D11

PB8
PB9
PA11
PB14
PB15

I1C1_SCL
I1C1_SDA
AVDD
GroundSPI1_SCKSPI1_MISO
TIM11_CH1 or SPI1_MOSI

111

CN9
degital

3
D10
PA11
1
D9
PH6
1
D8
PJ4
8
D7
PI3
7
D6
PF7
6
D5
PC8
5
D4
PJ0
4
D3
PF6
3
D1
PJ1
1
D1
PC6
1
D0
PC7
図 H.1.1 右 Arduino connector 設定

TIM1_CH4 or SPI1_CS
TIM11_CH1
TIM11_CH1
TIM3_CH3
TIM10_CH1
USART6_TX
USART6_RX(1) I1C
Port No.

Device

1

I1C1

pin

SCL
SDA
I1C1
SCL
SDA
I1C3
SCL
SDA
I1C4
SCL
SDA
表 H.1.1 I1C 接続ピン

13
4

MCU pinconnection

PB8
PB9
PH1
PH0
PH7
PH8
PD11
PB7

Arduino D15
Arduino D14

MCU pinconnection

PA5
PA6
PA7
PA11
PB14
PB15

Arduino D13
Arduino D11
Arduino D11(3) SPI
Port No.

Device

1

SPI1

pin

SCK
MISO
MOSI
SPI1
SCK
MISO
MOSI
表 H.3.1 SPI 接続ピン1(4) ADCPort No.

1
1
3

Device

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

Device1

USART11pin

MCU pin

TX
PA9
RX
PA10
USART6
TX
PC6
RX
PC7
表 H.5.1 UART ポート割り当て

connection

ST-LINK TX
ST-LINK RX
Arduino D1
Arduino D0(6) その他
RTC ドライバを使用可能
USB-OTG HIGH ポートサポート
Adafruit 1.8” TFT Shield：ADC 動作、LCD 不安定、SD カード通信できず
RedBear BLE Shield1.1 動作しない

111

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

Appendix I

STM32F091 Nucleo-64

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

CN6
power

CN8
analogPin No.

CN No.

CN5
digitalCN9degital

MCU pin

Pin 名

1
NC
1
IOREF
3
RESET
NRST
4
+3V3
5
+5V
6
GND
7
GND
8
VIN
1
A0
PA0
1
A1
PA1
3
A1
PA4
4
A3
PB0
5
A4
PC1 or PB96A5
PC0 or PB8
図 I.1.1 左 Arduino connector 設定
Pin No.

MCU pin

Pin 名

10
D15
PB8
9
D14
PB9
8
AREF
7
GND
6
D13
PA5
5
D11
PA6
4
D11
PA7
3
D10
PB6
1
D9
PC7
1
D8
PA9
8
D7
PA8
7
D6
PB10
6
D5
PB4
5
D4
PB5
4
D3
PB3
3
D1
PA10
1
D1
PA1
1
D0
PA3
図 I.1.1 右 Arduino connector 設定

機能

3.3V Ref
RESET
3.3V input/output
5V output
GroundGroundPower input
ADC_IN0
ADC_IN1
ADC_IN4
ADC_IN8
ADC_IN11 or I1C1_SDA
ADC_IN10 or I1C1_SCL

機能

I1C1_SCL
I1C1_SDA
AVDD
GroundSPI1_SCKSPI1_MISO
TIM17_CH1 or SPI1_MOSITIM16_CH1 or SPI1_CS
TIM3_CH1- or UART1_TX
TIM1_CH3
TIM3_CH1
TIM1_CH1- or UART1_RX
USART1_TX
USART1_RX(1) I1C
Port No.

Device

1

I1C1

pin

SCL
SDA
I1C1
SCL
SDA
表 I.1.1 I1C 接続ピン

1

MCU pinconnection

PB8
PB9
PB10
PB11

Arduino D15
Arduino D14(3) SPI
Port No.

Devicepin

MCU pinconnection

1

SPI1

SCK

PA5

Arduino D13

113

MISO
MOSI
SPI1
SCK
MISO
MOSI
表 I.3.1 SPI 接続ピン

1

PA6
PA7
PB13
PB14
PB15

Arduino D11
Arduino D11(4) ADCPort No.

1

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

Device1

USART1pin

MCU pinconnection

TX
PA1
RX
PA3
USART1
TX
PA9
RX
PA10
表 I.5.1 UART ポート割り当て

1

ST-LINK TX
ST-LINK RX
Arduino D8
Arduino D1(6) その他
RTC ドライバを使用可能
Adafruit 1.8” TFT Shield：ADC、LCD 動作、SD カード通信できず
RedBear BLE Shield1.1 動作

Appendix J

STM32L073 Nucleo-64

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

CN6
power

CN8
analogPin No.

Pin 名

MCU pin

1
NC
1
IOREF
3
RESET
NRST
4
+3V3
5
+5V
6
GND
7
GND
8
VIN
1
A0
PA0
1
A1
PA1
3
A1
PA4
4
A3
PB0
5
A4
PC1 or PB96A5
PC0 or PB8
図 J.1.1 左 Arduino connector 設定

機能

3.3V Ref
RESET
3.3V input/output
5V output
GroundGroundPower input
ADC_IN0
ADC_IN1
ADC_IN4
ADC_IN8
ADC_IN11 or I1C1_SDA
ADC_IN10 or I1C1_SCL

CN No.

Pin No.

Pin 名

MCU pin機能

CN5
digital

10
9
8
7
6
5
4

D15
D14
AREF
GND
D13
D11
D11

PB8
PB9
PA5
PA6
PA7

I1C1_SCL
I1C1_SDA
AVDD
GroundSPI1_SCKSPI1_MISO
TIM11_CH1 or SPI1_MOSI

114

CN9
degital

3
D10
PB6
1
D9
PC7
1
D8
PA9
8
D7
PA8
7
D6
PB10
6
D5
PB4
5
D4
PB5
4
D3
PB3
3
D1
PA10
1
D1
PA1
1
D0
PA3
図 J.1.1 右 Arduino connector 設定

SPI1_CS
TIM3_CH1- or USART1_TX
TIM1_CH3
TIM3_CH1
TIM1_CH1- or USART1_RX
USART1_TX
USART1_RX(1) I1C
Port No.

Device

1

I1C1

pin

SCL
SDA
I1C1
SCL
SDA
I1C3
SCL
SDA
表 J.1.1 I1C 接続ピン

1
3

MCU pinconnection

PB8
PB9
PB10
PB11
PA8
PB4

Arduino D15
Arduino D14

Arduino D7
Arduino D6(3) SPI
Port No.

Device

1

SPI1

pin

SCK
MISO
MOSI
SPI1
SCK
MISO
MOSI
表 J.3.1 SPI 接続ピン

1

MCU pinconnection

PA5
PA6
PA7
PB13
PB14
PB15

Arduino D13
Arduino D11
Arduino D11(4) ADCPort No.

1

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

Device1

USART11pin

MCU pin

TX
PA1
RX
PA3
USART1
TX
PA9
RX
PA10
表 J.5.1 UART ポート割り当て

connection

ST-LINK TX
ST-LINK RX
Arduino D8
Arduino D1(6) その他
RTC ドライバを使用可能
Adafruit 1.8” TFT Shield：ADC、LCD、SD カード動作
RedBear BLE Shield1.1 動作

Appendix K

STM32L476 Nucleo-64

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

115

(1) Arduino connectors 定義
CN No.

CN6
power

CN8
analogPin No.

CN No.

CN5
digitalCN9degital

MCU pin

Pin 名

1
NC
1
IOREF
3
RESET
NRST
4
+3V3
5
+5V
6
GND
7
GND
8
VIN
1
A0
PA0
1
A1
PA1
3
A1
PA4
4
A3
PB0
5
A4
PC1 or PB96A5
PC0 or PB8
図 K.1.1 左 Arduino connector 設定
Pin No.

MCU pin

Pin 名

10
D15
PB8
9
D14
PB9
8
AREF
7
GND
6
D13
PA5
5
D11
PA6
4
D11
PA7
3
D10
PB6
1
D9
PC7
1
D8
PA9
8
D7
PA8
7
D6
PB10
6
D5
PB4
5
D4
PB5
4
D3
PB3
3
D1
PA10
1
D1
PA1
1
D0
PA3
図 K.1.1 右 Arduino connector 設定

機能

3.3V Ref
RESET
3.3V input/output
5V output
GroundGroundPower input
ADC11_IN5
ADC11_IN6
ADC11_IN9
ADC11_IN15
ADC113_IN1 or I1C1_SDA
ADC113_IN1 or I1C1_SCL

機能

I1C1_SCL
I1C1_SDA
AVDD
GroundSPI1_SCKSPI1_MISO
TIM17_CH1 or SPI1_MOSITIM4_CH1 or SPI1_CS
TIM3_CH1- or USART1_TX
TIM1_CH3
TIM3_CH1
TIM1_CH1- or USART1_RX
USART1_TX
USART1_RX(1) I1C
Port No.

Device

1

I1C1

pin

SCL
SDA
I1C1
SCL
SDA
I1C3
SCL
SDA
表 K.1.1 I1C 接続ピン

1
3

MCU pinconnection

PB8
PB9
PB10
PB11
PC0
PC1

Arduino D15
Arduino D14

Arduino A5
Arduino A4(3) SPI
Port No.

Devicepin

MCU pinconnection

1

SPI1

SPI1

PA5
PA6
PA7
PB13

Arduino D13
Arduino D11
Arduino D11

1

SCK
MISO
MOSI
SCK

116

MISO
MOSI
SPI3
SCK
MISO
MOSI
表 K.3.1 SPI 接続ピン

3

PB14
PB15
PC10
PC11
PC11

(4) ADCPort No.

1
1
3

Device

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

Device1

USART1pin

MCU pin

TX
PA1
RX
PA3
USART1
TX
PA9
RX
PA10
表 K.5.1 UART ポート割り当て

1

connection

ST-LINK TX
ST-LINK RX
Arduino D8
Arduino D1(6) その他
RTC ドライバを使用可能
Adafruit 1.8” TFT Shield：ADC、LCD は動作、SD カードは動作せず
RedBear BLE Shield1.1 動作

Appendix L

STM32L476 Discovery

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

Device

1

I1C1

pin

SCL
SDA
I1C1
SCL
SDA
I1C3
SCL
SDA
表 L.1.1 I1C 接続ピン

1
3

MCU pinconnection

PB8
PB9
PB10
PB11
PC0
PC1

Arduino D15
Arduino D14

Arduino A5
Arduino A4(3) SPI
Port No.

Devicepin

MCU pinconnection

1

SPI1

SPI1

3

SPI3

PA5
PA6
PA7
PB13
PB14
PB15
PC10
PC11
PC11

Arduino D13
Arduino D11
Arduino D11

1

SCK
MISO
MOSI
SCK
MISO
MOSI
SCK
MISO
MOSI

117

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

1
1
3

Device

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

Device1

USART1pin

MCU pinconnection

TX
PD5
RX
PD6
USART1
TX
PB6
RX
PB7
表 L.5.1 UART ポート割り当て

1

ST-LINK TX
ST-LINK RX(6) その他
RTC ドライバを使用可能

Appendix M

STM32F723 Discovery

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

CN6
power

CN8
analogPin No.

Pin 名

MCU pin

1
NC
1
IOREF
3
RESET
NRST
4
+3V3
5
+5V
6
GND
7
GND
8
VIN
1
A0
PA6
1
A1
PA4
3
A1
PC4
4
A3
PF10
5
A4
PC1
6
A5
PC0
図 M.1.1 左 Arduino connector 設定

機能

3.3V Ref
RESET
3.3V input/output
5V output
GroundGroundPower input
ADC1_IN6
ADC1_IN4
ADC1_IN14
ADC3_IN8
ADC1_IN10
ADC1_IN11

CN No.

Pin No.

Pin 名

MCU pin機能

CN5
digital

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

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

PH4
PH5
PA5
PB4
PB5
PA1
PH6
PE4
PE3
PE6
PB0

I1C1_SCL
I1C1_SDA
AVDD
GroundSPI1_SCKSPI1_MISO
TIM17_CH1 or SPI1_MOSI
NSS1
TIM11_CH1
TIM9_CH1
TIM3_CH3

CN9
degital

118

5
D4
PH3
4
D3
PE5
3
D1
PC5
1
D1
PA1
1
D0
PA3
図 M.1.1 右 Arduino connector 設定

TIM9_CH1
USART1_TX
USART1_RX(1) I1C
Port No.

Device

1

I1C1

pin

SCL
SDA
I1C1
SCL
SDA
I1C3
SCL
SDA
表 M1.1 I1C 接続ピン

1
3

MCU pinconnection

PB8
PB9
PH4
PH5
PA8
PH8

wm8994
wm8994
Arduino D15
Arduino D14ft06x06
ft06x06(3) SPI
Port No.

Device

1

SPI1

pin

SCK
MISO
MOSI
表 M3.1 SPI 接続ピン

MCU pinconnection

PA5
PH4
PH5

Arduino D13
Arduino D11
Arduino D11(4) ADCPort No.

1
1
3

Device

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

Device1

USART6pin

MCU pinconnection

TX
PC6
RX
PC7
USART1
TX
PA1
RX
PA1
表 M.5.1 UART ポート割り当て

1

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

(6) その他
RTC ドライバを使用可能
USB-OTG FULL ポートサポート、HIGH ポートは動作しない

Appendix N

STM32F4R5 Nucleo-144

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

Pin No.

Pin 名

MCU pin

機能

CN6
power

1
1
3
4
5
6

NC
IOREF
RESET
+3V3
+5V
GND

NRST
-

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

CN8analog

7
GND
8
VIN
1
A0
PA3
1
A1
PC0
3
A1
PC3
PC1
4
A3
PC4
5
A4
PC5
6
A5
図 N.1.1 左 Arduino connector 設定

CN No.

CN5
digitalCN9degitalPin No.

MCU pin

Pin 名

10
D15
PB8
9
D14
PB9
8
AREF
7
GND
6
D13
PA5
5
D11
PA6
4
D11
PA7
3
D10
PD14
1
D9
PD15
1
D8
PF11
8
D7
PF13
7
D6
PE9
6
D5
PE11
D4
PF14
5
D3
PE13
4
D1
PF15
3
D1
PD8
1
D0
PD9
1
図 N.1.1 右 Arduino connector 設定

GroundPower input
ADC11_IN8
ADC113_IN1
ADC113_IN14
ADC113_IN1
ADC11_IN13
ADC11_IN14

機能

I1C1_SCL
I1C1_SDA
AVDD
GroundSPI1_SCKSPI1_MISOTIM_E_PWM1 or SPI1_MOSISPI1_CS/TIM4_CH3
TIM4_CH4
TIM1_CH1
TIM1_CH1
TIM1_CH3
USART3_TX
USART3_RX(8) I1C
Port No.

Device

1

I1C1

pin

SCL
SDA
I1C1
SCL
SDA
I1C3
SCL
SDA
表 M1.1 I1C 接続ピン

1
3

MCU pinconnection

PB8
PB9
PB10
PB11
PC0
PC1

Arduino D15
Arduino D14-(9) SPI
Port No.

Device

1

SPI1

1

3

pin

SCK
MISO
MOSI
SPI1
SCK
MISO
MOSI
SPI3
SCK
MISO
MOSI
表 M3.1 SPI 接続ピン

MCU pinconnection

PA5
PA6
PA7
B13
B14
B15
C10
C11
C11

Arduino D13
Arduino D11
Arduino D11
-

110

(10)
Port No.

1

ADC
DeviceADC1
表 M.4.1 ADC ポート割り当て

(11)

USART

Port No.

Device1

LPUART1pin

MCU pinconnection

TX
PG8
RX
PG9
USART3
TX
PD8
RX
PD9
表 M.5.1 UART ポート割り当て

1

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

(11)
その他
RTC ドライバを使用可能
Adafruit 1.8” TFT Shield：ADC、LCD は動作、SD カードは動作せず
USB-OTG FULL は 1.4.0 で動作確認できませんでしたが、1.4.1 で動作しました。電源設定の問題でした。

Appendix O

STM32G071 Nucleo-64

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

CN6
power

CN8
analogPin No.

Pin 名

MCU pin

1
NC
1
IOREF
3
RESET
NRST
4
+3V3
5
+5V
6
GND
7
GND
8
VIN
1
A0
PA0
1
A1
PA1
3
A1
PA1
PB1
4
A3
PB11 or PB9
5
A4
PB11 or PB8
6A5
図 O.1.1 左 Arduino connector 設定

機能

3.3V Ref
RESET
3.3V input/output
5V output
GroundGroundPower input
ARD_A0_IN0
ARD_A1_IN1
ARD_A1_IN4
ARD_A3_IN9
ARD_A4_IN15/I1C1_SCL or I1C1_SCL
ARD_A5_IN16/I1C1_SDA or I1C1_SDA

CN No.

Pin No.

Pin 名

MCU pin機能

CN5
digital

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

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

PB8
PB9
PA5
PA6
PA7
PB0
PC7
PA9
PA8
PB14
PB4
PB5

I1C1_SCL
I1C1_SDA
AVDD
GroundSPI1_SCKSPI1_MISO
SPI1_MOSI/TIM14_CH1
SPI1_CS/TIM3_CH3
TIM3_CH1
TIM15_CH1
TIM3_CH1-

CN9
degital

111

D3
PB3
4
D1
PA10
3
D1
PC4
1
D0
PC5
1
図 O.1.1 右 Arduino connector 設定

TIM1_CH1
USART1_TX
USART1_RX(1) I1C
Port No.

Device

1

I1C1

pin

SCL
SDA
I1C1
SCL
SDA
表 O1.1 I1C 接続ピン

1

MCU pinconnection

PB8
PB9
PB11
PB11

Arduino D15
Arduino D14
Arduino A4
Arduino A5(3) SPI
Port No.

Device

1

SPI1

pin

SCK
MISO
MOSI
SPI1
SCK
MISO
MOSI
表 O3.1 SPI 接続ピン

1

MCU pinconnection

PA5
PA6
PA7
A0
A3
A10

Arduino D13
Arduino D11
Arduino D11-

MCU pinconnection(4) ADCPort No.

1

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

Device1

USART1

pin

TX
PA1
RX
PA3
USART1
TX
PC4
RX
PC5
表 O.5.1 UART ポート割り当て

1

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

(6) その他
RTC ドライバを使用可能
Adafruit 1.8” TFT Shield：ADC、LCD は動作、SD カードは動作せず
RedBear BLE Shield1.1, TB001:uart/lcd シールドは動作

Appendix P

STM32H743 Nucleo-144

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

Pin No.

Pin 名

MCU pin

機能

CN6
power

1
1
3
4
5
6
7

NC
IOREF
RESET
+3V3
+5V
GND
GND

NRST
-

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

CN8
analog

8
VIN
1
A0
PA3
1
A1
PC0
3
A1
PC3
PF3
4
A3
PF5
5
A4
PF10
6
A5
図 P.1.1 左 Arduino connector 設定

CN No.

CN5
digitalCN9degitalPin No.

MCU pin

Pin 名

10
D15
PB8
9
D14
PB9
8
AREF
7
GND
6
D13
PA5
5
D11
PA6
4
D11
PA7
3
D10
PD14
1
D9
PD15
1
D8
PF11
8
D7
PF13
7
D6
PE9
6
D5
PE11
D4
PF14
5
D3
PE13
4
D1
PF15
3
D1
PG14
1
D0
PG9
1
図 P.1.1 右 Arduino connector 設定

Power input
ADC11_IN15
ADC113_IN10
ADC113_IN13
ADC3_IN5
ADC3_IN4 or I1C1_SDA(PB9)
ADC3_IN6 or I1C1_SCL(PB8)

機能

I1C1_SCL
I1C1_SDA
AVDD
GroundSPI1_SCKSPI1_MISO
SPI1_MOSI/TIM14_CH1
SPI1_CS/TIM4_CH3
TIM4_CH4
TIM1_CH1
TIM1_CH1
TIM1_CH3
USART6_TX/LPUART1_TX
USART6_RX/LPUART1_RX(1) I1C
Port No.

Device

1

I1C1

pin

SCL
SDA
I1C1
SCL
SDA
I1C3
SCL
SDA
I1C4
SCL
SDA
表 P1.1 I1C 接続ピン

13
4

MCU pinconnection

PB8
PB9
PH1
PH0
PH7
PH8
PD11
PB13

Arduino D15
Arduino D14(3) SPI
Port No.

Device

1

SPI1

1

3

pin

SCK
MISO
MOSI
SPI1
SCK
MISO
MOSI
SPI3
SCK
MISO
MOSI
表 P3.1 SPI 接続ピン

MCU pinconnection

PA5
PA6
PA7
PB13
PB14
PB15
PC10
PC11
PC11

Arduino D13
Arduino D11
Arduino D11-113

(4) ADCPort No.

1
1
3

Device

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

Device1

USART3pin

MCU pinconnection

TX
PD8
RX
PD9
LPUART1
TX
PB6
RX
PB7
表 P.5.1 UART ポート割り当て

1

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

(6) その他
RTC ドライバを使用可能
Adafruit 1.8” TFT Shield：ADC、LCD は動作、SD カードは動作せず
TB001:uart/lcd シールドは動作
USB-OTG はエナミュレーション中に通信エラーが発生して停止

Appendix Q

STM32G474/431 Nucleo-64

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

CN6
power

CN8
analogPin No.

Pin 名

MCU pin

1
NC
1
IOREF
3
RESET
NRST
4
+3V3
5
+5V
6
GND
7
GND
8
VIN
1
A0
PA0
1
A1
PA1
3
A1
PA4
PB0
4
A3
PC1
5
A4
PC0
6
A5
図 Q.1.1 左 Arduino connector 設定

機能

3.3V Ref
RESET
3.3V input/output
5V output
GroundGroundPower input
ADC11_IN1
ADC11_IN1
ADC11_IN17
ADC3_IN11 or ADC1_IN15
ADC11_IN7 or I1C1_SDA(PB9)
ADC11_IN6 or I1C1_SCL(PA15)

CN No.

Pin No.

Pin 名

MCU pin機能

CN5
digital

10
9
8
7
6
5
4
3
1
1

D15
D14
AREF
GND
D13
D11
D11
D10
D9
D8

PB8
PB9
PA5
PA6
PA7
PB6
PC7
PA9

I1C1_SCL
I1C1_SDA
AVDD
GroundSPI1_SCKSPI1_MISO
SPI1_MOSI/TIM3_CH1
SPI1_CS/TIM4_CH1
TIM3_CH1 or TIM8_CH1
-

114

CN9
degital

8
D7
PA8
7
D6
PB10
6
D5
PB4
D4
PB5
5
D3
PB3
4
D1
PA10
3
D1
PC4/PA1
1
D0
PC5/PA31
図 Q.1.1 右 Arduino connector 設定

TIM1_CH3
TIM3_CH1
TIM1_CH1
USART1_TX/LPUART1_TX
USART1_RX/LPUART1_RX(1) I1C
Port No.

Device

1

I1C1

1
3
4

pin

SCL
SDA
I1C1
SCL
SDA
I1C3
SCL
SDA
I1C4
SCL
SDA
表 Q1.1 I1C 接続ピン

MCU pinconnection

PB8
PB9
PA8
PA9
PF3
PF4

Arduino D15
Arduino D14
Arduino D7
Arduino D8

対応しない
対応しない

(3) SPI
Port No.

Device

1

SPI1

1

3

pin

SCK
MISO
MOSI
SPI1
SCK
MISO
MOSI
SPI3
SCK
MISO
MOSI
表 P3.1 SPI 接続ピン

MCU pinconnection

PA5
PA6
PA7
PB13
PB14
PB15
PC10
PC11
PC11

Arduino D13
Arduino D11
Arduino D11-

MCU pinconnection(4) ADCPort No.

1
1

Device

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

Device1

LPUART1

1

pin

TX
PA1
RX
PA3
USART1
TX
PC4
RX
PC5
表 Q.5.1 UART ポート割り当て

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

(6) その他
RTC ドライバを使用可能
Adafruit 1.8” TFT Shield：ADC、LCD は動作、SD カードは初期化中通信エラー
TB001:uart/lcd シールドは動作
USB シールドを用いて、USB-DEVICE は動作

115Appendix R

STM32WB55 Nucleo

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

CN6
power

CN8
analog

CN No.

CN5
digitalCN9degitalPin No.

MCU pin

Pin 名

1
NC
1
IOREF
3
RESET
NRST
4
+3V3
5
+5V
6
GND
7
GND
8
VIN
1
A0
PC0
1
A1
PC1
3
A1
PA1
PA0
4
A3
PC3
5
A4
PC1
6
A5
図 R.1.1 左 Arduino connector 設定
Pin No.

MCU pin

Pin 名

10
D15
PB8
9
D14
PB9
8
AREF
7
GND
6
D13
PA5
5
D11
PA6
4
D11
PA7
3
D10
PA4
1
D9
PA9
1
D8
PC11
8
D7
PC13
7
D6
PA8
6
D5
PA15
D4
PC10
5
D3
PA10
4
D1
PC6
3
D1
PA1
1
D0
PA3
1
図 R.1.1 右 Arduino connector 設定

機能

3.3V Ref
RESET
3.3V input/output
5V output
GroundGroundPower input
ADC1_IN1
ADC1_IN1
ADC1_IN5
ADC1_IN6
ADC1_IN4
ADC1_IN3

機能

I1C1_SCL
I1C1_SDA
AVDD
GroundSPI1_SCKSPI1_MISO
SPI1_MOSI/TIM1_CH1
SPI1_CS/TIM1_CH3(PB10)
TIM17_CH1
TIM1_CH1
TIM1_CH1
TIM1_CH3
LPUART1_TX
LPUART1_RX(1) I1C
Port No.

Device

1

I1C1

1

pin

SCL
SDA
I1C3
SCL
SDA
表 R.1.1 I1C 接続ピン

MCU pinconnection

PA8
PA9
PC0
PC1

Arduino D15
Arduino D14
Arduino A0
Arduino A1(3) SPI
Port No.

Devicepin

MCU pinconnection

1

SPI1

SCK
MISO

PA5
PA6

Arduino D13
Arduino D11

116

1

MOSI
SCK
MISO
MOSI
表 R.3.1 SPI 接続ピン
SPI1

PA7
PB13
PB14
PB15

Arduino D11-

MCU pinconnection(4) ADCPort No.

1

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

Device1

USART1

1

pin

TX
PA1
RX
PA3
LPUART1
TX
PC4
RX
PC5
表 R.5.1 UART ポート割り当て

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

(6) その他
RF 有効時は RTC ドライバを使用不可
Adafruit 1.8” TFT Shield：ADC、LCD は動作、SD カードは初期化中通信エラー
TB001:uart/lcd シールドは動作
USB シールドを用いて、USB-DEVICE は動作

Appendix S

STM32MP157C DK2

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

CN6
power

CN8
analogPin No.

Pin 名

MCU pin

1
NC
1
IOREF
3
RESET
NRST
4
+3V3
5
+5V
6
GND
7
GND
8
VIN
1
A0
PF14
1
A1
PF13
3
A1
ANA0
ANA1
4
A3
PC3/PA11
5
A4
PF11/PA116
A5
図 S.1.1 左 Arduino connector 設定

機能

3.3V Ref
RESET
3.3V input/output
5V output
GroundGroundPower input(ADC1_IN0)(ADC1_IN1)(ADC1_IN6)(ADC1_IN1)(ADC1_IN13)

CN No.

Pin No.

Pin 名

MCU pin機能

CN5
digital

10
9
8
7
6
5
4
3

D15
D14
AREF
GND
D13
D11
D11
D10

PA11
PA11
PE11
PE13
PE14
PE11

I1C5_SCL
I1C5_SDA
VREF+
GroundSPI4_SCK
SPI4_MISO
SPI4_MOSI/TIM1_CH4
SPI4_CS/TIM1_CH1

117

CN9
degital

1
D9
PH6
1
D8
PG3
8
D7
PD1
7
D6
PE9
6
D5
PD15
D4
PE10
5
D3
PD14
4
D1
PE1
3
D1
PE8
1
D0
PE7
1
図 S.1.1 右 Arduino connector 設定

TIM11_CH1
TIM1_CH1
TIM4_CH4
TIM4_CH3
UART7_TX
UART7_RX(1) I1C
Port No.

Device

1

I1C1

1
3
4
5

pin

SCL
SDA
I1C1
SCL
SDA
I1C3
SCL
SDA
I1C4
SCL
SDA
I1C5
SCL
SDA
表 S.1.1 I1C 接続ピン

MCU pinconnection

PB8
PB9
PB10
PB11
PH7
PH8
PD11
PD13
PA11
PA11

Arduino D15
Arduino D14

MCU pinconnection(3) SPI
Port No.

Device

1

SPI1

1

3

4

5

pin

SCK
MISO
MOSI
SPI1
SCK
MISO
MOSI
SPI3
SCK
MISO
MOSI
SPI4
SCK
MISO
MOSI
SPI5
SCK
MISO
MOSI
表 S.3.1 SPI 接続ピン

PA5
PA6
PA7
PI1
PI1
PI3
PE0
PD10
PD6
PE11
PE13
PE14
PF7
PF8
PF9

-

Arduino D13
Arduino D11
Arduino D11(4) ADCPort No.

1

Device

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

Devicepin

MCU pinconnection

1

UART7

TX
RX

PE8
PE7

Arduino D1
Arduino D0

118表 S.5.1 UART ポート割り当て(6) その他
iwhi TFT Shield：LCD は実行中まれにタイムアウト発生、SD カードは未評価
I1C は SCL/SDA にプルアップ抵抗を付けると NACK エラーとなる

119