打印

stm32f103的“fsmc的同步读

[复制链接]
5037|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 szy860524 于 2011-8-15 14:18 编辑

我打算利用stm32f103的“fsmc的同步读+dma" 的功能读一个8位20M的ADC,现在发现我理论计算出应该有16M的读取速度,实际只有1M多,我怀疑我的fsmc(的同步读)操作不对,想咨询一下。感觉硬件肯定没错,因为我已经看到波形了。

未命名.jpg (70.3 KB )

原理图

原理图

2011-07-28 12.52.57.jpg (810.22 KB )

1M方波波形

1M方波波形

2011-07-28 13.09.40.jpg (814.13 KB )

100k方波波形

100k方波波形
沙发
香水城| | 2011-7-28 16:06 | 只看该作者
1)你的理论计算过程是怎样的?会不会忽视了什么因素?
2)你是否读取到正确的数据?

使用特权

评论回复
板凳
szy860524|  楼主 | 2011-7-29 10:56 | 只看该作者
2# 香水城

我的理论来自下面这个时序:

[local]1[/local]

HCLK=72M

[local]2[/local]

CLKDIV=1

数据应该是正确的,因为我输入100kHz正弦波能看到波形。

使用特权

评论回复
地板
szy860524|  楼主 | 2011-7-29 11:20 | 只看该作者
怎么图传不上去

使用特权

评论回复
5
香水城| | 2011-7-29 11:38 | 只看该作者
看不懂3楼的描述是什么意思。

如果数据正确,则表示操作没有错,最多是某些参数设置的比较宽裕,你可以通过示波器,再结合外部存储器的手册中给出的时序对比一下,看看有没有改进的地方。

使用特权

评论回复
6
szy860524|  楼主 | 2011-7-29 14:54 | 只看该作者
主要是图传不上去,请问还有什么其他联系方式,我的QQ:574997577

使用特权

评论回复
7
香水城| | 2011-7-29 15:01 | 只看该作者
LZ位不是有图吗?

传图请用“高级回复”

使用特权

评论回复
8
szy860524|  楼主 | 2011-7-29 16:00 | 只看该作者
昨天可以传,今天传不了了,总显示“您的请求来路不正确,无法提交。”

使用特权

评论回复
9
szy860524|  楼主 | 2011-8-2 09:00 | 只看该作者
实际上我只想实现如资料中所述的“同步模式:FSMC自发一次地址信号,然后成组的数据传输通过时钟CLK顺序进行。
假设条件1:FSMC外设地址定义为 volatile unsigned short* tlc5510=(volatile unsigned short*)0x60000000;
假设条件2:内存地址定义为 unsigned short tlc5510_buffer[4096];
假设条件3:我的FSMC相应寄存器已定义成可同步成组读
怎样写才能实现FSMC自发一次地址信号(tlc5510),然后成组的数据传输通过时钟CLK顺序进行地把数据传到(tlc5510_buffer)

使用特权

评论回复
10
香水城| | 2011-8-2 10:37 | 只看该作者
我不知道怎么才能实现FSMC自发一次地址信号,然后成组的数据传输通过时钟CLK顺序进行。

查到一篇旧帖供参考:https://bbs.21ic.com/viewthread.php?tid=248194

使用特权

评论回复
11
IJK| | 2011-8-2 10:59 | 只看该作者
提醒一下LZ,如果没有记错,目前的STM32的FSMC工作在同步模式,1个single burst read却发了4个读时钟。所以感觉STM32的FSMC的同步模式 效率不好

使用特权

评论回复
12
szy860524|  楼主 | 2011-8-3 08:55 | 只看该作者
请问11楼,无论同步模式的性能如何,能告诉我怎么开始运行同步模式传数据到内存吗?我想亲自感受一下。

使用特权

评论回复
13
IJK| | 2011-8-3 09:23 | 只看该作者
以下配置供参考:
  //      - Data/Address MUX = Disable
  //      - Memory Type = CRAM (Cellular RAM or PSRAM)
  //      - Data Width = 16bit
  //      - Write Operation = Enable
  //      - Extended Mode = Disable
  //      - Asynchronous Wait = Disable
  //      - WaitSignalPolarity = Low
  //      - BurstAccessMode = Enable
  FSMC_Bank1->BTCR[0] = FSMC_DataAddressMux_Disable | FSMC_MemoryType_CRAM |
                        FSMC_MemoryDataWidth_16b | FSMC_WriteOperation_Enable |
                        FSMC_ExtendedMode_Disable | FSMC_AsyncWait_Disable |
                        FSMC_WaitSignalPolarity_Low | FSMC_BurstAccessMode_Enable |
                        FSMC_WaitSignalActive_DuringWaitState;
  // timing setting
  FSMC_Bank1->BTCR[1] = 0x00000101 | FSMC_CLK_DIV_2;
  //      - BANK 1 (of NOR/SRAM Bank 1~4) is enabled
  FSMC_Bank1->BTCR[0] |= 0x0001;

使用特权

评论回复
14
szy860524|  楼主 | 2011-8-11 10:13 | 只看该作者
本帖最后由 szy860524 于 2011-8-15 14:31 编辑

前一段好忙,今天坐下来把13楼的帖子拜读了一下,我还是有疑问的。13楼帖子里的程序只给出了如果要进行同步成组读要对FSMC做什么样的设定,假设我设定好了,如何启动同步成组读把外部数据读到指定的数组里去。我是想像DMA一样指定缓存地址,指定长度,对寄存器某一位置位,然后就等待结束,再把数组里的数提出来用。其实FSMC+DMA我已经用过了只不过我观察发现他不是同步成组读的时序,所以慢。而我根据同步成组的时序图理论上推出应该是很快的,只不过不知道怎样能实现图上的时序。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

8

帖子

1

粉丝