CubeMx配置STM32H750VBxxDAC输出正弦波(DAC+TIM6+DMA)

一、平台新建项目(以STM32H750VBxx系列为例)

二、配置

1、确认时钟源

         进入工程后打开 RCC 选项,选择 Crystal/Ceramic Resonator,即使用外部晶振作为 HSE 的时钟源。

2、配置系统时钟

3、配置仿真和调试方式

4、DAC的配置

首先打开DAC OUT2通道,

触发方式设置为TIM6事件触发,

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

接着打开DAC的DMA,DMA的方式可以减轻CPU的负担,配置如下,需要注意的是工作Mode配置为Circular(循环模式):

5、TIM6配置

触发事件选择为更新事件

由于TIM6是挂载在APB1LENR时钟线上,在前边步骤2系统时钟的配置,所以TIM6我们设为了240M

计数周期为(38+1),触发频率为240M/39≈6153.8kHz。定时器的配置决定了输出的正弦波的频率。

三、代码生成

1、工程项目的命名、选择MDK-ARM编译环境

2、生成代码的配置

3、最后一步生成代码

四、添加代码

前边我们定时器时钟已经设为240M。

 


正弦波的频率=主频 /(TIM_Prescaler+1)/(TIM_Period+1)/ 点数
我们选80个点
f=240M/(0+1)/(38+1)/80≈76.9kHz.

打开我们的代码工程

1、编写一个正弦波生成函数,将一个周期的正弦波数据存储在数组中,这里一个周期为80个点。

uint16_t Dat[80];
void SineWave()
{
    uint16_t i;
    for( i=0;i<80;i++)
    {
        Dat[i]=(uint16_t)((2047*sin(i*2*3.14159/80))+2048);
    }
}

2、在主函数中调用相关函数,产生周期的正弦波

  SineWave();//生成正弦数据
  HAL_TIM_Base_Start(&htim6);//打开定时器6
  HAL_DAC_Start_DMA(&hdac1,DAC_CHANNEL_2,(uint32_t *)Dat,80,DAC_ALIGN_12B_R);//开启DMA-DAC

添加完代码,编译通过后烧录至板子

3、用示波器观察PA5

如下,频率为76.9kHz的正弦波:

  • 12
    点赞
  • 69
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值