初级会员

- 积分
- 103
- 金钱
- 103
- 注册时间
- 2017-9-28
- 在线时间
- 21 小时
|
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下溢.
|