历史上的今天
今天是:2025年03月16日(星期日)
2020年03月16日 | STM32 f407 3ADC 交替 实现 7.2Msps 采样率
2020-03-16 来源:eefocus
想用CUBE配置然后用HAL库实现F407 3ADC交替采样实现7.2MSPS采样率,网上查了很多资料,3adc交替采样的资料很少,有用寄存器配置的,但是用HAL库的基本上没有找到,只能自己摸索。
首先是Pinout,值得注意的是3ADC 交替通常用到一样的通道,我用的是0通道。

然后是时钟的配置ADC最快时钟是36MHz,所以系统最快只能在144MHz,要做相应的更改

然后是ADC设置,这里面要选择模式是Triple interleaved Mode, DMA mode 2, delay设置为5cycle,ADC采样3cycle,Clock 要选择div2,这样能才能达到最快速度。

ADC2,3 配置相类似就略过
然后是DMA配置,只需要配置ADC1的DMA就可以了。
长度要选WORD, mode注意了我选的是Normal,因为选了circule 之后数据不对,估计是中断时时候数据还没有处理完数据就已经被覆盖了。没有细究。

然后主程序里面添加以下关键代码
HAL_ADC_Start(&hadc3);
HAL_ADC_Start(&hadc2);
HAL_ADCEx_MultiModeStart_DMA(&hadc1,(uint32_t *)ADC123_Buff, 1024);
DMA中断处理数据,注意数据的高低字节,一个WORD里面有2个ADC数据。
void DMA2_Stream0_IRQHandler(void)
{
if(DMA2->LISR & 0x00000010) //完成中断
{
DMA2->LIFCR |= 0x00000010; //clear flag
//data processing...
}
}
但是这样的话DMA搬一次之后就停止了,尝试过很多种方法,函数都无法让DMA重新传输,最终发现通过反初始化ADC1再初始化ADC1,然后开ADC2,ADC3,然后开交替ADC可以实现,这样就可以等数据处理完了之后开始下一次的DMA 传输。
通过对信号发生器100khz信号的采样测试,证实能达到7.2MSPS,丝毫不差!!!
史海拾趣
|
大家好, 我现在用24lc256 eeprom. byte write/read 都没问题。 但是page write现在有问题,哪位大哥能帮忙一下,谢谢了 按照时序图,应该是以下7个步骤: 1) start bit 2) control byte + ACK 3) high address + ACK 4) low address + ACK ...… 查看全部问答> |
|
求助,sduc841 通过74HC244扩展IO口。怎么读取数据? 我用的是aduc841单片机,是基于51内核的,为了扩展IO口,我在P0口,接了一个74HC244,后面接了一个拨码开关。74HC244的两个使能端,一个接单片机RD 一个接单片机P2^2,我应该如何读取74HC244输入端的数据呢,我为什么片选不中74HC244。。 这样子读 ...… 查看全部问答> |
|
昨天到学校的东区参加了一个讲座,是凌阳的一个大区经理开的关于61单片机的,期间展示了两个带有语音识别的机器人(据说这是凌阳单片机的特点啊),哪个跳舞的叫小白,(见图,图是网上的,但是就是哪个机器人),还有一个洋娃娃,她的语音功能更强 ...… 查看全部问答> |
|
STM8怎么才能像STM32那样用串口下载程序进去呢? 32不是把BOOT设置了后就能用那个FLASHLoader下载程序吗? 这STM8我测试了不行? 手册上说是可以的,能详细说明咱们设置的吗?… 查看全部问答> |
|
在组合逻辑中加入寄存器级形成流水线,减少了信号毛刺的产生和传播,从而降低FPGA动态功耗,通过XPower功耗分析工具总结出了流水线设计和非流水线设计的功耗,为了做出更完整的对比,使用了低翻转率信号,随机翻转率信号和高翻转率信号作为输入,最后得出 ...… 查看全部问答> |




