stm32 DAC输出任意形状的波形-任意波形发生器

stm32 DAC输出任意形状的波形-任意波形发生器

代码:https://download.csdn.net/download/dh1151313194/20376311
(代码不值钱,大热天的,9.9就当请我吃个西瓜吧,毕竟写这么多也不容易,哈哈)
开发板:任意ST的nucler-64板子
软件:crubeMX KEIL
核心思想:

  • 事先准备好一个数组,这个数组保存的是你要显示的波形,数组的成员大小是0-4095(DAC的精度可以最大到4095),

  • 然后按照一定的时间,用DMA的方式,吧这个数组的值搬到DAC的数据寄存器,

  • 然后DAC的引脚电平就按照这个数组变化。

1 首先配置DAC 1.1 DAC引脚输出

在这里插入图片描述

1.2 波形输出模式关闭

硬件自带的波形输出只是包括三角波和噪声波两种,所以这里要关闭。
在这里插入图片描述

1.3 DMA配置

在这里插入图片描述

2 定时器2部分的设置
2.1 定时器时钟源选择为内部时钟

选择内部时钟源
在这里插入图片描述

2.2 定时器2的输出作为DAC的激发

在这里插入图片描述
硬件的初始化基本是OK了,现在主要是准备好波形的一维数组,这里的函数作用是生成一个周期的正选波形

#include<math.h>
#define PointMax 500 //数组大小是500
#define PI 3.1415926 //
unsigned int sinData[PointMax] = {0};//正旋波数据

void get_sin_tab( unsigned int point )
{
    unsigned int i = 0, j = 0;
    float hd = 0.0;       //弧度
    float fz = 0.0;         //峰值
    unsigned int tem = 0;
    j = point / 2;
    hd = PI / j;
    for( i = 0; i < point; i++ )
    {
        fz = j * sin( hd * i ) + j;
        tem = ( unsigned int )fz;
        sinData[i] = tem*8;//赋值设定在0~4095
    }
}
3 软件编程,生成正旋波
3.2 启动定时器2,启动DAC的DMA

HAL_TIM_Base_Start(&htim2);
HAL_DAC_Start_DMA(&hdac, DAC_CHANNEL_1, (uint32_t *)sinData, 500,DAC_ALIGN_12B_R);

3.3 最终效果图

在这里插入图片描述

4 生成三角波
这里是生成三角波的DAC数据 DualSine12bit_sanjiao。

uint32_t DualSine12bit_sanjiao[500]; 
for (Idx = 0; Idx < 250; Idx++)  
{  
	DualSine12bit_sanjiao[Idx]=Idx*8;  
} 

for (Idx = 250; Idx < 500; Idx++)  
{  
	DualSine12bit_sanjiao[Idx]=(500-Idx)*8;  
} 

HAL_TIM_Base_Start(&htim2);
HAL_DAC_Start_DMA(&hdac, DAC_CHANNEL_1, (uint32_t *)DualSine12bit_sanjiao, 500,DAC_ALIGN_12B_R);

在这里插入图片描述

5 软件编程,生成方波
//生成方波
	for (Idx = 0; Idx < 250; Idx++)  
{  
	DualSine12bit_fangbo[Idx]=0;  
} 

for (Idx = 250; Idx < 500; Idx++)  
{  
	DualSine12bit_fangbo[Idx]=4095;  
} 


HAL_TIM_Base_Start(&htim2);

HAL_DAC_Start_DMA(&hdac, DAC_CHANNEL_1, (uint32_t *)DualSine12bit_fangbo, 500,DAC_ALIGN_12B_R);

在这里插入图片描述

附件:STM32 Mucleo图

在这里插入图片描述

  • 23
    点赞
  • 132
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
要实现任意波形发生器,可以使用STM32F407微控制器的DACDMA和Timer功能。 首先,DAC(数字模拟转换器)是用来将数字信号转换为模拟电压输出的设备。STM32F407具有多个DAC通道,每个通道都可以输出一个模拟电压。我们可以使用DAC通道输出的电压值来生成波形。 接下来,我们可以使用DMA(直接内存访问)功能,将要输出波形数据传输到DAC的数据寄存器中。通过使用DMA,我们可以实现高效的数据传输而无需CPU的干预。可以将波形数据存储在内存数组中,并使用DMA将这些数据发送给DAC通道。 最后,我们可以使用Timer(定时器)功能来控制波形输出频率。定时器可以产生特定的定时脉冲,用于触发DAC输出的更新。通过配置定时器的预分频器和计数器,在每个定时器更新事件后触发DAC通道输出的更新。这样,我们可以控制波形输出频率。 具体实现的步骤如下: 1. 配置DAC通道及其输出引脚,并设置DAC工作模式。 2. 配置DMA控制器,设置传输方向为内存到外设,选择波形数据的内存地址和DAC数据寄存器的外设地址。 3. 准备波形数据,可以是正弦波、方波或其他自定义波形,将波形数据存储在内存数组中。 4. 配置定时器,设置预分频器和计数器的值,以控制波形输出频率。 5. 启动DMA和定时器,开始产生波形。 通过使用STM32F407的DACDMA和定时器功能,可以实现一个任意波形发生器。能够灵活生成各种形状波形,并且输出频率可以自由调节。这样的实现可以应用于音频信号发生器、信号调试等领域。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小男孩和胖子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值