目录
一、参考硬件
二、改变输出信号的频率
1.建立新工程
2.配置TIM3
三、代码修改
四、查看结果
一、参考硬件
本项目依赖的软件和硬件工程参考本文作者写的文章:细说MCU的DAC1和DAC2各自输出一通道模拟信号的方法-CSDN博客
https://wenchm.blog.csdn.net/article/details/140791751http://xn--https-rfa//wenchm.blog.csdn.net/article/details/140791751
最直接的改变输出信号频率方法就是修改定时器的Update Event的频率。把输出信号的频率由20kHz改为50Hz。
二、改变输出信号的频率
1.建立新工程
除了对TIM3进行重新配置和对DAC2配置为Disable外,本文示例的工程其它配置与参考文件一样。不再重复进行配置说明。
2.配置TIM3
参考文献中配置定时器TIM3的参数时,计数器的周期设为169,由于系统时钟频率为170 MHz,所以定时器的Update Event频率为170MHz/((0+1)*(169+1))=1 MHz。由于所用波形数据的点数为50,所以用1 MHz的频率提 取50个数据需要的时间为50us,对应的频率就是20 kHz。如果要将频率降低至50 Hz,也就是降低400倍,此时可以将定时器的Update Event频率降低到2.5 kHz(1 MHz/400)。由于倍数比较高,单纯修改计数器的周期值无法实现,所以需要先将定时器时钟的预分频因子修改为169,也就是设置定时器的时钟频率为1 MHz,然后将计数器的周期修改为399,则定时器Update Event的频率为170MHz/((169+1)*(399+1)) = 2.5 kHz。
三、代码修改
/* USER CODE BEGIN 2 */HAL_TIM_Base_Start(&htim3);HAL_DAC_Start_DMA(&hdac1,DAC_CHANNEL_1,(uint32_t*)SineWaveDataPh90,DAC_BUFFER_SIZE,DAC_ALIGN_12B_R);
/* USER CODE END 2 */
/* USER CODE BEGIN PV */
uint16_t SineWaveDataPh90[DAC_BUFFER_SIZE] = {3071,3063,3039,2999,2944,2876,2794,2700,2596,2483,2364,2239,2112,1983,1856,1731,1612,1499,1395,1301,1219,1151,1096,1056,1032,1024,1032,1056,1096,1151,1219,1301,1395,1499,1612,1731,1856,1983,2112,2239,2364,2483,2596,2700,2794,2876,2944,2999,3039,3063
};
/* USER CODE END PV */
/* USER CODE BEGIN Private defines */
#define DAC_BUFFER_SIZE (uint16_t) 50
/* USER CODE END Private defines */
四、查看结果
编译工程并下载到硬件中,将程序运行起来。分别用示波器查看 PA4和 PA6上波形,就可以看到输出信号频率已变为50Hz。不过由于上面的波形在一个周期内只有50个点,所以波形不是很连续。