初级会员

- 积分
- 72
- 金钱
- 72
- 注册时间
- 2015-11-18
- 在线时间
- 15 小时
|

楼主 |
发表于 2016-6-21 15:41:26
|
显示全部楼层
#define ENC28J60_CS PGout(7) //ENC28J60片选信号
#define ENC28J60_RST PGout(6) //ENC28J60复位信号
void ENC28J60_Reset(void)
{
RCC->AHB1ENR|=1<<6; //使能PORTG时钟
GPIO_Set(GPIOG,3<<6,GPIO_MODE_OUT,GPIO_OTYPE_PP,GPIO_SPEED_100M,GPIO_PUPD_PU); //PG6/7输出
SPI1_Init(); //初始化SPI1
TIM3_Int_Init(99,8399); //10Khz计数频率,计数到100为10ms
ENC28J60_RST=0; //复位ENC28J60
delay_ms(200);
ENC28J60_RST=1; //复位结束
delay_ms(100);
}
void SPI1_Init(void)
{
u16 tempreg=0;
RCC->AHB1ENR|=1<<1; //使能PORTB时钟
RCC->APB2ENR|=1<<12; //SPI1时钟使能
GPIO_Set(GPIOB,7<<3,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_100M,GPIO_PUPD_PU); //PB3~5复用功能输出
GPIO_AF_Set(GPIOB,3,5); //PB3,AF5
GPIO_AF_Set(GPIOB,4,5); //PB4,AF5
GPIO_AF_Set(GPIOB,5,5); //PB5,AF5
//这里只针对SPI口初始化
RCC->APB2RSTR|=1<<12; //复位SPI1
RCC->APB2RSTR&=~(1<<12);//停止复位SPI1
tempreg|=0<<10; //全双工模式
tempreg|=1<<9; //软件nss管理
tempreg|=1<<8;
tempreg|=1<<2; //SPI主机
tempreg|=0<<11; //8位数据格式
tempreg&=~(1<<1); //空闲模式下SCK为0 CPOL=0|=1<<1; //空闲模式下SCK为1 CPOL=1
tempreg&=~(1<<0); //数据采样从第1个时间边沿开始,CPHA=0 |=1<<0; //数据采样从第2个时间边沿开始,CPHA=1
//对SPI1属于APB2的外设.时钟频率最大为84Mhz频率.
tempreg|=7<<3; //Fsck=Fpclk1/256
tempreg|=0<<7; //MSB First
tempreg|=1<<6; //SPI启动
SPI1->CR1=tempreg; //设置CR1
SPI1->I2SCFGR&=~(1<<11);//选择SPI模式
SPI1_ReadWriteByte(0xff);//启动传输
}
原子哥,能不能抽点时间帮我看看,我是真的找不到哪错了。一直卡在tapdev_init()这里,初始化过不去,非常感谢。 |
|