STM32F407ZE+LAN8720A硬件初步验证

2019-08-16 23:50发布

硬件参考探索者F4如图所示
u8 LAN8720_Init(void)
{
        u8 rval=0;
        u16 m;
        GPIO_InitTypeDef GPIO_InitStructure;

        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOG | RCC_AHB1Periph_GPIOD,ENABLE);       
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);     
        SYSCFG_ETH_MediaInterfaceConfig(SYSCFG_ETH_MediaInterface_RMII);

        GPIO_InitStructure.GPIO_Pin                = GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_7;
        GPIO_InitStructure.GPIO_Speed     = GPIO_Speed_100MHz;
        GPIO_InitStructure.GPIO_Mode      = GPIO_Mode_AF;
        GPIO_InitStructure.GPIO_OType    = GPIO_OType_PP;
        GPIO_InitStructure.GPIO_PuPd       = GPIO_PuPd_UP ;  
        GPIO_Init(GPIOA, &GPIO_InitStructure);       
        GPIO_PinAFConfig(GPIOA, GPIO_PinSource1, GPIO_AF_ETH);
        GPIO_PinAFConfig(GPIOA, GPIO_PinSource2, GPIO_AF_ETH);
        GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_ETH);

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_4 | GPIO_Pin_5;
        GPIO_Init(GPIOC, &GPIO_InitStructure);
        GPIO_PinAFConfig(GPIOC, GPIO_PinSource1, GPIO_AF_ETH);
        GPIO_PinAFConfig(GPIOC, GPIO_PinSource4, GPIO_AF_ETH);
        GPIO_PinAFConfig(GPIOC, GPIO_PinSource5, GPIO_AF_ETH);

        GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_11 | GPIO_Pin_13 | GPIO_Pin_14;
        GPIO_Init(GPIOG, &GPIO_InitStructure);
        GPIO_PinAFConfig(GPIOG, GPIO_PinSource11, GPIO_AF_ETH);
        GPIO_PinAFConfig(GPIOG, GPIO_PinSource13, GPIO_AF_ETH);
        GPIO_PinAFConfig(GPIOG, GPIO_PinSource14, GPIO_AF_ETH);
       
        GPIO_InitStructure.GPIO_Pin                 = GPIO_Pin_3;
        GPIO_InitStructure.GPIO_Speed      = GPIO_Speed_100MHz;
        GPIO_InitStructure.GPIO_Mode         = GPIO_Mode_OUT;
        GPIO_InitStructure.GPIO_OType     = GPIO_OType_PP;       
        GPIO_InitStructure.GPIO_PuPd         = GPIO_PuPd_NOPULL ;  
        GPIO_Init(GPIOD, &GPIO_InitStructure);
       
        LAN8720_RST=0;                                       
        for(m=0;m<10000;m++);
        LAN8720_RST=1;                               
        return !rval;                               
}


int main(void)
{       
        Hardware_Configuration();       
        devAddr_dau                = readDeviceAddr();                        //read device address
        devTypeAddr_dau        = readDeviceTypeAddr();                //read device type address
       
        LAN8720_Init();
        ETH_WritePHYRegister(0, 0, 0x5555);
        lan8720a_bcr        = ETH_ReadPHYRegister(0, 0);

        while(1)
        {
                if(devAddr_dau==0)
                {
                        debugeHardware();
                }
                else
                {

                }
                scanTimeValue();
                GPIO_ScanOutputCtr();               
        }
}

调试目的:LAN8720a写入读出寄存器能够正常操作
测试结果:BCR寄存器写入0x1234读出为0x0000
问题排查:测试LAN8720A晶振25MHZ起振
问题请教:1.根据原理图nINTSEL引脚(PIN2)=0, nINT/REFCLKO引脚(PIN14)是否应该测试到50MHZ波形?(目前测试不到)
               2.nINT/REFCLKO引脚(PIN14)如果没有50MHZ信号输入,MDIO/MDC引脚是否能够测试到信号?(目前测试不到)
               3.使用该程序实现LAN8720a寄存器写入读出,是否存在问题?
补充说明:板子IO输入输出、串口其它功能运行正常。
请熟悉的朋友发表意见,多多指教,谢谢!

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
yuangt
1楼-- · 2019-08-17 03:56
本帖最后由 yuangt 于 2017-7-17 16:30 编辑

看内存,也没有超出呀?

刚刚在论坛里找到了答案:

如果是用了原子哥的程序,请修改下堆的大小。MEM1_MAX_SIZE参数改小点。
类似于:

//mem1内存参数设定,mem1完全处于内部SRAM里面
#define MEM1_BLOCK_SIZE        32                          //内存块大小为32字节
#define MEM1_MAX_SIZE                100*1024         //最大管理内存 80k
#define MEM1_ALLOC_TABLE_SIZE MEM1_MAX_SIZE/MEM1_BLOCK_SIZE  //内存表大小
正点原子
2楼-- · 2019-08-17 09:08
 精彩回答 2  元偷偷看……
remy911
3楼-- · 2019-08-17 12:59
正点原子 发表于 2017-7-7 01:00
8720底部有个GND焊盘,接上了么?

已经接上,焊盘留了过孔,从背面上锡,晶振已经起振,用示波器可以测试到25MHZ波形,如图1:晶振波形;图2:LAN8720A第14引脚(REFCLKO)。问         :按照原理图此时LAN8720A第14引脚(REFCLKO)应该能够测试到50MHZ信号?(没有测试到)
补充说明:示波器探针打到10X档。
正点原子
4楼-- · 2019-08-17 18:12
remy911 发表于 2017-7-7 09:05
已经接上,焊盘留了过孔,从背面上锡,晶振已经起振,用示波器可以测试到25MHZ波形,如图1:晶振波形;图 ...

MDIO能读取数据了么?
yuangt
5楼-- · 2019-08-17 20:32
本帖最后由 yuangt 于 2017-7-17 12:02 编辑
正点原子 发表于 2017-7-8 23:16
MDIO能读取数据了么?

原子兄,我移植了你的8720以太网程序,主函数把while(lwip_comm_init()!=0);
一放上,就报错了,

最后查查定位到
p = mymalloc(0,1);
这个函数,主函数一旦加了这一句,就立马报错了,没加这句我的编译结果如下:


Build target 'KZQ_Ctrl_F4'
compiling main.c...
Hardwaremain.c(43): warning:  #177-D: variable "p" was declared but never referenced
        char *p;
Hardwaremain.c: 1 warning, 0 errors
linking...
Program Size: Code=55452 RO-data=656 RW-data=2772 ZI-data=326140  
FromELF: creating hex file...
"....OutputKZQ_Ctrl.axf" - 0 Error(s), 1 Warning(s).







主函数加了  p = mymalloc(0,1);  这句后,编译结果如下:


Build target 'KZQ_Ctrl_F4'
compiling main.c...
Hardwaremain.c(43): warning:  #550-D: variable "p" was set but never used
        char *p;
Hardwaremain.c: 1 warning, 0 errors
linking...
....OutputKZQ_Ctrl.axf: Error: L6406E: No space in execution regions with .ANY selector matching common.o(.bss).
....OutputKZQ_Ctrl.axf: Error: L6406E: No space in execution regions with .ANY selector matching torque.o(.bss).
....OutputKZQ_Ctrl.axf: Error: L6406E: No space in execution regions with .ANY selector matching usart.o(.data).
....OutputKZQ_Ctrl.axf: Error: L6406E: No space in execution regions with .ANY selector matching startup_stm32f4xx.o(STACK).
....OutputKZQ_Ctrl.axf: Error: L6406E: No space in execution regions with .ANY selector matching torque.o(.data).
....OutputKZQ_Ctrl.axf: Error: L6406E: No space in execution regions with .ANY selector matching common.o(.data).
....OutputKZQ_Ctrl.axf: Error: L6406E: No space in execution regions with .ANY selector matching key.o(.data).
....OutputKZQ_Ctrl.axf: Error: L6406E: No space in execution regions with .ANY selector matching display.o(.data).
....OutputKZQ_Ctrl.axf: Error: L6406E: No space in execution regions with .ANY selector matching malloc.o(.data).
....OutputKZQ_Ctrl.axf: Error: L6406E: No space in execution regions with .ANY selector matching display.o(.bss).
....OutputKZQ_Ctrl.axf: Error: L6406E: No space in execution regions with .ANY selector matching stm32f4xx_rcc.o(.data).
....OutputKZQ_Ctrl.axf: Error: L6406E: No space in execution regions with .ANY selector matching stm32f4xx_it.o(.data).
....OutputKZQ_Ctrl.axf: Error: L6406E: No space in execution regions with .ANY selector matching stdout.o(.data).
....OutputKZQ_Ctrl.axf: Error: L6406E: No space in execution regions with .ANY selector matching errno.o(.data).
....OutputKZQ_Ctrl.axf: Error: L6407E: Sections of aggregate size 0xb3f4 bytes could not fit into .ANY selector(s).
Not enough information to list image symbols.
Not enough information to list the image map.
Finished: 2 information, 0 warning and 15 error messages.
"....OutputKZQ_Ctrl.axf" - 15 Error(s), 1 Warning(s).
Target not created.




这是什么情况呀?我用的是stm32f407

一周热门 更多>