STM32F103VC 复用模式读写VPC3时序的问题

[复制链接]
6143|13
 楼主| jiaojian 发表于 2012-1-8 12:16 | 显示全部楼层 |阅读模式
用STM32F103VC 数据地址总线复用方式 读写VPC3 写完再读发现数据不一致 怀疑是STM32读读写时序没有满足VPC3的要求 如图  :写时序的11号要求ALE的下降沿到XWR的下降沿应该最小20ns  而我实际用逻辑MINILOGIC采到的波形这个时延几乎没有 我应该配置STM32 的哪个参数能让这个时间变长呢?谢谢
PD4 PD5.jpg
VPC3.jpg
VPC3_2.jpg
XRD XWR.jpg
20ns.jpg
 楼主| jiaojian 发表于 2012-1-8 12:29 | 显示全部楼层
这是我的FSMC部分初始化程序
void FSMC_NOR_Init(void)
{
  FSMC_NORSRAMInitTypeDef  FSMC_NORSRAMInitStructure;
  FSMC_NORSRAMTimingInitTypeDef  p;
  GPIO_InitTypeDef GPIO_InitStructure;

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE  , ENABLE);

  /*-- GPIO Configuration ------------------------------------------------------*/
  /* NOR Data&Address lines configuration */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_14 | GPIO_Pin_15;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOD, &GPIO_InitStructure);

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 |
                                GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 ;
  GPIO_Init(GPIOE, &GPIO_InitStructure);


  /* NOE and NWE configuration */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5;
  GPIO_Init(GPIOD, &GPIO_InitStructure);
  // NADV configuration
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;        // NADV
    GPIO_Init (GPIOB, &GPIO_InitStructure);


  /* NE1 configuration */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
  GPIO_Init(GPIOD, &GPIO_InitStructure);

  /*-- FSMC Configuration ----------------------------------------------------*/
  p.FSMC_AddressSetupTime = 10;//0x05;
  p.FSMC_AddressHoldTime = 10;//0x05;//0x00;
  p.FSMC_DataSetupTime = 8;//0x07;
  p.FSMC_BusTurnAroundDuration = 0;//0x00;
  p.FSMC_CLKDivision =31;// 0x32;//0x00;
  p.FSMC_DataLatency = 0;//0x08;//0x00;
  p.FSMC_AccessMode = FSMC_AccessMode_B;

  FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM1;//FSMC_Bank1_NORSRAM2;
  FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Enable;//FSMC_DataAddressMux_Disable;
  FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_NOR;
  FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_8b;//FSMC_MemoryDataWidth_16b;
  FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;
  FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;
  FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable;
  FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;
  FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable;
  FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable;
  FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable;
  FSMC_NORSRAMInitStructure.FSMC_AsyncWait = FSMC_AsyncWait_Disable;
  FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable;
  FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p;
  FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p;

  FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);

  /* Enable FSMC Bank1_NOR Bank */
  FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM1, ENABLE);
}
 楼主| jiaojian 发表于 2012-1-8 16:03 | 显示全部楼层
有哪位大侠知道 告诉下呗 谢过
xglhc70338 发表于 2012-1-8 16:18 | 显示全部楼层
:L 1# jiaojian
 楼主| jiaojian 发表于 2012-1-8 18:58 | 显示全部楼层
4# xglhc70338
什么 依稀
 楼主| jiaojian 发表于 2012-1-8 18:59 | 显示全部楼层
技术支持下呗
 楼主| jiaojian 发表于 2012-1-8 22:28 | 显示全部楼层
香主给解答下呗
香水城 发表于 2012-1-9 12:28 | 显示全部楼层
本帖最后由 香水城 于 2012-1-9 12:30 编辑

根据数据手册的参数,LZ要求的ALE正好与FSMC的FSMC_NADV反相,假定你的线路上有一个反相器。

这样的话,ALE ↓ to XWR↓ 的时间可以这样得到:
tv(NWE_NE) - tv(NADV_NE) - tw(NADV)

取 tv(NWE_NE)的最小值 = 2tHCLK
取 tv(NADV_NE) 和 tw(NADV)的最大值= 5 和 tHCLK + 1

则上式的结果是:tHCLK - 6,当HCLK=72MHz时,这个值只有8ns左右。
由此看出,要想改变这个数值,只有加大tHCLK,即降低HCLK频率。

剩下的推导,你应该可以自己完成了。
STM32_FSMC_Multiplex_Write.GIF
 楼主| jiaojian 发表于 2012-1-9 15:37 | 显示全部楼层
恩 多谢 香主 我现在就是写完再读 数据不一致 我看波形应该是写对了 读出来就不对 正在想咋解决 难道不行重画板用144脚的 ?避开这个问题?
香水城 发表于 2012-1-9 16:19 | 显示全部楼层
恩 多谢 香主 我现在就是写完再读 数据不一致 我看波形应该是写对了 读出来就不对 正在想咋解决 难道不行重画板用144脚的 ?避开这个问题?
jiaojian 发表于 2012-1-9 15:37


我在8楼提出的办法行得通吗?
 楼主| jiaojian 发表于 2012-1-9 20:17 | 显示全部楼层
我把cpu降到8M也没看这个时隙变大,可能是我的minilogic只有24M采样率,看不出来。整个脉宽是变宽了。写完读,数据还是不一致。
nikita-fuck 发表于 2012-1-10 11:08 | 显示全部楼层
i like


现场总线
zhaoxuji 发表于 2014-2-20 10:32 | 显示全部楼层
楼主:我看到你用过STM32 操作过VPC3+,请问,这个结果怎么样啦?最终如何配置的时序,给点配置代码好吗?我正在做这个。另外,总线连接图是如何的呢?
luanshitongmeng 发表于 2014-3-17 09:49 | 显示全部楼层
请问楼主,上电后VPC3各引脚应该低电平或高电平吗
您需要登录后才可以回帖 登录 | 注册

本版积分规则

65

主题

196

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部