開発ボードPY32L020F1xP-STARTは,Nucleoボードなどと同じく,デバッガPY-LINK部分を折って分離できるようになっています.
Windows PCにUSBケーブルで接続すると,CMSIS-DAPドライバがインストールされます.
このボードはPY32L020F1xPマイコン(Puya)を搭載しています.
32ビットARM Cortex-M0+ CPUコアのマイコンです.
ボードの電源はPY-LINKのUSBインターフェースから供給できます.
ボードには,拡張ピンの他,SWD、リセット,ユーザ・キー,リセット・キー,LEDなどが搭載されています.
| 機能 | マイコンのピン | 内容 | メモ |
|---|---|---|---|
| LED | - | LED1 | PY-LINK LED |
| LED | - | LED2 | VDD |
| LED | PA1 | LED3 | User LED |
| キー | - | K1 | PY-LINK Key |
| キー | PA0 | K2 | User Key |
| キー | PC0 | K3 | Reset Key |
| SPI | PA6 | SPI_NSS | ExternalFLASH |
| SPI | PB2 | SPI_CLK | ExternalFLASH |
| SPI | PA1 | SPI_MISO | ExternalFLASH |
| SPI | PA7 | SPI_MOSI | ExternalFLASH |
ハードウェア
USB Type-Cコネクタ経由で電源を供給のほか,プログラムを書き込めます.
ボード上のジャンパで適切なブートモードを選択しUSBケーブルを接続します.電源が正しく接続されていれば,ボード上のLED1が点灯します.
電源LED
赤色のLEDはボードのTVDDに電源が供給されていることを示します.
その隣にある緑色のLEDは,マイコンのPA1ピンに接続されており,ユーザLEDとして使用できます.
ブートモードの選択
オプションバイトに格納されている設定ビット nBOOT0/nBOOT1 を使用して,3種類のブートモードを選択できます.
| ブートモード選択 | . | モード | . |
|---|---|---|---|
| nBOOT1 | nBOOT0 | ブートメモリサイズBoot memory size ==0 | ブートメモリサイズBoot memory size !=0 |
| X | 0 | メインフラッシュブート | メインフラッシュブート |
| 0 | 1 | SRAMブート | SRAMブート |
| 1 | 1 | N/A | ロードフラッシュブート(Load Flash boots) |
ピン機能の選択
オプション領域の NRST_MODE ビットおよび SWD_MODE ビットを設定することで, PC0 および PB6 の機能を切り替えられます.
PB6 はGPIOまたはSWDに, PC0 はNRSTかGPIOかSWDに割り当てできます.
デフォルトでは,PB6 がSWDに,PC0 が NRST に割り当てられています.
JP3のピン1-2間およびピン3-4間がそれぞれ短絡されています.
設定を変更してピン機能を切り替える場合は,その設定に応じてジャンパの接続も変更する必要があります.
| NRST_SWD_MODE設定 | . | GPIO機能 |
|---|---|---|
| NRST_MODE | SWD_MODE | |
| X | 0 | PC0:NRST PB6:SWD |
| 0 | 1 | PC0:GPIO PB6:SWD |
| 1 | 1 | PC0:SWD PB6:GPIO |
クロックソース
LSEクロックソース
このボードではクロックソースを3つから選択できます.
オンボード水晶発振子(工場出荷時のデフォルト設定)
ボード上の32.768 kHz水晶発振子をHSEクロックソースとして使用します.
PC1からクロック入力
CN3に引き出された PC1 ピンから外部クロック信号を入力できます.
この場合は,ボード上の R49 をオープンにします.
LEXT未使用
マイコンの PB7 および PC1 を GPIO として使用します.
プログラミングおよびデバッグ
ボードにはデバッガPY-LINKが搭載されています.PY-LINKを使って,ボードに搭載されたマイコンPY32L020F1xPに対して,書き込みやデバッグできます.
PY-LINKはSWDインターフェースモードをサポートしています.仮想シリアルポート機能に加え,ジャンパワイヤを使用して PY32L020F1xP の USART1_TX/USART1_RX( PB4 / PB5 )と接続できます.
PY-LINK部分は,ボードを折ることでマイコン部分と分離できます.分離した後でも,CN5コネクタ(工場出荷時には未実装)を介して,PY-LINKのCN1コネクタに接続することで,PY-LINKを使ってPY32L020F1xPへ書き込みやデバッグを行えます.
マイコン
内蔵SRAM
PY32L020シリーズは3KBのSRAMを搭載しています.バイト(8ビット),ハーフワード(16ビット),ワード(32ビット)単位でアクセスできます.
定義されたアドレス範囲外のメモリにアクセスすると、HardFault割り込みが発生します.
フラッシュメモリ
次の2つの物理領域で構成されています.
メインフラッシュ領域
24KB(アプリケーションおよびユーザデータ用).ユーザ設定により,最大4KBをユーザブートローダとして構成できます.
情報領域(0.75KB)
工場出荷時設定バイト(0,128バイト).
次の情報を格納するために使用します.
・ HSI周波数選択値および対応するトリミング値
・ HSIの異なる周波数に対応する消去および書き込み時間の構成パラメータ値
工場出荷時設定用バイト(128バイト)
トリミングデータ(HSIトリミングを含む)および電源投入時の検証コードの格納に使います.
UID(128バイト)
UIDの格納に使います.
オプションバイト(128バイト)
ハードウェアおよびストレージ保護に関する設定を格納します.
ユーザOTPメモリ(128バイト)
ユーザデータを格納します.
フラッシュメモリのインターフェースは,AHBプロトコルに基づいて命令読み出しおよびデータアクセスできます.レジスタを介したフラッシュメモリの基本的な書き込みおよび消去動作を実現します.
内蔵フラッシュメモリ
フラッシュメモリの主な仕様
| メインフラッシュブロック | 最大24KB(6 K × 32ビット) |
|---|---|
| 情報ブロック | 0.75 KB(192 × 32ビット) |
| ページサイズ | 128バイト |
| セクタサイズ | 4KB |
| フラッシュメモリインターフェースの機能 | フラッシュメモリのプログラム/消去動作 |
| . | 書き込み保護 |
| . | 読み出し保護 |
フラッシュメモリの機能概要
フラッシュメモリの構成
フラッシュメモリは,コードおよびデータ定数の両方を格納できる64ビット幅のメモリセルで構成されています.ページサイズは128バイト,セクタサイズは4KBです.
機能的には,メインフラッシュ(最大容量24KB)とインフォメーションフラッシュ(最大容量0.75KB)に分割されます.
メインフラッシュに対しては,ページ消去操作を行うことができます.
書き込み保護が設定されている場合でも,メインフラッシュに対して一括消去(Mass erase)を行えます.
電源制御
電源供給(Power supply)
電源供給概要
| No. | 電源 | 電圧 | 説明 |
|---|---|---|---|
| 1 | VCC | 1.7 ~ 5.5 V | 電源ピンを介して供給されます. |
| 2 | VCCA | 1.7 ~ 5.5 V | ほとんどのアナログモジュールの電源は,VCCパッド(VCCの供給元と同じ) から供給されます |
| 3 | VCCIO | 1.7 ~ 5.5 V | VCCパッド経由で供給されるIO用の電源. |
電圧レギュレータ
このマイコンには,3つの電圧レギュレータが搭載されています.
1:MR(メインレギュレータ)
Runモードで使います.
2:LPR(低消費電力レギュレータ)
Stopモードにおいて,より低い消費電力での動作を可能にします.
3:DLPR(ディープ低消費電力レギュレータ)
低消費電力モードにおいて、最小の消費電力を実現します.
Runモードでは,MRが動作し続けて1.2Vの電圧を出力し,LPRはオフになります.
Stopモードでは,MRまたはLPRのいずれから電力を供給するかをソフトウェアで選択できます.
電源監視
リセット
パワーオンリセット(POR)およびパワーダウンリセット(PDR)機能を内蔵しています.全ての動作モードにおいて機能します.
POR/PDRに加え,BOR(ブラウンアウトリセット)機能も実装されています.
BORを有効にする場合,オプションバイトによってBORの閾値を選択でき,電圧上昇時および下降時の検出ポイントを個別に設定できます.
低消費電力制御
システムリセットまたはパワーオンリセット後,マイコンはデフォルトでRunモード(動作モード)になります.CPUを動作させ続ける必要がない場合には,電力を節約するための低消費電力モードを利用できます.
低消費電力モード
概要
Runモードに加え,3つの低消費電力モードがあります.
1:Sleepモード
CPUクロックを停止させた状態でも,周辺回路(NVIC,SysTickなど)が動作し続けるように設定できます.
2:Stopモード
SRAMおよびレジスタの内容は保持されます.HSI(高速内部発振器)は停止します.
3:Deep_stopモード
Stopモードと同様ですが,復帰(ウェイクアップ)に長い時間を要します.GPIO,IWDG(クロック源:LSE),NRST,LPTIM(クロック源:LSE)によってDeep_stopモードから復帰できます.
Stopモードでは,LSI,LSE,LPTIMを動作させ続けることができます.
Stopモードでは,ソフトウェアによってVR(電圧レギュレータ)の状態を制御し,MR(メインレギュレータ)またはLPR(低消費電力レギュレータ)のどちらから給電するかを設定できます.
LPRで給電する場合,消費電力は低減されますが復帰時間は長くなります.
MRで給電する場合,消費電力は増加しますが,短い時間で復帰できます.
さらに,Runモードにおいても次の方法で消費電力を低減できます.
・システムクロック周波数の低減
・アイドル状態の周辺回路のクロック停止
スリープモード
スリープモードへの移行
スリープモードへ移行するには,WFI(Wait for Interrupt;割り込み待ち)またはWFE(Wait for Event;イベント待ち)命令を実行します.
スリープモードへの移行メカニズムは,次の2つのオプションから選択できます.
どちらを使うかは,Cortex-M0+システム制御レジスタの SLEEPONEXIT ビットで設定します.
Sleep-now(即時スリープ)
SLEEPONEXIT ビットがクリアされている場合, WFI または WFE 命令が実行されると直ちにマイコンはスリープモードに移行します.
Sleep-on-exit(終了時スリープ)
SLEEPONEXIT ビットがセットされている場合,マイコンは最低優先度の ISR (割り込みサービスルーチン)から抜けると直ちにスリープモードに移行します.
スリープモード中,全てのI/Oピンは Run モード(動作モード)と同じ状態を維持します.
スリープモードからの復帰
WFI 命令を使用してスリープモードに移行した場合, NVIC (入れ子構造ベクトル割り込みコントローラ)によって受け付けられた任意の周辺機能割り込みにより,デバイスをスリープモードから復帰させることができます.
WFE 命令を使用してスリープモードに移行した場合,イベントが発生すると直ちにマイコンはスリープモードから復帰します.
復帰イベントは次のいずれかの方法で発生します.
1:
周辺機能制御レジスタを書き換えることで割り込みを有効にする(ただし NVIC では有効にしない)とともに,Cortex-M0+システム制御レジスタの SEVONPEND ビットを有効にします.マイコンが WFE から復帰した際、周辺機能の割り込みペンディングビットをクリアする必要があります.
2:
外部または内部の EXTI ラインをイベントモードに設定します.CPU が WFE から復帰した際、周辺機能の割り込みペンディングビットをクリアする必要はありません.このモードでは,割り込みの入り口/出口処理に時間を費やさないため,最短時間で復帰できます.
Stopモード
Stopモードは,Cortex-M0+のディープスリープ(Deep Sleep)モードに周辺回路のクロックゲーティングを組み合わせたものです.電圧レギュレータは,ノーマルモードまたは低消費電力モードのいずれかに設定可能です.Stopモードでは,HSI はオフになりますが,SRAM およびレジスタの内容は保持されます.
LSI,LSE,LPTIM,IWDGはソフトウェアで設定可能です.低消費電力ウェイクアップ機能や一部の RCC ロジックは動作し続けますが,残りの VDDD ドメイン内のデジタルモジュールへのクロック入力はオフになります.
Stopモード中,全てのI/OピンはRunモードと同じ状態を維持します.
Stopモードへの移行
Stopモードでの消費電力をさらに低減するために, PWR_CR1.LPR を設定することで,異なるStopモードへ移行することができます.
フラッシュメモリへ書き込み中の場合,メモリへのアクセスが完了するまでStopモードへの移行は遅延されます(ソフトウェアは VFlash_SR レジスタの BSY ビットを読み取り,消去および書き込み動作が完了したかどうかを判断します).
APB ドメインへアクセス中の場合にも,APB アクセスが完了するまでStopモードへの移行は遅延されます.
Stopモードからの復帰
割り込みまたはウェイクアップイベントの発行によりStopモードから復帰する際,HSI 発振器がシステムクロックとして選択されます.
電圧レギュレータが低消費電力モードで動作している場合,Stopモードから復帰する際に起動遅延が追加で発生します.
Stopモード中に内部レギュレータをオンのままにしておくと,消費電力は増加しますが,起動時間は短縮されます.
システムクロック周波数の低減
Runモードにおいて,プリスケーラレジスタで分周設定を行うことにより,システムクロック( SYSCLK , HCLK , PCLK )の周波数を低減できます.これらのプリスケーラは,Sleepモードへの移行前に周辺回路のクロック周波数を低減するためにも使用可能です.
周辺回路のクロックゲーティング
Runモードにおいて,個々の周辺回路やメモリの AHB クロック( HCLK )および APB クロック( PCLK )を任意のタイミングで停止させ,消費電力を低減することができます.
Sleepモードでの消費電力をさらに低減するために, WFI または WFE 命令の実行前に周辺回路のクロックを停止させることも可能です.
リセット
パワーリセットとシステムリセットの2種類のリセットがあります.
リセット要因
パワーリセット
パワーリセットは,次のいずれかのイベントが発生したときに生成されます。
・電源投入/電源遮断リセット ( POR/PDR )
・ブラウンアウトリセット ( BOR )
システムリセット
システムリセットは,クロック制御/ステータスレジスタ内のリセットフラグおよび RTC ドメイン内のレジスタを除く,全てのレジスタをリセット値に設定します.
システムリセットは,次のいずれかのイベントが発生したときに生成されます.
・NRSTピン(外部リセット)
・独立ウォッチドッグリセット ( IWDG )
・SYSRESETREQ ソフトウェアリセット
・オプションバイトローダリセット
・パワーリセット (POR/PDR,BOR)
リセット要因は, RCC_CSR レジスタのリセット識別ビットを確認することで特定できます.
NRSTピン(外部リセット)
リセット入力
デバイス内部で生成されたリセットは,このピンには出力されません。
GPIO
特定のオプションビット( NRST_MODE )により, NRST ピンの動作を以下のように設定可能です.
このモードでは,NRST ピンに入力された有効なリセット信号はデバイス内部のロジックに伝達されますが,
このモードでは,GPIO機能(PC0)は使用できません.
パルスジェネレータは,各内部リセット要因に対して,少なくとも40µsのリセットパルス幅を保証します.
このモードでは,このピンをPC10標準GPIOとして使用できます.ピンのリセット機能は使用できません.
リセットはデバイス内部のリセット要因からのみ可能であり,その信号はピンには出力されません.
クロック
クロックソース
外部高速クロック(HSEバイパス)
外部クロックは PA6 から入力されます.
外部クロック信号が有効になると, PA6 のIO入力機能が自動的に有効化されます.その際, PA6 をGPIOとして使用することはできません.
外部低速クロック(LSE)
LSEクリスタルは,32.768kHzの低速外部クリスタルまたはセラミック共振子です.これは,リアルタイムクロックなどに使用できます.
LSEクリスタルのオン/オフはバックアップドメイン制御レジスタ( RCC_BDCR )の LSEON ビットによって制御され,駆動能力は LSE_DRIVER[1:0] によって調整可能です.
バックアップドメイン制御レジスタ( RCC_BDCR )の LSERDY ビットは、LSEクリスタルの発振が安定しているかどうかを示します.起動時には,ハードウェアによってこのビットが1にセットされるまで,LSEクロック信号は出力されません.
クロック割り込みレジスタで許可されている場合,割り込み要求を発生させることができます.
外部クロックソース(LSEバイパス)
OSC32_OUT ピンはフローティング状態にします.
内部高速クロックHSI
内部低速クロックLSI
このモードでは,32.768kHzの周波数を持つ外部クロックソースを供給する必要があります.
バックアップドメイン制御レジスタ( RCC_BDCR )の LSEBYP ビットおよび LSEON ビットを設定することでこのモードを選択できます.
OSC32_OUT ピンをフローティング状態に保ちつつ,デューティ比50%の外部クロック信号を OSC32_IN ピンに接続する必要があります.
内部高速クロックは,システムクロックとして使用します.電源投入時のデフォルトのシステムクロック周波数は24MHzです.ソフトウェア設定により48MHzに切り替えることができます.
内部低速クロックは,IWDG および LPTIM のクロックとして,またデバイスが低速で動作する際のシステムクロックとして使用されます.クロックの中心周波数は32.768kHzに設計されています.
汎用I/O(GPIO)
リセット中およびリセット直後は,代替機能(AF)は有効ではなく,ほとんどのI/Oポートはアナログモードに設定されています.
リセット後,デバッグピンはAFプルアップ/プルダウン状態になります.
- PA2: SWCLK
プルダウンモード - PB6-SWDIO
プルアップモードです.ピンが出力として設定されている場合,出力データレジスタ(GPIOx_ODR)に書き込まれた値がI/Oピンに出力されます.出力ドライバは,プッシュプルモードまたはオープンドレインモードで使用可能です.
入力データレジスタ(GPIOx_IDR)は,AHB クロックサイクルごとにI/Oピン上のデータをキャプチャします.
全てのGPIOピンは,内部プルアップ抵抗およびプルダウン抵抗(弱)を備えており,GPIOx_PUPDRレジスタの値に応じて有効または無効に設定できます.
I/Oピンの代替機能マルチプレクサおよびマッピング
デバイスのI/Oピンは,マルチプレクサを介してオンボードの周辺機能(ペリフェラル)やモジュールに接続されています.このマルチプレクサにより,あるI/Oピンに対して一度に接続できる周辺機能の代替機能(AF)は1つだけに制限されます.そのため,同一のI/Oピンに割り当てられた周辺機能間で競合が発生することはありません.
各I/Oピンは,最大8つの代替機能入力(AF0~AF7)を持つマルチプレクサを備えており,これらは GPIOx_AFRL レジスタ(ピン0~7用)によって設定可能です.
リセット後のマルチプレクサの選択状態は、代替機能0(AF0)です.I/Oは, GPIOx_MODER レジスタを介して代替機能モードに設定されます.
この柔軟なI/Oマルチプレクサ・アーキテクチャに加え,各周辺機能にも代替機能がマッピングされています.
小型パッケージにおいて利用可能な周辺機能の数を最適化するために,異なるI/Oピンに割り当てられます.
特定の構成でI/Oを使用するには,次の手順に従う必要があります.
デバッグ機能
デバイスのリセット後,これらのピンは直ちにデバッガホストで使用可能な代替機能(alternate function)ピンとして割り当てられます.
GPIO
GPIOx_MODER レジスタで,対象のI/Oを出力,入力,またはアナログのいずれかに設定します.
周辺機能の代替機能(Peripheral alternate function)
・GPIOx_AFRL レジスタで,I/Oを目的のAFx(代替機能)に接続します.
・GPIOx_OTYPER,GPIOx_PUPDR,GPIOx_OSPEEDER レジスタを使用して,それぞれのタイプ,プルアップ/プルダウン,および出力速度を選択します.
・GPIOx_MODER レジスタで,対象のI/Oを代替機能として設定します.
追加機能
・ADCやDACの接続は,GPIOモードの設定に関わらず,ADC または DAC のレジスタで有効にできます.ただし, ADC や COMP を使用する場合は, GPIOx_MODER レジスタでGPIOをアナログモードに設定することが推奨されます.
・発振器などの追加機能については,関連する PWR および RCC レジスタで必要な機能を設定します.これらの機能は,標準の GPIO レジスタでの設定よりも優先されます.
I/Oポート制御レジスタ
各GPIOポートには,最大8つのI/Oを設定するための4つの32ビット・メモリマップ制御レジスタ(GPIOx_MODER,GPIOx_OTYPER,GPIOx_OSPEEDR,GPIOx_PUPDR)が用意されています. GPIOx_MODER レジスタは,I/Oモード(入力,出力,AF,アナログ)の選択に使用されます. GPIOx_OTYPER およびGPIOx_OSPEEDR レジスタは,出力タイプ(プッシュプルまたはオープンドレイン)と速度の選択に使用されます. GPIOx_PUPDR レジスタは、I/Oの方向にかかわらず,プルアップまたはプルダウンの選択に使用されます.
各GPIOには,入力データレジスタ( GPIOx_IDR )と出力データレジスタ( GPIOx_ODR )という,2つの16ビット・メモリマップ・データレジスタがあります. GPIOx_ODR は出力するデータを保持し,読み出し/書き込みが可能です.I/Oを介して入力されたデータは,読み出し専用レジスタである入力データレジスタ( GPIOx_IDR )に格納されます.
I/O data bitwise handling
ビットセット/リセットレジスタ( GPIOx_BSRR )は,アプリケーションが出力データレジスタ( GPIOx_ODR )の各ビットを個別にセット(1に設定)およびリセット(0に設定)できるようにする32ビットレジスタです.このレジスタのサイズは GPIOx_ODR の2倍です.
GPIOx_ODR の各ビットには, GPIOx_BSRR 内の2つの制御ビット,BS(i)とBR(i)が対応しています.BS(i)ビットに1を書き込むと,対応するODR(i)ビットがセットされます.
BR(i)ビットに1を書き込むと,対応するODR(i)ビットがリセットされます.
GPIOx_BSRR のビットに0を書き込んでも, GPIOx_ODR の対応するビットには影響しません.GPIOx_BSRR において,あるビットに対してセットとリセットの両方の操作を同時に行おうとした場合は,セット操作が優先されます.
GPIOx_BSRR レジスタを使用してGPIOx_ODR の個々のビット値を変更する操作はワンショットの動作であり、 GPIOx_ODR のビットをロックするものではありません. GPIOx_ODR のビットには,いつでも直接アクセス可能です. GPIOx_BSRR レジスタは,アトミックなビット単位の操作を行う手段を提供します.
GPIOx_ODR レジスタのビット単位の書き込みを行う際,ソフトウェアで割り込みを無効にする必要はありません.単一のアトミックな AHB 書き込みアクセスで,1つまたは複数のビットを変更することが可能です.
GPIOロック機構
GPIOx_LCKR レジスタに対して特定の書き込みシーケンスを実行することで,GPIO制御レジスタを固定(フリーズ)することができます.固定対象となるレジスタは, GPIOx_MODER,GPIOx_OTYPER,GPIOx_OSPEEDR,GPIOx_PUPDR,GPIOx_AFRLです.
GPIOx_LCKR レジスタへの書き込みには,特定の書き込み/読み出しシーケンスを実行する必要があります.このレジスタのビット16に対して適切な LOCK シーケンスが実行されると,LCKR[7:0] の値を使用してI/Oの設定がロックされます(書き込みシーケンス中,LCKR[7:0] の値は一定である必要があります).ポートビットに対してLOCK シーケンスが実行されると,そのポートビットの値は,次のマイコンリセットまたは周辺回路リセットが行われるまで変更できなくなります. GPIOx_LCKR の各ビットは,制御レジスタ(GPIOx_MODER,GPIOx_OTYPER,GPIOx_OSPEEDR,GPIOx_PUPDR,GPIOx_AFRL)内の対応するビットを固定します.
LOCK シーケンスは,GPIOx_LCKR レジスタへのワード(32ビット)アクセスを使用してのみ実行可能です.これは, GPIOx_LCKR のビット16をビット[7:0]と同時に設定する必要があるためです.
I/Oオルタネート機能の入出力
各I/Oで利用可能なオルタネート機能(代替機能)の入出力のいずれかを選択するために,2つのレジスタが用意されています.これらのレジスタを使用することで,ユーザはアプリケーションの要件に応じて,オルタネート機能を別のピンに接続することができます.つまり, GPIOx_AF オルタネート機能レジスタを使用することで,各GPIOに複数の周辺機能が多重化(マルチプレクス)されているのです.これにより,アプリケーションは各I/Oに対して利用可能な機能のいずれかを選択できます.AF選択信号はオルタネート機能の入力と出力で共通なので,特定のI/Oのオルタネート機能入出力として単一のチャネルが選択されます.
全てのポートは外部割り込み機能を備えています.外部割り込みラインを使用するには,対象のピンがアナログモードに設定されておらず,かつ発振器用ピンとして使用されていない必要があります(これにより,入力トリガが有効に保たれます).
I/Oポートが入力として設定されている場合
・ 出力バッファは無効になります.
・ シュミットトリガ入力が有効になります.
・ GPIOx_PUPDR レジスタの値に応じて,プルアップ抵抗およびプルダウン抵抗が有効になります.
・ I/Oピン上のデータは,AHB クロックサイクルごとに入力データレジスタにサンプリングされます.
・ 入力データレジスタへの読み出しアクセスにより,I/Oの状態が取得されます.
出力構成
I/Oポートが出力として設定されている場合
出力バッファは無効になります
・オープンドレインモード
出力レジスタが 0 の場合,N-MOSがアクティブになります.出力レジスタが 1 の場合,ポートはHi-Z状態になります(P-MOSはアクティブになりません).
・プッシュプルモード
出力レジスタが 0 の場合,N-MOSがアクティブになります。出力レジスタが 1 の場合,P-MOSがアクティブになります.
・ シュミットトリガ入力が有効になります.
・ GPIOx_PUPDR レジスタの値に応じて,プルアップ抵抗およびプルダウン抵抗が有効になります.
・ I/Oピンのデータは, AHB クロックサイクルごとにサンプリングされ,入力データレジスタに取り込まれます.
・ 入力データレジスタを読み出すと,I/Oの状態が取得されます.
・ 出力データレジスタを読み出すと,最後に書き込まれた値が取得されます.
代替機能の設定
I/Oポートが代替機能として設定されている場合:
・ 出力バッファは,オープンドレイン・モードまたはプッシュプル・モードに設定可能です.
・ 出力バッファは,内部周辺回路からの信号(代替機能出力)によって駆動されます.
・ シュミットトリガ入力が有効になります.
・ PIOx_PUPDR レジスタの値に応じて,プルアップ抵抗およびプルダウン抵抗が有効になります.
・ I/Oピン上のデータは,AHBクロックサイクルごとにサンプリングされ,入力データレジスタに取り込まれます.
・ 入力データレジスタを読み出すことで,I/Oの状態を取得できます.
開発環境構築
筆者はWindows環境で試しました.
PY32_GCC_SDE_1.0.5(以下,インストーラと呼ぶ) をダウンロードして実行することで,開発に必要なものがだいたいインストールできるようです.Example(C:\Program Files (x86)\PuyaSDE\sdk\example)も含まれています.
以下,使用するソフトウェアを列挙します.
VSCode
インストール中にチェックボックスをチェックすると,VSCodeのインストールも行われるようです.
Embedded IDE
統合開発環境としてEmbedded IDEを使います.これはVSCodeの拡張機能なので,VSCodeも必要です.
Embedded IDEは,8051/STM8/Cortex-M/MIPS/RISC-Vのコーディング,デバッグ,書き込みをサポートするようです.
MITライセンスで提供されています.
VSCodeを起動して,手動でインストールします.
GCC
GNU Arm Embedded Toolchain と MSYS です.
インストーラにより自動でインストールされます.
CMSIS
CMSISはArmによって作られた,APIやソフトウェアコンポーネント,ツールのセットです.マイコンのハードウェアを抽象化するために汎用ツールインターフェースが定義され,プロセッサや周辺機器のシンプルなソフトウェアインターフェースが提供されます.
これにより,Cortex-MやCortex-Aの開発がある程度共通化されます.
インストーラを実行すると自動でダウンロード,インストールされるようです.
OpenOCD
デバッグ用のインターフェースです.
PyOCD
=== 必須かどうか,調査中 ===
サンプル使用ガイド
LEDサンプル
サンプルの目的
ボードにはGPIOに接続されたLEDが1つ搭載されています.ボード上のユーザLEDを点滅させます.
実行結果
PY32xxxx_Firmware サンプルGPIO_Toggleをボードに書き込み,リセットして実行すると,緑色のLEDが点滅します.
キー入力サンプル
サンプルの目的
ボードにはユーザボタンが1つ搭載されています.ユーザボタンの押下状態はGPIO信号で検出できます.外部割り込みを使用してボタン入力を検出する方法を説明します.
実行結果
PY32xxxx_Firmware サンプルEXTI_ITをボードに書き込み,リセットして実行します.ボタンを1回押すと,緑色のLEDの点灯・消灯状態が1回切り替わります.
フラッシュメモリサンプル
サンプルの目的
マイコンにはSPIインターフェースを介してフラッシュメモリが接続されています.このサンプルでは,SPI経由でフラッシュメモリの読み書きします.
注意:
- ユーザ自身でR41,R45,R46,R47,R48の位置に0Ω抵抗を実装(はんだ付け)する必要があります.
- フラッシュメモリの最高動作電圧は3.6Vです.TVDDの電圧が3.3Vを超えないようにすることをお勧めします.
実行結果
PY32xxxxファームウェア・サンプルSPI_FullDuplex_ExternalFLASHをボードに書き込み,リセットして実行してください.緑色のLEDが点灯し続ければフラッシュメモリの読み書きは成功、そうでなければ失敗です.


