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图

在这里插入图片描述

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小男孩和胖子

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

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

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

打赏作者

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

抵扣说明:

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

余额充值