LiuDW091 发表于 2025-7-22 15:45

【每周分享】【STM32U385RG 测评】+DAC输出三角波

本帖最后由 LiuDW091 于 2025-7-22 15:56 编辑

#申请原创# #有奖活动# #申请开发板#@21小跑堂
今天做个小实验,使用DAC输出三角波,示波器测量同时串口打印DAC数据
一、首先通原理图、数据手册,找到自己需要的DAC端口,以及连接到的外部管脚
我这边选了DAC1通道OUT1,即DAC1_OUT1,对应的通道PA4

二、IDE软件开始配置video/BV14cgpz7E
debug配置、RCC配置,正常配置就好,就不在累赘了
DAC1配置如下:



TIM2设置


INVC设置:


USART1配置:


三、代码调试
1、usart.c里面添加代码

#ifdef __GNUC__
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif

PUTCHAR_PROTOTYPE
{
HAL_UART_Transmit(&huart3,(uint8_t *)&ch,1,0xFFFF);//阻塞方式打印
return ch;
}



2、main.测里面添加代码
#include <stdio.h>



#ifndef HSEM_ID_0
#define HSEM_ID_0 (0U) /* HW semaphore 0*/
#endif


主函数里面添加


   HAL_TIM_Base_Start_IT(&htim6);   //Start TIM3 and trigger DAC1 to periodically output DAC value.

   HAL_DACEx_TriangleWaveGenerate(&hdac1, DAC_CHANNEL_1, DAC_TRIANGLEAMPLITUDE_4095);
   HAL_DAC_Start(&hdac1,DAC_CHANNEL_1);//start DAC1
   HAL_DAC_SetValue(&hdac1, DAC_CHANNEL_1, DAC_ALIGN_12B_R, DCValue);// set to output DAC value


while循环里面添加
    DCValue = HAL_DAC_GetValue(&hdac1, DAC_CHANNEL_1);
    printf("DAC1 value:%ld\r\n",DCValue);






3、tim.c函数
htim2.Instance = TIM2;
htim2.Init.Prescaler = 95;
htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
htim2.Init.Period = 9;
htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;




四、运行效果
视频:https://www.bilibili.com/video/BV14cgpz7ELf/?spm_id_from=333.1387.homepage.video_card.click
五、代码

wang6623 发表于 2025-7-28 12:46

这样配置后,你应该能在示波器上看到稳定的三角波,同时在串口助手中看到实时打印的 DAC 数值。

LiuDW091 发表于 2025-7-28 14:11

wang6623 发表于 2025-7-28 12:46
这样配置后,你应该能在示波器上看到稳定的三角波,同时在串口助手中看到实时打印的 DAC 数值。 ...

对的,串口有数据,示波器也有波形
页: [1]
查看完整版本: 【每周分享】【STM32U385RG 测评】+DAC输出三角波