求问一下stm32的定时器与enc28j60的问题
//包括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??
它可能是用定时器来定时读取28j60的数据吧。
你可以进入中断程序看看,是否有一个读取标志,
跟踪一下就知道了。 ENC28J60 有一条中断线,是不是这条线没接,TIM6 拿来做轮询代替中断了? 是给这个 delay_ms(10); 函数使用的吧?
你查一下这个延时函数,里面可能是
赋初值
启动定时器
查询某标识位,等待置位
关闭定时器
这样的实现。
页:
[1]