はじめに
いよいよ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 に公開済み。