//包括SPI初始化/IO初始化等
void ENC28J60_Reset(void)
{
RCC->APB2ENR|=1<<3; //使能PORTB时钟
RCC->APB2ENR|=1<<5; //使能PORTD时钟
RCC->APB2ENR|=1<<8; //使能PORTG时钟
GPIOD->CRL&=0XFFFFF0FF;
GPIOD->CRL|=0X00000300; //PD2 推挽
GPIOD->ODR|=1<<2; //PD2上拉
//这里PG7和PB12拉高,是为了防止NRF24L01和SPI FLASH影响.
//因为他们共用一个SPI口.
GPIOB->CRH&=0XFFF0FFFF;
GPIOB->CRH|=0X00030000; //PB12 推挽
GPIOB->ODR|=1<<12; //PB12上拉
GPIOG->CRL&=0X00FFFFFF;
GPIOG->CRL|=0X33000000; //PG6/7 推挽
GPIOG->CRH&=0XFFFFFFF0;
GPIOG->CRH|=0X00000003; //PG8 推挽
GPIOG->ODR|=7<<6; //PG6/7/8 上拉
SPI2_Init(); //初始化SPI2
//针对ENC28J60的特点(SCK空闲为低电平)修改SPI的设置
SPI2->CR1&=~(1<<6); //SPI设备失能
SPI2->CR1&=~(1<<1); //空闲模式下SCK为0 CPOL=0
SPI2->CR1&=~(1<<0); //数据采样从第1个时间边沿开始,CPHA=0
SPI2->CR1|=1<<6; //SPI设备使能 SPI2_SetSpeed(SPI_SPEED_4); //SPI2 SCK频率为36M/4=9Mhz
TIM6_Int_Init(1000,719);//100Khz计数频率,计数到1000为10ms
ENC28J60_RST=0; //复位ENC28J60
delay_ms(10);
ENC28J60_RST=1; //复位结束
delay_ms(10);
}
想问一下在enc28j60的初始化为什么么要开启定时器6??
|
你可以进入中断程序看看,是否有一个读取标志,
跟踪一下就知道了。
评分
查看全部评分
评分
查看全部评分
你查一下这个延时函数,里面可能是
赋初值
启动定时器
查询某标识位,等待置位
关闭定时器
这样的实现。
评分
查看全部评分