詹科联手走天下吗 发表于 2017-8-1 11:27:51

求问一下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??

无薪税绵 发表于 2017-8-1 11:27:52

它可能是用定时器来定时读取28j60的数据吧。
你可以进入中断程序看看,是否有一个读取标志,
跟踪一下就知道了。

maxtch 发表于 2017-12-9 21:27:29

ENC28J60 有一条中断线,是不是这条线没接,TIM6 拿来做轮询代替中断了?

arm8686 发表于 2017-12-11 09:18:09

是给这个 delay_ms(10); 函数使用的吧?
你查一下这个延时函数,里面可能是
    赋初值
    启动定时器
    查询某标识位,等待置位
    关闭定时器
这样的实现。
页: [1]
查看完整版本: 求问一下stm32的定时器与enc28j60的问题