基本的に初期化はCubeで作成する。ソフトで出力するだけならGPIOでDAC出力を設定するだけで、ペリフェラルの細かい設定は不要だった。FreeRTOSで1msec毎に値を設定し、10Hzの正弦波を出力している。
float span = 100; // 1000msec / freq HAL_DAC_Start(&hdac, DAC_CHANNEL_1); /* Infinite loop */ for (;;) { uint32_t tmp32 = (uint32_t)(2048 + 2047 * sinf(fmodf(HAL_GetTick() / span, 1) * (float)M_PI * 2)); HAL_DAC_SetValue(&hdac, DAC_CHANNEL_1, DAC_ALIGN_12B_R, tmp32); osDelay(1); }
DACも色々と機能があり、外部トリガやDMAトリガ等がある。
例えばバッファに正弦波1周期分のデータを入れておき、DMAのサーキュラ転送を設定し、TIMで生成したタイミングで出力する、といったことができるらしい。
数十kHz程度までのデジタル変調とかができるはず。もっともあまり周波数を高くできないので、現代の高速デジタル変調のような速度には遠く及ばない。それでも10kbaudくらいは出るだろうけども。
とりあえず数kHzの正弦波を出したい。んでADCを試してみたい。
0 件のコメント:
コメントを投稿