ADC
- 10bit分解能
- 外部チャンネル 8、内部チャンネル 2
- 単一変換、連続変換、自動スキャン、外部トリガなど
- 電圧監視機能(アナログウォッチドッグ)
ADCが妙に多機能だけれど、余計な機能は使わなければ良い。
(オペアンプの設定は、拡張構成 EXTEND)
内部チャンネル
- CH8 : Vref 内部基準電圧(約 1.2V)
- CH9 : Vcal キャリブレーション値 (工場出荷時に Vrefを測定した固定値)
キャリブレーション
- CTLR2の RSTCALに 1を書くことでキャリブレーションレジスタを初期化する。RSTCALがハードウェアによって 0にクリアされるのを待つことで初期化完了を確認する。
- CALに 1を書くことでキャリブレーションを開始する。キャリブレーションが完了すると、ハードウェアはCALビットを自動的にクリアし、キャリブレーションコードを ADC_RDATARに格納する。
ADCモジュールの電源投入時にキャリブレーションを実行することが推奨される。
キャリブレーションを開始する前に、ADCモジュールが電源投入状態(ADON==1)であることを、少なくとも2クロックサイクル以上維持している必要がある。
変換モード
単一変換モード
1チャンネルの変換を行い動作を終了する。
単一スキャンモード
選択された複数のチャンネルを順番に変換を行い動作を終了する。
トリガインジェクション
通常グループのスキャン中にインジェクショングループの変換が開始されると、現在の変換はキャンセルされ、インジェクショングループの変換が行われる。インジェクショングループの変換がすべて終了すると、中断されていた通常チャンネルの変換が再開される。
インジェクショングループの変換中に通常グループの変換開始イベントが発生した場合、インジェクショングループの変換が終了したあとに通常グループの変換が開始される。
自動インジェクション
通常グループの変換が終了した後、自動的にインジェクショングループの変換が実行される。
単一間欠モード
変換トリガで、グループ内の数チャンネルずつ変換を行う。変換するチャンネル数を設定可能。
連続変換モード
変換が終了すると、直ちに次の変換を開始する。
アナログウォッチドッグ
AD変換結果が、設定したしきい値より低いまたは高い時にステータスビットをセットする。割り込み生成も可能。
ADCレジスタ
ADC1->STATR
ADC1->CTLR1
ADC1->CTLR2
ADC1->SAMPTR1
ADC1->SAMPTR2
ADC1->IOFR1
ADC1->IOFR2
ADC1->IOFR3
ADC1->IOFR4
ADC1->WDHTR
ADC1->WDLTR
ADC1->RSQR1
ADC1->RSQR2
ADC1->RSQR3
ADC1->ISQR
ADC1->IDATAR1
ADC1->IDATAR2
ADC1->IDATAR3
ADC1->IDATAR4
ADC1->RDATAR
ADC1->DLYR
STATR ADCステータスレジスタ 初期値 0x00000000
[31: 5] RO Reserved
[ 4] STRT RW0 通常チャンネル変換開始状態 1:変換開始された
[ 3] JSTRT RW0 インジェクションチャンネル変換開始状態 1:変換開始された
[ 2] JEOC RW0 インジェクションチャンネル変換完了状態 1:すべてのチャンネルの変換完了した
[ 1] EOC RW0 通常・インジェクション変換完了状態 1:いずれかの変換完了した
0を書くか、RDATARレジスタの読み出しでクリアされる
[ 0] AWD RW0 アナログウォッチドッグフラグ 1:イベントが発生した
CTLR1 ADCコントロールレジスタ1 初期値 0x02000000
[31:27] RO Reserved
[26:25] CALVOL[1:0] RW キャリブレーション電圧選択 01:AVDD*(2/4) 10:AVDD*(3/4) 他の値禁止
[ 24] RO Reserved
[ 23] AWDEN RW 通常チャンネルアナログウォッチドッグ有効化 1:有効
[ 22] JAWDEN RW インジェクションチャンネルアナログウォッチドッグ有効化 1:有効
[21:16] RO Reserved
[15:13] DISCNUM[2:0] RW 間欠モードで変換するチャンネル数 000:1 ~ 111:8
[ 12] JDISCEN RW インジェクションチャンネル間欠モード有効化 1:有効
[ 11] DISCEN RW 通常チャンネル間欠モード有効化 1:有効
[ 10] JAUTO RW 自動インジェクション自動切り替え有効化 1:有効
[ 9] AWDSGL RW スキャンモードでのアナログウォッチドッグチャンネル選択
1:単一のチャンネルで有効 AWDCH[4:0]でチャンネルを選択
0:全てのチャンネルで有効
[ 8] SCAN RW スキャンモード有効化 1:有効
IOFRx, RSQRxで選択されたチャンネルをすべてのチャンネルを連続変換
[ 7] JEOCIE RW インジェクションチャンネル変換終了割り込み有効化 1:有効
[ 6] AWDIE RW アナログウォッチドッグ割り込み有効化 1:有効
[ 5] EOCIE RW 変換終了割り込み有効化 1:有効 (通常、インジェクションどちらでも発生)
[ 4: 0] AWDCH[4:0] RW アナログウォッチドッグチャンネル選択 0~9
CTLR2 ADCコントロールレジスタ2 初期値 0x00000000
[31:23] RO Reserved
[ 22] SWSTART RW 通常チャンネル変換開始 1:開始 (ハードウェアでクリアされる)
[ 21] JSWSTART RW インジェクションチャンネル変換開始 1:開始 (ハードウェアでクリアされる)
[ 20] EXTTRIG RW 通常チャンネル外部トリガ有効化 1:有効
[19:17] EXTSEL[2:0] RW 通常チャンネル外部トリガ選択
000:TIM1_TRGO 011:TIM2_TRGO 110:PC3 / PC2
001:TIM1_CC1 100:TIM2_CC1 111:SWSTART
010:TIM1_CC2 101:TIM2_CC2
[ 16] RO Reserved
[ 15] JEXTTRIG RW インジェクションチャンネル外部トリガ有効化 1:有効
[14:12] JEXTSEL[2:0] RW インジェクションチャンネル外部トリガ選択
000:TIM1_CC3 100:予約
001:TIM1_CC4 101:予約
010:TIM2_CC3 110:PD1 / PA2
011:TIM2_CC4 111:JSWSTART
[ 11] ALIGN RW データアライメント設定 1:左詰め 0:右詰め
[10: 9] RO Reserved
[ 8] DMA RW DMA有効化 1:有効
[ 7: 4] RO Reserved
[ 3] RSTCAL RW キャリブレーションレジスタを初期化 1:初期化 (ハードウェアでクリアされる)
[ 2] CAL RW キャリブレーション開始 1:開始 (ハードウェアでクリアされる)
[ 1] CONT RW 連続変換モード有効化 1:有効 0を書くまで変換を続ける
[ 0] ADON RW ADCオンオフ制御
0の状態で 1を書くと ADCはパワーダウンモードから復帰する
1の状態で 1を書くと変換を開始する(ADON以外のビットを変更すると開始されない)
0を書くと ADCはパワーダウンモードへ移行する
SAMPTR1 ADCサンプルタイムレジスタ1 初期値 0x00000000
[31:18] RO Reserved
[17:15] SMP15 RW CH15 のサンプル時間設定ビット
000: 3 cycles 100: 43 cycles
001: 9 cycles 101: 57 cycles
010:15 cycles 110: 73 cycles
011:30 cycles 111:241 cycles
[14:12] SMP14 RW CH14 のサンプル時間設定ビット
[11: 9] SMP13 RW CH13 のサンプル時間設定ビット
[ 8: 6] SMP12 RW CH12 のサンプル時間設定ビット
[ 5: 3] SMP11 RW CH11 のサンプル時間設定ビット
[ 2: 0] SMP10 RW CH10 のサンプル時間設定ビット
SAMPTR2 ADCサンプルタイムレジスタ2 初期値 0x00000000
[31:30] RO Reserved
[29:27] SMP9 RW CH9 のサンプル時間設定ビット
000: 3 cycles 100: 43 cycles
001: 9 cycles 101: 57 cycles
010:15 cycles 110: 73 cycles
011:30 cycles 111:241 cycles
[26:24] SMP8 RW CH8 のサンプル時間設定ビット
[23:21] SMP7 RW CH7 のサンプル時間設定ビット
[20:18] SMP6 RW CH6 のサンプル時間設定ビット
[17:15] SMP5 RW CH5 のサンプル時間設定ビット
[14:12] SMP4 RW CH4 のサンプル時間設定ビット
[11: 9] SMP3 RW CH3 のサンプル時間設定ビット
[ 8: 6] SMP2 RW CH2 のサンプル時間設定ビット
[ 5: 3] SMP1 RW CH1 のサンプル時間設定ビット
[ 2: 0] SMP0 RW CH0 のサンプル時間設定ビット
IOFR1 ADCインジェクションチャンネルデータオフセットレジスタ1 初期値 0x00000000
[31:10] RO Reserved
[ 9: 0] JOFFSET1[9:0] RW インジェクションチャンネル1 データオフセット値
変換後、変換データからこの値を減算して IDATAR1に書き込まれる
(減算でラップアラウンドするか要確認。しないっぽい)
IOFR2 ADCインジェクションチャンネルデータオフセットレジスタ2 初期値 0x00000000
[31:10] RO Reserved
[ 9: 0] JOFFSET2[9:0] RW インジェクションチャンネル2 データオフセット値
IOFR3 ADCインジェクションチャンネルデータオフセットレジスタ3 初期値 0x00000000
[31:10] RO Reserved
[ 9: 0] JOFFSET3[9:0] RW インジェクションチャンネル3 データオフセット値
IOFR4 ADCインジェクションチャンネルデータオフセットレジスタ4 初期値 0x00000000
[31:10] RO Reserved
[ 9: 0] JOFFSET4[9:0] RW インジェクションチャンネル4 データオフセット値
WDHTR ADCウォッチドッグ 高しきい値レジスタ 初期値 0x000003ff
[31:10] RO Reserved
[ 9: 0] HT[9:0] RW 上側しきい値
WDLTR ADCウォッチドッグ 低しきい値レジスタ 初期値 0x00000000
[31:10] RO Reserved
[ 9: 0] LT[9:0] RW 下側しきい値
RSQR1 ADCレギュラーシーケンスレジスタ1 初期値 0x00000000
[31:24] RO Reserved
[23:20] L[3:0] RW 通常変換での変換チャンネル数設定 0000:1 ~ 1111:16
[19:15] SQ16[4:0] RW 通常変換での 16番目の変換チャンネル 0 ~ 9
[14:10] SQ15[4:0] RW 通常変換での 15番目の変換チャンネル 0 ~ 9
[ 9: 5] SQ14[4:0] RW 通常変換での 14番目の変換チャンネル 0 ~ 9
[ 4: 0] SQ13[4:0] RW 通常変換での 13番目の変換チャンネル 0 ~ 9
RSQR2 ADCレギュラーシーケンスレジスタ2 初期値 0x00000000
[31:30] RO Reserved
[29:25] SQ12[4:0] RW 通常変換での 12番目の変換チャンネル 0 ~ 9
[24:20] SQ11[4:0] RW 通常変換での 11番目の変換チャンネル 0 ~ 9
[19:15] SQ10[4:0] RW 通常変換での 10番目の変換チャンネル 0 ~ 9
[14:10] SQ9[4:0] RW 通常変換での 9番目の変換チャンネル 0 ~ 9
[ 9: 5] SQ8[4:0] RW 通常変換での 8番目の変換チャンネル 0 ~ 9
[ 4: 0] SQ7[4:0] RW 通常変換での 7番目の変換チャンネル 0 ~ 9
RSQR3 ADCレギュラーシーケンスレジスタ3 初期値 0x00000000
[31:30] RO Reserved
[29:25] SQ6[4:0] RW 通常変換での 6番目の変換チャンネル 0 ~ 9
[24:20] SQ5[4:0] RW 通常変換での 5番目の変換チャンネル 0 ~ 9
[19:15] SQ4[4:0] RW 通常変換での 4番目の変換チャンネル 0 ~ 9
[14:10] SQ3[4:0] RW 通常変換での 3番目の変換チャンネル 0 ~ 9
[ 9: 5] SQ2[4:0] RW 通常変換での 2番目の変換チャンネル 0 ~ 9
[ 4: 0] SQ1[4:0] RW 通常変換での 1番目の変換チャンネル 0 ~ 9
ISQR ADCインジェクションシーケンスレジスタ 初期値 0x00000000
[31:22] RO Reserved
[21:20] JL[1:0] RW インジェクション変換での変換チャンネル数設定 00:1 ~ 11:4
[19:15] JSQ4[4:0] RW インジェクション変換での 4番目の変換チャンネル 0 ~ 9
[14:10] JSQ3[4:0] RW インジェクション変換での 3番目の変換チャンネル 0 ~ 9
[ 9: 5] JSQ2[4:0] RW インジェクション変換での 2番目の変換チャンネル 0 ~ 9
[ 4: 0] JSQ1[4:0] RW インジェクション変換での 1番目の変換チャンネル 0 ~ 9
通常変換シーケンスとは異なり、シーケンスの開始位置は(4 - JL)からとなる。
- 変換数 = 4 の場合:変換順序は JSQ1 - JSQ2 - JSQ3 - JSQ4
- 変換数 = 3 の場合:変換順序は JSQ2 - JSQ3 - JSQ4
- 変換数 = 2 の場合:変換順序は JSQ3 - JSQ4
- 変換数 = 1 の場合:変換順序は JSQ4 のみ
IDATAR1 ADCインジェクションデータレジスタ1 初期値 0x00000000
[31:16] RO Reserved
[15: 0] JDATA[15:0] RO インジェクションチャンネル変換データ(左詰めまたは右詰め)
IDATAR2 ADCインジェクションデータレジスタ2 初期値 0x00000000
[31:16] RO Reserved
[15: 0] JDATA[15:0] RO インジェクションチャンネル変換データ(左詰めまたは右詰め)
IDATAR3 ADCインジェクションデータレジスタ3 初期値 0x00000000
[31:16] RO Reserved
[15: 0] JDATA[15:0] RO インジェクションチャンネル変換データ(左詰めまたは右詰め)
IDATAR4 ADCインジェクションデータレジスタ4 初期値 0x00000000
[31:16] RO Reserved
[15: 0] JDATA[15:0] RO インジェクションチャンネル変換データ(左詰めまたは右詰め)
RDATAR ADCレギュラーデータレジスタ 初期値 0x00000000
[31:16] RO Reserved
[15: 0] DATA[15:0] RO 通常チャンネル変換データ(左詰めまたは右詰め)
DLYR ADCディレイドデータレジスタ 初期値 0x00000000
[31:10] RO Reserved
[ 9] DLYSRC RW 外部トリガソース遅延選択 1:インジェクションチャンネル 0:通常チャンネル
[ 8: 0] DLYVLU[8:0] RW 遅延時間 (単位:ADCクロック)
外部トリガ信号入力から変換開始までの待機時間を設定する
ADCクロックは RCCで設定する
この文章のライセンス
2026-02-22作成 2026-03-14更新 佐藤恭一 kyoutan.jpn.org