打印

香主问您一个问题!

[复制链接]
1988|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
chuzhujun_|  楼主 | 2008-10-14 11:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我现在用ZET6的FSMC控制TFT了,系统上还有SRAM,NOR等,现在PE5口已经是FSMC的地址线A20了,但是我的存储器地址线只到了A17,这样下来作为A20的地址线就空余了,我的问题是这个口可以做普通IO用吗?比如接一个外部中断触发输入或者是是外设的一个反馈信号!可以这么做吗?
沙发
香水城| | 2008-10-14 11:38 | 只看该作者

可以

使用特权

评论回复
板凳
chuzhujun_|  楼主 | 2008-10-14 11:55 | 只看该作者

好的 谢谢香主

也应该是这个样子,否则那些空余的地址线就白白浪费了!呵呵

使用特权

评论回复
地板
chuzhujun_|  楼主 | 2008-10-14 14:51 | 只看该作者

香主不行啊!

我刚才将空余的地址线A20(PE6)作为浮空输入用以触发外部中断,PE口其他的地址线都是作为推拉输出的,这样做后,虽然可以进入外部中断了,但是连接FSMC接口的液晶不能写入了,一片白屏!请香主帮看看怎么回事啊?

使用特权

评论回复
5
香水城| | 2008-10-14 14:59 | 只看该作者

你的初始化程序呢?

使用特权

评论回复
6
chuzhujun_|  楼主 | 2008-10-14 15:23 | 只看该作者

您指的是什么意思?

初始化?初始化当然做过了啊!现在就是如果用了PE6口作为中断口的话液晶就不能用了,如果液晶能用就不能用中断接口!

使用特权

评论回复
7
香水城| | 2008-10-14 15:55 | 只看该作者

请把初始化程序贴出来

使用特权

评论回复
8
chuzhujun_|  楼主 | 2008-10-14 16:03 | 只看该作者

香主!问题解决了!

香主:问题解决了,还是程序问题啊!这我深有感触啊,论坛上好多人一旦有问题,都是怨天尤人,怀疑芯片或者库有问题,其实最大的问题往往还是我们的程序本身,我把这个问题摘录下来:希望大家以后不要犯这样的错误:
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_4 | GPIO_Pin_5 |GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_14 |GPIO_Pin_15;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOD, &GPIO_InitStructure);

  /* Set PE.07(D4), PE.08(D5), PE.09(D6), PE.10(D7), PE.11(D8), PE.12(D9), PE.13(D10),PE.14(D11), PE.15(D12) as alternate function push pull */
  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_Pin_15;
  GPIO_Init(GPIOE, &GPIO_InitStructure);
  
 
  
  
  
  
  /* Set PF.00(A0 (RS)) as alternate function push pull */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
  GPIO_Init(GPIOF, &GPIO_InitStructure);

  /* Set PG.12(NE4 (LCD/CS)) as alternate function push pull - CE3    (LCD /CS) */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
  GPIO_Init(GPIOG, &GPIO_InitStructure);
  
  
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  GPIO_Init(GPIOE, &GPIO_InitStructure);
  GPIO_WriteBit(GPIOE, GPIO_Pin_6, Bit_SET);
我这个最后初初始化段本来是放在上面的空白区域的,我在初始化一个东西IO口之后,由于下面的IO口还是需要50M,端口的上下拉状态还是相同,所以我下面的口初始化时候就同省略了速度和端口配置,以便减少一些语句,这本来是很不错的做法,但是我把初始化GPIOE6的(后来加上的初始化)往中间一放,这样的话由于这个口的初始化端口配置和前面不一样的,所以我这个初始化端口下面的语句就开始沿用我后来加上的这个端口的初始化配置,从而造成错误,改正的方法很简单,就是吧我后来加上的这个端口的初始化放在后面就好了,不能随便插在中间,从而吧以前正常的上下文的初始化流程被破坏!呵呵!

使用特权

评论回复
9
香水城| | 2008-10-14 16:58 | 只看该作者

谢谢,你自己找到问题就不用我瞎忙了

使用特权

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

本版积分规则

17

主题

55

帖子

0

粉丝