打印

stm32f103vct6 通过FSMC连接DM9000a,读取厂商id错了

[复制链接]
4250|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
gxlsunday|  楼主 | 2012-12-26 13:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我的连接方式: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;
}

相关帖子

沙发
gxlsunday|  楼主 | 2012-12-26 13:30 | 只看该作者
恳请高手解答!谢谢

使用特权

评论回复
板凳
ffeige1984| | 2012-12-27 16:59 | 只看该作者
为什么不用107呢?不差几个钱啊

使用特权

评论回复
地板
jlass| | 2012-12-27 18:56 | 只看该作者
看的我头都晕了,硬件连接应该没有问题。
不过看你的写法很规范,应该是个软件人员,建议叫个硬件的配合你看一下时序。

使用特权

评论回复
5
sp19880212| | 2013-1-5 11:41 | 只看该作者
你好,楼主请问你所说的读取厂商ID错误是指读到DM9000AEP的ID出错吗?有什么问题可以跟我联系,我司可以提供技术支持

使用特权

评论回复
6
fvlkejr| | 2013-1-9 19:05 | 只看该作者
读取厂商ID,先要RST复位

使用特权

评论回复
7
inurl| | 2013-1-10 08:29 | 只看该作者
其他寄存器能读吗、 ? 硬件连接问题 ? 复位引脚结了没

使用特权

评论回复
8
oolyl| | 2013-1-17 23:51 | 只看该作者
我读出来一直是0x10000a46,理应是90000a46,后面三个字节(00 0a 46)是对的,就第一个字节错了,怎么回事,求解?

使用特权

评论回复
9
lizexi486| | 2013-6-15 23:49 | 只看该作者
oolyl 发表于 2013-1-17 23:51
我读出来一直是0x10000a46,理应是90000a46,后面三个字节(00 0a 46)是对的,就第一个字节错了,怎么回事, ...

lz问题解决没有呢?

使用特权

评论回复
10
lizexi486| | 2013-6-16 00:04 | 只看该作者
inurl 发表于 2013-1-10 08:29
其他寄存器能读吗、 ? 硬件连接问题 ? 复位引脚结了没

我也遇到类似的问题,复位引脚一定要接吗?我的复位引脚接了,但在程序中没有去控制塔,这样有没有问题呢?

使用特权

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

本版积分规则

44

主题

87

帖子

2

粉丝