OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4768|回复: 3

STM32 关于DAC的转换速率问题

[复制链接]

4

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
103
金钱
103
注册时间
2017-9-28
在线时间
21 小时
发表于 2017-9-28 20:58:28 | 显示全部楼层 |阅读模式
5金钱
本帖最后由 有点过头08 于 2017-9-29 15:01 编辑

STM32F407 目前项目里需要利用DAC输出信号,数据存在数组DAc_value[l++]中,然后通过定时器定时触发DAC发送库函数DAC_SetChannel1Data(DAC_Align_12b_R,(int)DAc_value[l++]); 。目前的尝试到的最短时间为1.4us。求教各位DAC转换频率最低为多少。有哪些方法设置。谢谢了。


代码如下:
[mw_shl_code=cpp,true]void TIM3_IRQHandler(void)   //TIM3中断
{if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //检查指定的TIM中断发生与否:TIM 中断源
{  TIM_ClearITPendingBit(TIM3, TIM_IT_Update); //清除TIMx的中断待处理位:TIM 中断源
   num++;
DAC_SetChannel1Data(DAC_Align_12b_R,(int)DAc_value[l++]);        
if(num>27*N_ifft-1)
{TIM_Cmd(TIM3, DISABLE);
        num=0;
        l=0;
        j=0;
DAC_SetChannel1Data(DAC_Align_12b_R,0);
}        
}
}

void TIM3_Mode_Config(void)
{   
                TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
        
          NVIC_InitTypeDef NVIC_InitStructure;
          RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
//  TIM_DeInit(TIM3);
        TIM_InternalClockConfig(TIM3);
  TIM_TimeBaseStructure.TIM_Period =3;
  TIM_TimeBaseStructure.TIM_Prescaler =21;        
        TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数模式
        TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;
        // 初始化定时器TIM3
        TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
        

        // 清除定时器更新中断标志位
        TIM_ClearFlag(TIM3, TIM_FLAG_Update);
           //禁止ARR预装载缓冲器
  TIM_ARRPreloadConfig(TIM3, ENABLE);
        // 开启定时器更新中断
        TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);
        // 使能定时器
        TIM_Cmd(TIM3, ENABLE);        
    // 设置中断组为0
    //NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);               
                // 设置中断来源
    NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;         
                // 设置抢占优先级
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;         
          // 设置子优先级
    NVIC_InitStructure.NVIC_IRQChannelSubPriority =3;        
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);
}[/mw_shl_code]

最佳答案

查看完整内容[请看2#楼]

这个问题,F407手册上有说,当DAC_OUT的增量为±1LSB时,可达到1MS/s的更新率. 要得到最小转换时间,有两个条件: 一是使Tsetling为最小值,也就是说DAC_OUT增量为±1LSB. 二是用定时器事件触发DMA传输,此时需要保证定时器事件频率不会造成DMA下溢.
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

5

主题

277

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1522
金钱
1522
注册时间
2014-5-16
在线时间
217 小时
发表于 2017-9-28 20:58:29 | 显示全部楼层
这个问题,F407手册上有说,当DAC_OUT的增量为±1LSB时,可达到1MS/s的更新率.
要得到最小转换时间,有两个条件:
一是使Tsetling为最小值,也就是说DAC_OUT增量为±1LSB.
二是用定时器事件触发DMA传输,此时需要保证定时器事件频率不会造成DMA下溢.
回复

使用道具 举报

4

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
103
金钱
103
注册时间
2017-9-28
在线时间
21 小时
 楼主| 发表于 2017-10-10 09:10:19 | 显示全部楼层
自顶
回复

使用道具 举报

4

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
103
金钱
103
注册时间
2017-9-28
在线时间
21 小时
 楼主| 发表于 2017-10-13 13:27:36 | 显示全部楼层
zmingwang 发表于 2017-10-10 10:47
这个问题,F407手册上有说,当DAC_OUT的增量为±1LSB时,可达到1MS/s的更新率.
要得到最小转换时间,有两个条 ...

好的,谢谢。我试下
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-18 23:05

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表