クラス設計をしよう - STM32 Timer編
1. クラス内でする処理を考える
まずは、クラス内でするべき動作を考えます。とりあえず、自分の喫緊の課題になっているものを列挙していきます。
- タイマー機能をPWMで初期化する
- PWM出力を開始する
- PWM出力を設定する
2. 実装方法を決める
続いて実装方法を決めていきます。コンストラクタに乗せるとか、メソッド化するとか、プライベート変数で保持してGetterSetterを作るとかです。
3. 真面目にメソッドやらをきめる
どんなメソッドを作っていくのか決めます。ヘッダファイルを作るといいような気もします。
class TimerPwm { /* ----------------------------------------------------- * public 列挙体、インナークラス * ----------------------------------------------------- */ public: enum EChannel : int { CH1 = 1, CH2 = 2, CH3 = 3, CH4 = 4, }; /* ----------------------------------------------------- * private メンバ変数 * ----------------------------------------------------- */ private: TIM_TypeDef *tim; // 設定対象タイマーのインスタンス。 /* ----------------------------------------------------- * public メソッド * ----------------------------------------------------- */ public: /** * @brief 設定対象タイマーのインスタンスを受け取るのみ。初期化動作は行わない。 * @param TIM_TypeDef _htim [I ]: 設定対象となるタイマーのインスタンス */ TimerPwm(TIM_TypeDef *uart); /** * @brief 初期化を行う関数。各レジスタの設定を行いペリフェラルを初期化する。 * @param period [I ]: PWMの周期幅 * @param prescale [I ]: プリスケーラの値。0の場合プリスケールなし。 * @retval None */ void initialize(uint32_t period, uint32_t prescale); /** * @brief PWM出力を開始する * @param EChannel ch [I ]: 設定するチャンネル */ void start(EChannel ch); /** * @brief 出力値を設定する。 * @param EChannel ch [I ]: 設定するチャンネル * @param uint32_t value [I ]: 設定する値 */ void out(EChannel ch, uint32_t value); };