使用STM32CubeMX生成DAC + DMA + TIM程序 一、DAC简介 DAC(Digital-to-Analog Converter),即数字/...
下面是具体的用户代码,使用CubeMx进行配置和STM32 HAL库函数,以源码形式放在下面,供有需要的参考、使用。 HAL_DMA_Start_IT(&hdma_tim1_up, (uint32_t) DacOutData, (uint32_t)&hdac.Instance- >DHR12R1,10);__HAL_TIM_CLEAR_FLAG(&htim1,TIM_FLAG_UPDATE);__HAL_TIM_CLEAR_FLAG(&htim1,TIM_D...
上面说到过我的设置是一个周期内100个点,定时器触发频率为1MHz,触发一百次才能完成一个周期的波形,所以生成的波形频率就是1MHz/100个点=10KHz。 最后启动定时器和DMA传输即可: HAL_TIM_Base_Start(&htim6); HAL_DAC_Start_DMA(&hdac, DAC_CHANNEL_2, (uint32_t *)SineWaveTable, POINTS, DAC_ALIGN_1...
登录后复制HAL_DMA_Start_IT(&hdma_tim1_up, (uint32_t) DacOutData, (uint32_t)&hdac.Instance- >DHR12R1,10);__HAL_TIM_CLEAR_FLAG(&htim1,TIM_FLAG_UPDATE);__HAL_TIM_CLEAR_FLAG(&htim1,TIM_DMA_CC1);HAL_TIM_DMABurst_MultiWriteStart(&htim1, TIM_DMABASE_ARR, TIM_DMA_CC1,(uint...
DMA的工作模式:Circular 3、TIM6的配置 定时器的配置决定了输出的正弦波的频率。 定时器时钟设为72M。 正弦波的频率=主频 /(TIM_Prescaler+1)/(TIM_Period+1)/ 点数 选100个点 f=72M/(5+1)/(5+1)/100=20kHz. 三、生成代码 需要添加的:
4)打开stm32f10x_conf.h文件,把stm32f10x_tim.h、stm32f10x_dac.h、stm32f10x_dma.h包含进来,也就是将原先屏蔽的包含这些文件的语句去掉屏蔽。 5)新建SineWave.c与sineWave.h这两个文件分别保存在BSP文件夹中的src与inc中,并将SineWave.c添加进工程的BSP中。
本文采用DAC1+TIM2+DMA1的方式,通过TIM2触发DAC1转换,转换完成后通过DMA1输出,主要步骤如下: ①由Matlab计算一个周期的正弦波数组; ②根据一个正弦波周期内点数和所需正弦波频率确定定时器触发间隔; ③初始化DAC1输出管脚和工作模式; ④配置触发DAC1用的定时器2; ⑤配置DMA1自主搬运正弦波数组。 待上述配置完成后...
DAC->CR |= 1 << 12; //DMA使能 DAC->CR |= 0 << 6; //TIM6 TRGO触发 DAC->CR |= 1 << 2; //开启触发使能 DAC->CR |= 1 << 1; //关闭输出缓存 DAC->CR |= 1 << 0; //开启DAC1 } #include "dma.h" #include "stm32f10x.h" ...
第5行,采用TIM6作为触发源。 第6行,使能DAC输出缓冲,增加驱动能力。 第7行,关闭DAC的输出连接片上外设,这样DAC的输出是连接的PA4或者PA5引脚。 第8行,采用出厂校准。 第10行,配置DAC的通道1。 60.4.4 第3步:DMA配置 DAC通道1的DMA配置如下,如果使用通道2,配置是类似的,代码如下: ...
你是用tim溢出的dma请求来给dac喂数么 xysl23 富有名气 8 720太多了,128个点就可以了.精度要好很多. ATF144X 默默无闻 1 频率分辨率0.1Hz?直接用定时器是不可能的啊!用DDS还差不多。 等ni在冬季 默默无闻 1 楼主,你的程序还有没有?我能否借鉴一下? yhzyhzyhzapple 富有美誉 9 改善一下布线...