HAL库(STM32CubeMX)——DAC学习(STM32G431RBT6)

DAC

Digital-to-Analog Converter的缩写。数模转换器。又称D/A转换器,简称DAC,是指将离散的数字信号转换为连续变量的模拟信号的器件

这里我们可以设置输出的电压和波形

1.简单配置一个固定电压:

Output Buffer 使能DAC输出缓存,

输出缓冲Output Buffer建议关闭。DAC的输出缓存可以用来减小输出阻抗,无需外部运放即可直接驱动外部负载。但输出不能达到0(会出现底部失真),不推荐开启。具体参考官方手册,缓冲器打开时低端的DAC输出电压大概0.2V(不同型号可能不同,暂未考证)

只需要在main函数中添加下图代码即可。

HAL_DAC_Start(&hdac1, DAC_CHANNEL_1);
HAL_DAC_SetValue(&hdac1, DAC_CHANNEL_1, DAC_ALIGN_12B_R, 2000);
  • 利用DMA实现:

这里需要配置定时器来选择DAC的触发频率。没有解决,心态炸裂,就是不工作

2.生成三角波(周围没有示波器无法实验)

DAC外部触发(Trigger) :选择一个定时器触发

波形生成模式(Wave generation mode) :三角波发生器(Triangle wave generation),和噪声波形(noise wave generation)

最大三角波幅(Maximum Triangle Amplitude) :4095,

设三角波幅值为3.3V,即4095

DAC12位数据存储,最大为4095,0-4095 对应 0V~3.3V

之后继续配置使能对应的定时器中断。

(以后有机会实验)


2022.6.16更新:

 三角波生成配置:

波形生成模式(Wave generation mode) :
三角波发生器(Triangle wave generation)勾选
噪声波形(noise wave generation)不选择
最大三角波幅(Maximum Triangle Amplitude) :4095
如果最大电压是3.3V,那么三角波幅值为3.3V
0 ~ 4095 对应 0V ~ 3.3V

之后配置定时器就好了。

 

	HAL_TIM_Base_Start(&htim2);

程序里打开对应的定时器就行

  • 5
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
STM32G431RBT6是一款基于Arm Cortex-M4F内核的微控制器,集成了数字信号处理器(DSP)和高性能定时器,其中包括一个12位模数转换器(ADC)。如果你想要配置该设备的数字模拟转换器(DAC),以下是一般的步骤: 1. **初始化 DAC**: 首先,你需要启用DAC模块并配置其基本设置,例如时钟源选择、数据位宽等。在头文件`stm32g4xx_hal_dac.h`中包含相应的头文件,并调用`HAL_DAC_Init()`函数初始化DAC。 ```c #include "stm32g4xx_hal_dac.h" // 初始化DAC DAC_HandleTypeDef hdac; hdac.Instance = DAC; hdac.Init.DAC通道 = DAC_CHANNEL_1; // 选择你想使用的通道,可能有多个 hdac.Init.OutputBuffer = DISABLE; // 是否启用缓冲区 hdac.Init.ScanConvMode = DISABLE; // 如果不需要扫描模式,则设为FALSE hdac.Init.OwnOutputBuffer = ENABLE; // 自动填充缓冲区 HAL_StatusTypeDef status = HAL_DAC_Init(&hdac); if (status != HAL_OK) { // 处理错误 } ``` 2. **配置输出通道**: 使用`HAL_DAC_ConfigChannel()`来设置DAC通道的电压输出范围和其他参数。 ```c // 设置DAC输出值范围 uint16_t outputLevel = 0x1FFF; // 根据需求调整最大输出值 HAL_DAC_SetValue(&hdac, dac_channel_config, &outputLevel); ``` 3. **数据转换**: 当准备好输出数据后,你可以调用`HAL_DAC送去转化数据`(`HAL_DAC_TransmitData()`)。 ```c HAL_StatusTypeDef transferStatus = HAL_DAC_TransmitData(&hdac, dac_data, 1); // dac_data是一个存放你要发送的数值的变量 if (transferStatus != HAL_OK) { // 处理错误 } ```
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值