打印

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

[复制链接]
5348|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
用STM32F103VC 数据地址总线复用方式 读写VPC3 写完再读发现数据不一致 怀疑是STM32读读写时序没有满足VPC3的要求 如图  :写时序的11号要求ALE的下降沿到XWR的下降沿应该最小20ns  而我实际用逻辑MINILOGIC采到的波形这个时延几乎没有 我应该配置STM32 的哪个参数能让这个时间变长呢?谢谢

PD4 PD5.jpg (10.87 KB )

PD4 PD5.jpg

VPC3.jpg (55.82 KB )

VPC3.jpg

VPC3_2.jpg (31.31 KB )

VPC3_2.jpg

XRD XWR.jpg (6.26 KB )

XRD XWR.jpg

20ns.jpg (71.87 KB )

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

使用特权

评论回复
5
jiaojian|  楼主 | 2012-1-8 18:58 | 只看该作者
4# xglhc70338
什么 依稀

使用特权

评论回复
6
jiaojian|  楼主 | 2012-1-8 18:59 | 只看该作者
技术支持下呗

使用特权

评论回复
7
jiaojian|  楼主 | 2012-1-8 22:28 | 只看该作者
香主给解答下呗

使用特权

评论回复
8
香水城| | 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 (42.8 KB )

STM32_FSMC_Multiplex_Write.GIF

使用特权

评论回复
9
jiaojian|  楼主 | 2012-1-9 15:37 | 只看该作者
恩 多谢 香主 我现在就是写完再读 数据不一致 我看波形应该是写对了 读出来就不对 正在想咋解决 难道不行重画板用144脚的 ?避开这个问题?

使用特权

评论回复
10
香水城| | 2012-1-9 16:19 | 只看该作者
恩 多谢 香主 我现在就是写完再读 数据不一致 我看波形应该是写对了 读出来就不对 正在想咋解决 难道不行重画板用144脚的 ?避开这个问题?
jiaojian 发表于 2012-1-9 15:37


我在8楼提出的办法行得通吗?

使用特权

评论回复
11
jiaojian|  楼主 | 2012-1-9 20:17 | 只看该作者
我把cpu降到8M也没看这个时隙变大,可能是我的minilogic只有24M采样率,看不出来。整个脉宽是变宽了。写完读,数据还是不一致。

使用特权

评论回复
12
nikita-fuck| | 2012-1-10 11:08 | 只看该作者
i like


现场总线

使用特权

评论回复
13
zhaoxuji| | 2014-2-20 10:32 | 只看该作者
楼主:我看到你用过STM32 操作过VPC3+,请问,这个结果怎么样啦?最终如何配置的时序,给点配置代码好吗?我正在做这个。另外,总线连接图是如何的呢?

使用特权

评论回复
14
luanshitongmeng| | 2014-3-17 09:49 | 只看该作者
请问楼主,上电后VPC3各引脚应该低电平或高电平吗

使用特权

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

本版积分规则

65

主题

196

帖子

0

粉丝