本帖最后由 LiuDW091 于 2025-7-22 15:56 编辑
#申请原创# #有奖活动# #申请开发板#[url=home.php?mod=space&uid=760190]@21小跑堂 [/url]
今天做个小实验,使用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;
四、运行效果
视频:
五、代码
代码三角波.rar
(22.69 KB)
|