打印

stm32f103vct6 +dm9000cep (通过FSMC连接)

[复制链接]
8582|25
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
gxlsunday|  楼主 | 2012-12-25 18:08 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
我的连接方式:16跟数据线连接到stm32f103vct6的fsmc的数据线上,FSMC_NOE和FSMC_NWE 分别连接到dm9000a的IOR和IOW上FSMC_A18和 FSMC_A16分别连接到dm9000a的cs和cmd上,dm9000a的rst连接到一个单独的GPIO上,DM9000A连接到stm32f103的外部中断,


遇到的问题:读取厂商ID是错误的:
下面是我的初始化配置文件:
static void DM9K_FSMCConfig(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
        FSMC_NORSRAMInitTypeDef  FSMC_NORSRAMInitStructure;
        FSMC_NORSRAMTimingInitTypeDef  FSMC_NORSRAMTimingInitStructure;

        /* FSMC GPIO configure */
        RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC, ENABLE);

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE
                                                    | RCC_APB2Periph_AFIO, ENABLE);
   
        /* PD14 FSMC_D0   PD15 FSMC_D1   PD10  FSMC_D15   PD8  FSMC_D13  PD9  FSMC_D14  PD2  FSMC_D2  PD1  FSMC_D3 */       
        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_Pin_11 /*|GPIO_Pin_12*/| GPIO_Pin_13;
        GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_AF_PP;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOD,&GPIO_InitStructure);
      
    /* PE7 ~ PE15  FSMC_D4 ~ FSMC_D12 */  
    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);
                                                                                               

        /* FSMC set read time */
        FSMC_NORSRAMTimingInitStructure.FSMC_AddressSetupTime = 4;             /* 地址建立时间  */
        FSMC_NORSRAMTimingInitStructure.FSMC_AddressHoldTime = 4;          
        FSMC_NORSRAMTimingInitStructure.FSMC_DataSetupTime = 8;                    /* 数据建立时间  */
        FSMC_NORSRAMTimingInitStructure.FSMC_BusTurnAroundDuration = 0;
        FSMC_NORSRAMTimingInitStructure.FSMC_CLKDivision = 0;
        FSMC_NORSRAMTimingInitStructure.FSMC_DataLatency = 4;
        FSMC_NORSRAMTimingInitStructure.FSMC_AccessMode = FSMC_AccessMode_A;        /* FSMC 访问模式 */
       
        FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM4;
        FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Enable;
        FSMC_NORSRAMInitStructure.FSMC_MemoryType =  FSMC_MemoryType_NOR;
        FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = 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_AsynchronousWait = FSMC_AsynchronousWait_Disable;
        FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable;
        FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable;
        FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &FSMC_NORSRAMTimingInitStructure;
        FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);
        /* FSMC set write time */
        FSMC_NORSRAMTimingInitStructure.FSMC_AddressSetupTime = 4;                 /* 地址建立时间  */
        FSMC_NORSRAMTimingInitStructure.FSMC_AddressHoldTime = 4;          
        FSMC_NORSRAMTimingInitStructure.FSMC_DataSetupTime = 8;                        /* 数据建立时间  */
        FSMC_NORSRAMTimingInitStructure.FSMC_BusTurnAroundDuration = 0;
        FSMC_NORSRAMTimingInitStructure.FSMC_CLKDivision = 0;
        FSMC_NORSRAMTimingInitStructure.FSMC_DataLatency = 4;
        FSMC_NORSRAMTimingInitStructure.FSMC_AccessMode = FSMC_AccessMode_A;            /* FSMC 访问模式 */
        FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &FSMC_NORSRAMTimingInitStructure;          
       
        FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);
       
        /* Enable FSMC Bank4_SRAM Bank */
        FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM4, ENABLE);
        return;
}

沙发
uet_cache| | 2012-12-25 18:11 | 只看该作者
是不是你的指定地址搞错了,32中的位地址好像有错位的呦

使用特权

评论回复
板凳
gxlsunday|  楼主 | 2012-12-26 09:01 | 只看该作者
能说具体吗?怎么位地址错位?谢谢!

使用特权

评论回复
地板
uet_cache| | 2012-12-26 09:02 | 只看该作者
程序中具体的读写地址

使用特权

评论回复
5
gxlsunday|  楼主 | 2012-12-26 09:48 | 只看该作者
#define NET_REG_ADDR    0x6c000000
#define NET_REG_DATA      0x6c020000

接线就是我上面说的,fsmc的配置也在上面,有问题吗?

使用特权

评论回复
6
uet_cache| | 2012-12-26 10:01 | 只看该作者


对于16位宽度的外部存储器,FSMC将在内部使用HADDR[25:1]产生外部存储器的地址FSMC_A[24:0]。

使用特权

评论回复
7
uet_cache| | 2012-12-26 10:02 | 只看该作者
关键点提醒你了,余下的,自己慢慢研究吧。

使用特权

评论回复
8
gxlsunday|  楼主 | 2012-12-26 10:17 | 只看该作者
真的谢谢,但是我的dm9000a没有那么多。只有16跟数据线和地址线公用,cs和cmd分别接fsmc_A16和fsmc_A18,没有用到你刚才说的地址线
,你上面说的我没有看明白,对于我这个dm9000a,不知道怎么弄,谢谢

使用特权

评论回复
9
uet_cache| | 2012-12-26 10:19 | 只看该作者
:L自己再想想。。。。

使用特权

评论回复
10
gxlsunday|  楼主 | 2012-12-26 10:20 | 只看该作者
不明白,但还是谢谢你!:)

使用特权

评论回复
11
uet_cache| | 2012-12-26 10:23 | 只看该作者
A16,A18不属于A[24:0]?

使用特权

评论回复
12
uet_cache| | 2012-12-26 10:39 | 只看该作者
还不明白吗?

使用特权

评论回复
13
uet_cache| | 2012-12-26 10:40 | 只看该作者
你的数据宽度是16位撒。。。你的地址。。。?

使用特权

评论回复
14
gxlsunday|  楼主 | 2012-12-26 10:53 | 只看该作者
是16位地址,#define NET_REG_ADDR    0x6c000000
                            #define NET_REG_DATA      0x6c020000
我强制转化成uint16了 ,还是不明白,请高手给说明白

使用特权

评论回复
15
gxlsunday|  楼主 | 2012-12-26 10:54 | 只看该作者
A16,A18不属于A[24:0]?  什么意思?不太明白?

使用特权

评论回复
16
gxlsunday|  楼主 | 2012-12-26 10:56 | 只看该作者
请高手给我说明白,这个问题困扰我很长时间!谢谢

使用特权

评论回复
17
uet_cache| | 2012-12-26 10:57 | 只看该作者
你可以再温习下 “微机原理中的地址数据总线内容”,再结合32上面我帖的图。或者你再细细看下手册中的FSMC部分。。。我想我已经帖的很清楚了。。

使用特权

评论回复
18
uet_cache| | 2012-12-26 11:00 | 只看该作者
地址线不是16位。。。都已经用了A16,A18了,怎么会是16位

使用特权

评论回复
19
uet_cache| | 2012-12-26 11:00 | 只看该作者
数据线是16位而已,,

使用特权

评论回复
20
gxlsunday|  楼主 | 2012-12-26 11:05 | 只看该作者
dm9000a  CS接stm32f103vct6 famc_A18
                    CMD接stm32f103vct6 famc_A16

有什么问题,跟16跟数据线有什么关系

使用特权

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

本版积分规则

44

主题

87

帖子

2

粉丝