|
最近驱动一个OLED屏幕,使用硬件SPI驱动,只用了MOSI和SCLK这两根线,软件配置如下:
SPI_InitTypeDef SPI_InitStruct;
GPIO_InitTypeDef GPIO_InitStruct;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1,ENABLE);
GPIO_InitStruct.GPIO_Mode = SPI_1_SCLK_MODE;
GPIO_InitStruct.GPIO_Pin = SPI_1_SCLK_PIN;
GPIO_InitStruct.GPIO_Speed = SPI_1_SCLK_SPEED;
GPIO_Init(SPI_1_SCLK_GPIO,&GPIO_InitStruct);
GPIO_InitStruct.GPIO_Mode = SPI_1_NSS_MODE;
GPIO_InitStruct.GPIO_Pin = SPI_1_NSS_PIN;
GPIO_InitStruct.GPIO_Speed = SPI_1_NSS_SPEED;
GPIO_Init(SPI_1_NSS_GPIO,&GPIO_InitStruct);
GPIO_InitStruct.GPIO_Mode = SPI_1_MOSI_MODE;
GPIO_InitStruct.GPIO_Pin = SPI_1_MOSI_PIN;
GPIO_InitStruct.GPIO_Speed = SPI_1_MOSI_SPEED;
GPIO_Init(SPI_1_MOSI_GPIO,&GPIO_InitStruct);
//以上三个均为复用推挽 AF_PP
SPI_InitStruct.SPI_CPHA = 0;
SPI_InitStruct.SPI_CPOL = 0;
SPI_InitStruct.SPI_DataSize = SPI_DataSize_8b;
SPI_InitStruct.SPI_Direction = SPI_Direction_1Line_Tx;
SPI_InitStruct.SPI_FirstBit = SPI_FirstBit_MSB;
SPI_InitStruct.SPI_Mode = SPI_Mode_Master;
SPI_InitStruct.SPI_NSS = SPI_NSS_Hard;
SPI_InitStruct.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4;
SPI_InitStruct.SPI_CRCPolynomial = 7;
SPI_Init(SPI1,&SPI_InitStruct);
SPI_Cmd(SPI1,ENABLE);
SPI_1_NSS_ENABLE;
但是这个代码在下载完后SPI能正常启动,时钟线上都有相应的脉冲出现,但是只要复位或者掉电重启,时钟线上就不会出现任何脉冲,之后不断复位或者重启只有小概率能正常启动,但单片机依旧是正常的在跑,求教各位大神,这是啥问题,第一次发帖,有不对或欠缺的还请指出
|
|