STM32
直播中

陈霞

7年用户 945经验值
私信 关注
[问答]

使用STM32H750 DFSDM滤波,输出与设置不一致的原因?

使用STM32H750芯片,想使用DFSDM直接用DMA写通道寄存器的方式对数据进行滤波,滤波器使用sinc3、Oversampling为10,IntOversampling为1;我的预期是将800点的数据给滤波器,按设置,滤波器应该输出80点的数据,但通过DMA接收数据时,发现输出少于80点。请教各位大侠,原因何在?
配置代码:
void afsdm_init(DFSDM_Filter_HandleTypeDef* flt, DFSDM_Channel_HandleTypeDef* chn,...)
flt->Init.RegularParam.Trigger=DFSDM_FILTER_SW_TRIGGER;
flt->Init.RegularParam.FastMode=DISABLE;
flt->Init.RegularParam.DmaMode=ENABLE;
flt->Init.FilterParam.SincOrder=DFSDM_FILTER_SINC3_ORDER;
flt->Init.FilterParam.Oversampling=10;
flt->Init.FilterParam.IntOversampling=1;
HAL_DFSDM_FilterInit(flt);
chn->Init.OutputClock.Activation=DISABLE;
chn->Init.Input.Multiplexer=DFSDM_CHANNEL_INTERNAL_REGISTER;
chn->Init.Input.DataPacking=DFSDM_CHANNEL_STANDARD_MODE;
chn->Init.Input.Pins=DFSDM_CHANNEL_SAME_CHANNEL_PINS;
chn->Init.Offset=0x00;
chn->Init.RightBitShift=0x00;
chn->Init.OutputClock.Selection=DFSDM_CHANNEL_OUTPUT_CLOCK_SYSTEM;
chn->Init.OutputClock.Divider=2;
chn->Init.SerialInterface.Type=DFSDM_CHANNEL_SPI_RISING;
chn->Init.SerialInterface.SpiClock=DFSDM_CHANNEL_SPI_CLOCK_EXTERNAL;
chn->Init.Awd.FilterOrder=DFSDM_CHANNEL_FASTSINC_ORDER;
chn->Init.Awd.Oversampling=1;
HAL_DFSDM_ChannelInit(chn);
HAL_DFSDM_FilterConfigRegChannel(flt, DFSDM_CHANNEL_1,
DFSDM_CONTINUOUS_CONV_ON);
//DMA配置略
}
注:通道、滤波器、DMA实例在函数调用前已设置


回帖(1)

王平

2024-4-9 18:04:37
出现输出与设置不一致的情况可能有多种原因。

首先,您需要确保您的数据输入缓冲区大小已经调整为能够容纳800点的数据,以免数据溢出。

其次,您需要确保滤波器的配置参数正确设置。根据您提供的配置代码,您的配置参数看起来是正确的。但请确保所有的配置参数都已正确初始化,并且没有遗漏。

另外,对于DFSDM滤波器的使用,需要确保DMA传输设置正确。您可以通过设置DMA传输的数据长度、地址和传输方向等参数来确保数据正确传输。

最后,还需要考虑可能的硬件问题。检查连接到DFSDM模块的外部组件,如传感器或麦克风,确保其正常工作且与DFSDM模块的接口匹配。

如果您仍然无法找到问题所在,请尝试逐步调试,例如逐个检查滤波器的各个配置参数,或者在代码中添加打印语句以跟踪数据的流动和处理过程。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分