OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4417|回复: 7

使用FSMC模块调用延时函数会无故拉高FSMC_D2和FSMC_D3

[复制链接]

1

主题

4

帖子

0

精华

新手入门

积分
28
金钱
28
注册时间
2014-11-17
在线时间
0 小时
发表于 2014-11-17 12:02:37 | 显示全部楼层 |阅读模式
5金钱
各位大神麻烦进来看一下,不胜感激!小弟最近使用FSMC功能外接FPGA,FPGA内是一个FIFO模块,当做外部SRAM使用。FSMC驱动代码和原子老大的差不多,可是在main函数中,如果加入延时函数的话,FSMC_D2和FSMC_D3引脚会被直接拉到高电平,不论写入的是什么样的数据都是如此,而其他数据位则可以正常响应。当删除延时函数时,则恢复正常,。困扰我很久了啊,完全不知道怎么回事。

FSMC驱动代码:
[mw_shl_code=c,true]#include "fsmc1.h" #define Bank1_SRAM1_ADDR ((u32)(0x60000000)) void FSMC1_Init(void) { FSMC_NORSRAMInitTypeDef FSMC_NORSRAMInitStructure; FSMC_NORSRAMTimingInitTypeDef readWriteTiming; GPIO_InitTypeDef GPIO_InitStructure; RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC,ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOE|RCC_APB2Periph_GPIOB,ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_14|GPIO_Pin_15; // //PORTD复用推挽输出 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_0|GPIO_Pin_1|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOE, &GPIO_InitStructure); readWriteTiming.FSMC_AddressSetupTime = 0x00; //地址建立时间(ADDSET)为1个HCLK 1/36M=27ns readWriteTiming.FSMC_AddressHoldTime = 0x00; //地址保持时间(ADDHLD)模式A未用到 readWriteTiming.FSMC_DataSetupTime = 0x01; //数据保持时间(DATAST)为3个HCLK 4/72M=55ns(对EM的SRAM芯片) readWriteTiming.FSMC_BusTurnAroundDuration = 0x00; readWriteTiming.FSMC_CLKDivision = 0x00; readWriteTiming.FSMC_DataLatency = 0x00; readWriteTiming.FSMC_AccessMode = FSMC_AccessMode_A; //模式A FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM1; FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; FSMC_NORSRAMInitStructure.FSMC_MemoryType =FSMC_MemoryType_SRAM;// FSMC_MemoryType_SRAM; //SRAM FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_8b;//存储器数据宽度为16bit FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode =FSMC_BurstAccessMode_Disable;// FSMC_BurstAccessMode_Disable; FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait=FSMC_AsynchronousWait_Disable; 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_WriteBurst = FSMC_WriteBurst_Disable; FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &readWriteTiming; FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &readWriteTiming; //读写同样时序 FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure); //初始化FSMC配置 FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM1, ENABLE); } void FSMC_FIFO1_WriteBuffer(u8* pBuffer,u32 WriteAddr,u32 n) { for(;n!=0;n--) { *(vu8*)(Bank1_SRAM1_ADDR+WriteAddr)=*pBuffer; WriteAddr+=1; pBuffer++; } } void FSMC_FIFO1_ReadBuffer(u8* pBuffer,u32 ReadAddr,u32 n) { for(;n!=0;n--) { *pBuffer++=*(vu8*)(Bank1_SRAM1_ADDR+ReadAddr); ReadAddr+=1; } } [/mw_shl_code]
未加入延时函数时的main函数代码:
[mw_shl_code=c,true]#include "led.h" #include "uart.h" #include "fsmc1.h" #include "stm32f10x.h" void Delay (uint32_t nCount) { for(; nCount!=0;nCount--); } int main() { u32 i=0; u8 temp=0x00; LED_Init(); UART_Init(); FSMC1_Init(); LED0_On; while(1) { FSMC_FIFO1_WriteBuffer(&temp,i,1); } } [/mw_shl_code]

加入了延时函数的main函数代码(FSMC_D2和FSMC_D3直接被拉高):
[mw_shl_code=c,true]#include "led.h" #include "uart.h" #include "fsmc1.h" #include "stm32f10x.h" void Delay (uint32_t nCount) { for(; nCount!=0;nCount--); } int main() { u32 i=0; u8 temp=0x00; LED_Init(); UART_Init(); FSMC1_Init(); LED0_On; while(1) { FSMC_FIFO1_WriteBuffer(&temp,i,1); Dealy(0x50000); } }[/mw_shl_code]
求大神救命啊!感激不尽!

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-11-17 20:13:42 | 显示全部楼层
这问题可能是你液晶主动拉高了。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

1

主题

4

帖子

0

精华

新手入门

积分
28
金钱
28
注册时间
2014-11-17
在线时间
0 小时
 楼主| 发表于 2014-11-18 10:59:51 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
原子大哥,感谢您的回复。对于液晶这一块小弟不是很了解,请问假如是这样的话,该怎么检测和解决呢?这个是毕设的一个模块,实在头疼啊。%>_<%
(看了老大微博,发现老大是华工的前辈哈哈)
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-11-19 00:23:38 | 显示全部楼层
回复【3楼】lee119:
---------------------------------
读ID正常不?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-11-19 00:23:51 | 显示全部楼层
读ID的时候,LCD应该输出ID才对。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

1

主题

4

帖子

0

精华

新手入门

积分
28
金钱
28
注册时间
2014-11-17
在线时间
0 小时
 楼主| 发表于 2014-11-19 22:01:23 | 显示全部楼层
回复【5楼】正点原子:
---------------------------------
谢谢老大的回答,明天去实验室研究下~
回复

使用道具 举报

1

主题

4

帖子

0

精华

新手入门

积分
28
金钱
28
注册时间
2014-11-17
在线时间
0 小时
 楼主| 发表于 2014-11-19 22:33:42 | 显示全部楼层
回复【5楼】正点原子:
---------------------------------
老大,刚才在实验室不断增加延时函数参数的数值进行对比,然后用示波器测试了下,发现随着延时函数内的参数数值的升高,那两个引脚的赋值也会相应升高,直到稳定在3.3左右。。。老大,您之前遇到过这个问题吗。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-11-20 00:12:02 | 显示全部楼层
回复【7楼】lee119:
---------------------------------
没有,你直接一个个IO接高接地试试看能否正常读取数据。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-28 23:39

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表