新手上路
- 积分
- 36
- 金钱
- 36
- 注册时间
- 2017-7-10
- 在线时间
- 10 小时
|
16金钱
STM32F407ZET6平台,外接FSMC总线连接的SRAM,同时外接了SPI方式连接的外部ADC,经测试:
1. 当SRAM的FSMC_DataSetupTime设置为4时,SPI波特率使用SPI_BaudRatePrescaler_2,使用DMA方式接收外部ADC采样值,会不定期出错。
2. 当SRAM的FSMC_DataSetupTime设置为4时,SPI波特率使用SPI_BaudRatePrescaler_4,使用DMA方式接收外部ADC采样值,仍然会不定期出错。
3. 当SRAM的FSMC_DataSetupTime设置为4时,SPI波特率使用SPI_BaudRatePrescaler_2,使用手动SPI方式接收外部ADC采样值,不会出错。
4.当SRAM的FSMC_DataSetupTime设置为6时,SPI波特率使用SPI_BaudRatePrescaler_2,使用SPI的DMA方式接收外部ADC采样值,很稳定,不会出错。
P.S.
A.系统同时使用了2个DMA的多个数据流,但仅仅上述所用到的DMA优先级设置为最高,其余都为低。
B.上述SPI接收ADC采样值的函数是在最高抢占优先级的中断中调用的,不会被中断。
C.DMA的存储器地址已经刻意避开CCM所在的地址
D.DMA标志位判断位置没有问题
E.上述SPI接收ADC采样值使用的是16位模式
F.采样值出错时有一定规律,类似错位。
综上所述,不知道为什么会出现这种现象,仅仅把FSMC_DataSetupTime设置为6就可以避免出现采样值的乱码,请各位有经验的大大们给予解答,不甚感激!!!!
|
|