使用ch32v307的spi2做單線發(fā)送使用,發(fā)現(xiàn)軟件cs波形在sck還沒結(jié)束就提前變高了,感覺不正常
我在SPI_I2S_SendData之后while等待TXE和BUSY信號(hào),等到他們都有效以后才退出發(fā)送函數(shù),從現(xiàn)象上來看數(shù)據(jù)還沒發(fā)完BUSY信號(hào)就已經(jīng)有效了,這個(gè)BUSY信號(hào)不應(yīng)該是發(fā)完數(shù)據(jù)以后才會(huì)有效嗎?
請(qǐng)問如何解決這個(gè)問題?
這是波形圖
初始化和發(fā)送代碼是這樣的
void?bsp_spi_config(void) { ????GPIO_InitTypeDef?gpio_init_struct?=?{0}; ????SPI_APBxClock_FUN(SPI_CLK,?ENABLE); ????SPI_CS_APBxClock_FUN(SPI_CS_CLK,?ENABLE); ????SPI_SCK_APBxClock_FUN(SPI_SCK_CLK,?ENABLE); ????SPI_MOSI_APBxClock_FUN(SPI_MOSI_CLK,?ENABLE); ????gpio_init_struct.GPIO_Speed?=?GPIO_Speed_50MHz; ????/*?SCK?*/ ????gpio_init_struct.GPIO_Mode?=?GPIO_Mode_AF_PP; ????gpio_init_struct.GPIO_Pin?=?SPI_SCK_PIN; ????GPIO_Init(SPI_SCK_PORT,?&gpio_init_struct); ????/*?MOSI?*/ ????gpio_init_struct.GPIO_Mode?=?GPIO_Mode_AF_PP; ????gpio_init_struct.GPIO_Pin?=?SPI_MOSI_PIN; ????GPIO_Init(SPI_MOSI_PORT,?&gpio_init_struct); ????/*?CS?*/ ????gpio_init_struct.GPIO_Mode?=?GPIO_Mode_Out_PP; ????gpio_init_struct.GPIO_Pin?=?SPI_CS_PIN; ????GPIO_Init(SPI_CS_PORT,?&gpio_init_struct); ????spi_init_struct.SPI_Direction?=?SPI_Direction_1Line_Tx; ????spi_init_struct.SPI_Mode?=?SPI_Mode_Master; ????spi_init_struct.SPI_DataSize?=?SPI_DataSize_8b; ????spi_init_struct.SPI_CPOL?=?SPI_CPOL_High; ????spi_init_struct.SPI_CPHA?=?SPI_CPHA_2Edge; ????spi_init_struct.SPI_NSS?=?SPI_NSS_Soft; ????spi_init_struct.SPI_BaudRatePrescaler?=?SPI_BaudRatePrescaler_8; ????spi_init_struct.SPI_FirstBit?=?SPI_FirstBit_MSB; ????spi_init_struct.SPI_CRCPolynomial?=?7; ????SPI_Init(SPIx,?&spi_init_struct); ????/*?使能?SPI??*/ ????SPI_Cmd(SPIx,?ENABLE); } void?bsp_spi_transmit(uint16_t?byte) { ????SPI_I2S_SendData(SPIx,?byte); ????while((SPI2->STATR?&?SPI_I2S_FLAG_TXE)?==?RESET); ????while((SPI2->STATR?&?SPI_I2S_FLAG_BSY)?==?SET); } int?main(void) { NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); SystemCoreClockUpdate(); Delay_Init(); USART_Printf_Init(115200); printf("SystemClk:%d\r\n",SystemCoreClock); printf(?"ChipID:%08x\r\n",?DBGMCU_GetCHIPID()?); printf("This?is?printf?example\r\n"); bsp_spi_config(); ????while(1) ????{ ????????SPI_CS_LOW(); ????????bsp_spi_transmit(0xaa); ????????bsp_spi_transmit(0xaa); ????????bsp_spi_transmit(0xaa); ????????bsp_spi_transmit(0xaa); ????????SPI_CS_HIGH(); ????????Delay_Ms(1); ????} }