STM32F0的硬件串口调试求助,因为FIFO存在导致软件CS片选和硬件SPI不同步,请教高手指点
准备用硬件串口刷屏但发现如下问题,因为屏幕需要接RS脚,指令数据切换,CS片选
F0串口带32bit的fifo,而且无法屏蔽
片选倒好,可以一直拉低,但由于FIFO存在造成软件设置RS脚 和硬件串口不同步导致乱码
SPI初始化如下:
[mw_shl_code=c,true]GPIO_InitStruct.GPIO_Pin = GPIO_Pin_5|GPIO_Pin_7;//sck//miso
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_Level_3;
GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;
GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOA, &GPIO_InitStruct);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource5, GPIO_AF_0);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_0);
SPI_InitStruct.SPI_Direction = SPI_Direction_1Line_Tx;//
SPI_InitStruct.SPI_Mode = SPI_Mode_Master;
SPI_InitStruct.SPI_DataSize = SPI_DataSize_8b;
SPI_InitStruct.SPI_CPOL = SPI_CPOL_High;
SPI_InitStruct.SPI_CPHA = SPI_CPHA_2Edge;
SPI_InitStruct.SPI_NSS = SPI_NSS_Soft;
SPI_InitStruct.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;//分频只能是2,再慢就乱码
SPI_InitStruct.SPI_FirstBit = SPI_FirstBit_MSB;
SPI_InitStruct.SPI_CRCPolynomial = 7;
SPI_Init(SPI1, &SPI_InitStruct);
SPI_RxFIFOThresholdConfig(SPI1, SPI_RxFIFOThreshold_QF);//只找到接收FIFO设置,没发送FIFO设置
SPI_Cmd(SPI1, ENABLE);[/mw_shl_code]
写8bit指令:
[mw_shl_code=c,true]while((SPI1->SR&SPI_I2S_FLAG_TXE)==RESET);//等上一个字节发送完
RS_L;//设置写指令
*(uint8_t *)(&SPI1->DR) = dat;//发8bit
[/mw_shl_code]
写16bit数据://因为缓冲区16bit可以直接发16bit数据,只是高低位交换一下
[mw_shl_code=c,true]while((SPI1->SR&SPI_I2S_FLAG_TXE)==RESET);//等上一个字节发送完
RS_H;//设置写数据
SPI1->DR = dat;//发送16bit
while((SPI1->SR&SPI_I2S_FLAG_TXE)==RESET);//等前8bit发完后退出[/mw_shl_code]
程序在STM32F103上没任何问题,移植到051各种乱码。请高手指教
|