首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

stm32 DAC配置

stm32 DAC配置

STM32F103VCT6自带两个12DACDAC的转换速度一直没有查到,网上有人说是1MHZ的频率,那就是1us了。ADC的转换时间在56MHZ工作频率下为1us,在72MHZ工作频率下为1.17us。如果ADDA有对称关系的话,那么很可能跟ADC的时间相同。(仅作分析用!)

       DAC于我,有两个用途:输出波形输出固定电压。先来说说前者的配置。


       第一个参数:触发方式,DAC_InitStructure.DAC_Trigger。可选的外部触发源一共有八个。六个是定时器触发:TIM2TIM4TIM5TIM6TIM7TIM8。剩下两个分别是:EXTI线路9和软件触发。如果采用定时器触发的话,就还要再编写相应的定时器函数,这个倒不是很复杂,和定时器的编写方式类似。如:DAC_InitStructure.DAC_Trigger = DAC_Trigger_T6_TRGO;//选择定时器6作外部触发源



void TIM_Configuration(void)


{


       TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;


       TIM_OCInitTypeDef            TIM_OCInitStructure;



      


       TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);


      TIM_TimeBaseStructure.TIM_Period = 0x85;         


      TIM_TimeBaseStructure.TIM_Prescaler = 0x0;      


      TIM_TimeBaseStructure.TIM_ClockDivision = 0x0;   


      TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;


      TIM_TimeBaseInit(TIM6, &TIM_TimeBaseStructure);     


      


    TIM_SelectOutputTrigger(TIM6, TIM_TRGOSource_Update);


}


输出信号频率计算:假设输出一个6个点的锯齿波波形,则其频率为:(72MHZ/(0x85+1))*6=89.552KHZ.注意:如果prescaler不为0,则时钟还要再除以(prescaler+1)


       第二个参数:DAC_InitStructure.DAC_WaveGeneration。顾名思义:波形发生器。STM32内部集成了两个幅度可调的波形发生器,可以产生三角波和噪声波。如果我们使用自定义的缓冲区的话,就不需要配置这个参数或者使其为DAC_WaveGeneration_None,但为了避免别人误以为你忘了配置这个参数,所以还是多写一句吧,养成好的习惯。


       第三个参数:DAC_InitStructure.DAC_OutputBuffer,即是否使用输出缓存。输出缓存的功能主要用来减小输出阻抗,是STM32DAC无需外部运放就可以直接驱动负载。这里一般设置成DAC_OutputBuffer_Disable,即关闭外部缓存。这是为保险起见,万一驱动能力不够强(本人也没试过@_@),那调试的时间就又多了一些。


       参数的配置就这么多了,算得上STM32中最简单的外设配置之一了!


       一般来说,用DAC输出波形,传输的数据比较多,所以采用DMA传输可以节省CPU的开支。所以在调用DAC_DMACmd(DAC_Channel_1, ENABLE);函数后别忘了配置DMA函数。详细的配置说明就不写了,这里把代码贴出来:

继承事业,薪火相传
返回列表