はじめに
いよいよSTM32ファミリーのハイクラスに属する、Cortex-M7コアをもつ、stm32h750(クロック周波数480MHz)を新製品に組み込もうと、早速stm32h750の開発ボードでSine波を作ってみよう。今回はSine波のサンプリングデータを1周期当たり100データに、DACでアナログ波に、トリガをTimer6に、サンプリングデータをDMA転送に指定して、Sine波の周波数は、タイマクロック周波数240MHz / タイマのリロード最大カウンタ数(239+1) / Sine波1周期当たりタイマリロード数100 = 10KHzにしよう。
確認環境
・Windows 10 / STM32CubeIDE
・stm32h750 開発ボード
・ST-LINK V2 プログラマ/デバッガ
・オシロスコープ

パタメータ配置
RCC、Clock、DAC、Timer、DMA、Serial wireの順でパラメータ配置を行って、STM32CubeIDEにソースコード生成しよう。
Target MCU
TargetをSTM32H750VBに指定する。

RCC
RCCを外部HSEクリスタルに指定する。

Clock
HSEを25MHzオンボードに指定して、Timerクロックを240MHzにする。Timerクロックは他の値にしてもありうる。

DAC
DACのOutput2に指定する。

Timer
Timer6に指定する。

DMA
MCUの負担を軽減して、DMA転送方式に指定する。

Serial wire
プログラマ&デバッガをSWD(ST-LINK)に指定する。

ソースコード
Generate codeして、main.cへ以下ソースを追加する。
/* USER CODE BEGIN 0 */
uint16_t data[100];
void sine_wave(void) {
for (uint16_t i = 0; i < 100; i++) {
data[i] = (uint16_t)(2000 * sin(i * 2 * 3.14159 / 100) + 2000);
}
}
/* USER CODE END 0 */
int main() {
...
/* USER CODE BEGIN 2 */
sine_wave();
HAL_TIM_Base_Start(&htim6);
HAL_DAC_Start_DMA(&hdac1, DAC_CHANNEL_2, (uint32_t *)data, 100, DAC_ALIGN_12B_R);
/* USER CODE END 2 */
...
}
出力確認
BUILD & RUN、Sine波は予想通り、周期10KHzでPA5から出力されていることを確認済み。

プロジェクト
https://github.com/soarbear/stm32h750_dac_timer_sine_wave に公開済み。
