寄存器设置如下:
/******************************SPI2初始化******************************************/
void SPI2_init(void)
{
RCC->APB1LENR |= 1<<14; //使能SPI2时钟,APB1=
SPI2->CR1 = 0x0000; //SPI禁止
delay_ms(1);
SPI2->CR1 |= (1<<12); //SSI bit has an effect only when the SSM bit is set
delay_ms(1);
SPI2->CFG1 = (3<<28)|(15<<16)|(15<<0); //16位数据,波特率=SPI master clock/16
delay_ms(1);
SPI2->CFG2 = (1<<26)|(0<<25)|(0<<24)|(0<<23)|(1<<22)|(0<<17); //SSM置位,SCK空闲低,第1个时钟沿开始采样,先发MSB,Master,
delay_ms(1);
SPI2->CR1 |= 1; //使能SPI
delay_ms(1);
SPI2->CR1 |= (1<<9);//CSTART置位, CSTART can be set only when SPE=1 and MASTER=1.
delay_ms(1);
}
主函数调用程序如下:
CSN_CLC;
while((SPI2->SR & 2)==0);
SPI2->TXDR=0x5511;
while((SPI2->SR & 1)==0);
SPI1->RXDR;
CSN_SET;
只是测试,没有接任何外设,发现SPI2的MOSI能正常发出数据,但是SCK发出时钟数为32个,更改SPI2->CFG1 的DSIZE设置不起作用,一直输出32个周期的时钟,这是怎么回事呢?调了一天,快崩溃了
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>