接上篇,在STM32上调试完成的SMI驱动模拟代码实现奉上,供交流学习,代码如下:
#include <stdio.h>
#include "sys.h"
#include "delay.h"
#include "mdio.h"
#define delay_su 1
#define MDIO PCout(3) // SDA
#define MDC PCout(2) // SCL
#define READ_MDIO PCin(3) //SDA
void SMI_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOA, ENABLE); //ʹÄÜPB,PE¶Ë¿ÚʱÖÓ
//配置PC2 PC3为推完输出,GPIO模拟SMI
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_Init(GPIOC, &GPIO_InitStructure);//PC2 MDIO
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD ;//GPIO_PuPd_UP GPIO_PuPd_NOPULL
GPIO_Init(GPIOC, &GPIO_InitStructure);//PC2 MDC ,不需要上拉
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //复位脚
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ;//GPIO_PuPd_UP GPIO_PuPd_NOPULL
GPIO_Init(GPIOA, &GPIO_InitStructure);//PA02 MDC ,
GPIO_SetBits(GPIOA,GPIO_Pin_0);
MDIO = 1;
MDC = 0;
}
void SMI_SDIO_MODE_OUT(void)
{
GPIO_InitTypeDe