ファンクション・ジェネレータ このプログラムの説明は,CQ出版社「トランジスタ技術」の2021年10月号から開始された連載記事「STM32マイコンではじめるPC計測」の中にあります.このプログラムといっしょに使うPC側のプログラムについても同誌を参照してください.

Dependencies:   Array_Matrix mbed SerialTxRxIntr MyTicker7

Committer:
MikamiUitOpen
Date:
Wed Oct 06 12:20:04 2021 +0000
Revision:
1:0430f1ed6c2c
Parent:
0:53c0fa8a9aa2
2

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MikamiUitOpen 0:53c0fa8a9aa2 1 //-------------------------------------------------------------
MikamiUitOpen 0:53c0fa8a9aa2 2 // STM32F446 内蔵の DAC 用のクラス(ヘッダ)
MikamiUitOpen 0:53c0fa8a9aa2 3 // 選択可能な入力端子:
MikamiUitOpen 0:53c0fa8a9aa2 4 // A2 (PA_4): ---- デフォルト
MikamiUitOpen 0:53c0fa8a9aa2 5 // D13 (PA_5): このポートはマイコンボードの LED も
MikamiUitOpen 0:53c0fa8a9aa2 6 // ドライブするので使わない方がよい
MikamiUitOpen 0:53c0fa8a9aa2 7 //
MikamiUitOpen 0:53c0fa8a9aa2 8 // 2020/10/17, Copyright (c) 2020 MIKAMI, Naoki
MikamiUitOpen 0:53c0fa8a9aa2 9 //-------------------------------------------------------------
MikamiUitOpen 0:53c0fa8a9aa2 10
MikamiUitOpen 0:53c0fa8a9aa2 11 #include "mbed.h"
MikamiUitOpen 0:53c0fa8a9aa2 12
MikamiUitOpen 0:53c0fa8a9aa2 13 #ifndef STM32F446xx
MikamiUitOpen 0:53c0fa8a9aa2 14 #error Not NUCLEO-F446RE.
MikamiUitOpen 0:53c0fa8a9aa2 15 #endif
MikamiUitOpen 0:53c0fa8a9aa2 16
MikamiUitOpen 0:53c0fa8a9aa2 17 #ifndef F446_DAC_SINGLE_HPP
MikamiUitOpen 0:53c0fa8a9aa2 18 #define F446_DAC_SINGLE_HPP
MikamiUitOpen 0:53c0fa8a9aa2 19
MikamiUitOpen 0:53c0fa8a9aa2 20 namespace Mikami
MikamiUitOpen 0:53c0fa8a9aa2 21 {
MikamiUitOpen 0:53c0fa8a9aa2 22 class DacF446
MikamiUitOpen 0:53c0fa8a9aa2 23 {
MikamiUitOpen 0:53c0fa8a9aa2 24 public:
MikamiUitOpen 0:53c0fa8a9aa2 25 // コンストラクタ
MikamiUitOpen 0:53c0fa8a9aa2 26 explicit DacF446(PinName pin = A2);
MikamiUitOpen 0:53c0fa8a9aa2 27
MikamiUitOpen 0:53c0fa8a9aa2 28 virtual ~DacF446() {}
MikamiUitOpen 0:53c0fa8a9aa2 29
MikamiUitOpen 0:53c0fa8a9aa2 30 // -1.0f <= data <= 1.0f
MikamiUitOpen 0:53c0fa8a9aa2 31 void Write(float data) { WriteDac(ToUint16(data)); }
MikamiUitOpen 0:53c0fa8a9aa2 32
MikamiUitOpen 0:53c0fa8a9aa2 33 // 0 <= data <= 4095
MikamiUitOpen 0:53c0fa8a9aa2 34 void Write(uint16_t data) { WriteDac(__USAT(data, BIT_WIDTH_)); }
MikamiUitOpen 0:53c0fa8a9aa2 35
MikamiUitOpen 0:53c0fa8a9aa2 36 private:
MikamiUitOpen 0:53c0fa8a9aa2 37 void (DacF446::*fpWriteDac)(uint16_t);
MikamiUitOpen 0:53c0fa8a9aa2 38
MikamiUitOpen 0:53c0fa8a9aa2 39 static const int BIT_WIDTH_ = 12;
MikamiUitOpen 0:53c0fa8a9aa2 40 AnalogOut da_;
MikamiUitOpen 0:53c0fa8a9aa2 41
MikamiUitOpen 0:53c0fa8a9aa2 42 // DAC の片方のチェンネルへ出力する
MikamiUitOpen 0:53c0fa8a9aa2 43 void WriteDac1(uint16_t val) { DAC->DHR12R1 = val; } // CH1 へ
MikamiUitOpen 0:53c0fa8a9aa2 44 void WriteDac2(uint16_t val) { DAC->DHR12R2 = val; } // CH2 へ
MikamiUitOpen 0:53c0fa8a9aa2 45
MikamiUitOpen 0:53c0fa8a9aa2 46 void WriteDac(uint16_t val) { (this->*fpWriteDac)(val); }
MikamiUitOpen 0:53c0fa8a9aa2 47
MikamiUitOpen 0:53c0fa8a9aa2 48 // 飽和処理を行い uint16_t 型のデータを戻り値とする
MikamiUitOpen 0:53c0fa8a9aa2 49 uint16_t ToUint16(float val)
MikamiUitOpen 0:53c0fa8a9aa2 50 { return __USAT((val + 1.0f)*2048.0f, BIT_WIDTH_); }
MikamiUitOpen 0:53c0fa8a9aa2 51
MikamiUitOpen 0:53c0fa8a9aa2 52 // コピー・コンストラクタ,代入演算子の禁止のため
MikamiUitOpen 0:53c0fa8a9aa2 53 DacF446(const DacF446&);
MikamiUitOpen 0:53c0fa8a9aa2 54 DacF446& operator=(const DacF446&);
MikamiUitOpen 0:53c0fa8a9aa2 55 };
MikamiUitOpen 0:53c0fa8a9aa2 56 }
MikamiUitOpen 0:53c0fa8a9aa2 57 #endif // F446_DAC_SINGLE_HPP