OpenEdv-开源电子网

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

关于战舰V3 DM9000IO模拟的问题

[复制链接]

3

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
153
金钱
153
注册时间
2018-1-10
在线时间
50 小时
发表于 2018-1-10 19:34:42 | 显示全部楼层 |阅读模式
1金钱
由于需要在C8T6上添加DM9000,所以我在战舰V3上将FSMC方式换成了IO模拟,现在出现了一个问题,可以正确获取ID和速率,但是在开启DHCP中死掉了,只修改了三个函数,一个初始化函数,一个DM9000_WriteReg和DM9000_ReadReg,串口输出结果如图,望大佬相助!!!!!

捕获.JPG

实验50 网络通信实验.zip

10.58 MB, 下载次数: 67

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

使用道具 举报

3

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
153
金钱
153
注册时间
2018-1-10
在线时间
50 小时
 楼主| 发表于 2018-1-10 20:06:33 | 显示全部楼层
使用战舰V3的示例没问题,但是修改为IO模拟后,就一直卡在DHCP
回复

使用道具 举报

3

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
153
金钱
153
注册时间
2018-1-10
在线时间
50 小时
 楼主| 发表于 2018-1-10 20:08:43 | 显示全部楼层
[mw_shl_code=c,true]GPIO_InitTypeDef  GPIO_InitStructure;
        EXTI_InitTypeDef  EXTI_InitStructure;
        NVIC_InitTypeDef  NVIC_InitStructure;

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOE|\
                                           RCC_APB2Periph_GPIOF|RCC_APB2Periph_GPIOG,ENABLE);        //ê1ÄüGPIOD E F Gê±Öó

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;                 //PD7
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//íÆíìêä3ö
        GPIO_Init(GPIOD,&GPIO_InitStructure);

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;                 //PG6
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;        //éÏà-êäèë
        GPIO_Init(GPIOG,&GPIO_InitStructure);
       
        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; //PD0 1 4 5 8 9 10 14 15¸′óÃ
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//íÆíìêä3ö
        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_Pin_15;                         //PG7 8 9 10 11 12 13 14 15¸′óÃ
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//íÆíìêä3ö
        GPIO_Init(GPIOE,&GPIO_InitStructure);
       
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;                //PF13
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//íÆíìêä3ö
        GPIO_Init(GPIOF,&GPIO_InitStructure);
       
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;                //PG9
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//íÆíìêä3ö
        GPIO_Init(GPIOG,&GPIO_InitStructure);
       
        //PG6ía2¿ÖD¶Ï£¬ÖD¶ÏÏß6
        GPIO_EXTILineConfig(GPIO_PortSourceGPIOG,GPIO_PinSource6);
       
        EXTI_InitStructure.EXTI_Line = EXTI_Line6;
        EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
        EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
        EXTI_InitStructure.EXTI_LineCmd = ENABLE;
        EXTI_Init(&EXTI_InitStructure);
       
        EXTI_ClearITPendingBit(EXTI_Line6); //Çå3yÖD¶ÏÏß61òÆe±ê־λ
       
        NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn;                        //ía2¿ÖD¶ÏÏß6
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;        //ÇàÕ¼óÅÏè¼¶
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;                        //×óóÅÏè¼¶
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);[/mw_shl_code]
回复

使用道具 举报

3

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
153
金钱
153
注册时间
2018-1-10
在线时间
50 小时
 楼主| 发表于 2018-1-10 20:09:08 | 显示全部楼层
[mw_shl_code=c,true]u16 DM9000_ReadReg(u16 reg)
{
        u16 read_data = 0;
               
                DM9000_Write_Byte(reg,0);
                DM9000_IN();
                delay_us(20);
                DM9000_CMD = 1;
                DM9000_CS = 0;
                DM9000_RD = 0;       
                read_data |= PDin(10);
                read_data <<= 1;
                read_data |= PDin(9);
                read_data <<= 1;
                read_data |= PDin(8);
                read_data <<= 1;
                read_data |= PEin(15);
                read_data <<= 1;
                read_data |= PEin(14);
                read_data <<= 1;
                read_data |= PEin(13);
                read_data <<= 1;
                read_data |= PEin(12);
                read_data <<= 1;
                read_data |= PEin(11);
                read_data <<= 1;
                read_data |= PEin(10);
                read_data <<= 1;
                read_data |= PEin(9);
                read_data <<= 1;
                read_data |= PEin(8);
                read_data <<= 1;
                read_data |= PEin(7);
                read_data <<= 1;
                read_data |= PDin(1);
                read_data <<= 1;
                read_data |= PDin(0);
                read_data <<= 1;
                read_data |= PDin(15);
                read_data <<= 1;
                read_data |= PDin(14);
               
                DM9000_RD = 1;
                DM9000_CS = 1;
                DM9000_OUT();
                return read_data;
}[/mw_shl_code]
回复

使用道具 举报

3

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
153
金钱
153
注册时间
2018-1-10
在线时间
50 小时
 楼主| 发表于 2018-1-10 20:09:38 | 显示全部楼层
[mw_shl_code=c,true]void DM9000_Write_Byte(unsigned short write_data,unsigned char write_type)
{
                DM9000_CMD = write_type;        //D′è&#235;μ&#196;ààDí       
                DM9000_CS = 0;
                PDout(14) = write_data & 0x01;
                PDout(15) = (write_data >> 1) & 0x01;
                PDout(0) = (write_data >> 2) & 0x01;
                PDout(1) = (write_data >> 3) & 0x01;
                PEout(7) = (write_data >> 4) & 0x01;
                PEout(8) = (write_data >> 5) & 0x01;
                PEout(9) = (write_data >> 6) & 0x01;
                PEout(10) = (write_data >> 7) & 0x01;
                PEout(11) = (write_data >> 8) & 0x01;
                PEout(12) = (write_data >> 9) & 0x01;
                PEout(13) = (write_data >> 10) & 0x01;
                PEout(14) = (write_data >> 11) & 0x01;
                PEout(15) = (write_data >> 12) & 0x01;
                PDout(8) = (write_data >> 13) & 0x01;
                PDout(9) = (write_data >> 14) & 0x01;
                PDout(10) = (write_data >> 15) & 0x01;
                DM9000_WR = 0;
       
                DM9000_WR = 1;
                DM9000_CS = 1;
               
               
}[/mw_shl_code]
回复

使用道具 举报

3

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
153
金钱
153
注册时间
2018-1-10
在线时间
50 小时
 楼主| 发表于 2018-1-10 20:10:07 | 显示全部楼层
[mw_shl_code=c,true]void DM9000_WriteReg(u16 reg,u16 data)
{
       
        DM9000_Write_Byte(reg,0);
        DM9000_Write_Byte(data,1);
}[/mw_shl_code]
回复

使用道具 举报

3

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
153
金钱
153
注册时间
2018-1-10
在线时间
50 小时
 楼主| 发表于 2018-1-10 20:11:09 | 显示全部楼层
[mw_shl_code=c,true]#define DM9000_RST                PDout(7)
#define DM9000_CMD                PFout(13)
#define DM9000_CS                PGout(9)
#define DM9000_RD                PDout(4)
#define DM9000_WR                PDout(5)

#define DM9000_INT                PGin(6)

#define DM9000_OUT()                {GPIOD->CRL &= 0xFFFFFF00;GPIOD->CRL |= 0x00000033;\
                                                         GPIOD->CRH &= 0x00FFF000;GPIOD->CRH |= 0x33000333;\
                                                         GPIOE->CRH &= 0x00000000;GPIOE->CRH |= 0x33333333;\
                                                         GPIOE->CRL &= 0x0FFFFFFF;GPIOE->CRL |= 0x30000000;}

#define DM9000_IN()                        {GPIOD->CRL &= 0xFFFFFF00;GPIOD->CRL |= 0x00000044;\
                                                         GPIOD->CRH &= 0x00FFF000;GPIOD->CRH |= 0x44000444;\
                                                         GPIOE->CRH &= 0x00000000;GPIOE->CRH |= 0x44444444;\
                                                         GPIOE->CRL &= 0x0FFFFFFF;GPIOE->CRL |= 0x40000000;}[/mw_shl_code]
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2018-1-11 00:42:08 | 显示全部楼层
tang113110119 发表于 2018-1-10 20:09
[mw_shl_code=c,true]void DM9000_Write_Byte(unsigned short write_data,unsigned char write_type)
{
         ...

1,有可能你的读写函数还存在bug,试试写寄存器,读出来,看看是否一致?
2,有可能函数效率太低,无法及时响应,试试优化读写函数。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-22 12:13

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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