遇到的問題:我想要設(shè)置主模式,用NSS作為片選引腳去控制從機(jī),但是不管我怎么設(shè)置,不管是硬件控制還是軟件控制,NSS(PA4)都沒有信號產(chǎn)生,如何設(shè)置才能夠使PA4產(chǎn)生片選信號?
SPI初始化程序:
void SPI_FullDuplex_Init(void)
{
? ? GPIO_InitTypeDef GPIO_InitStructure = {0};
? ? SPI_InitTypeDef? SPI_InitStructure = {0};
? ? RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_SPI1, ENABLE);
? ? GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
? ? GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
? ? GPIO_Init(GPIOA, &GPIO_InitStructure);
? ? GPIO_SetBits(GPIOA, GPIO_Pin_4);
? ? GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
? ? GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
? ? GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
? ? GPIO_Init(GPIOA, &GPIO_InitStructure);
? ? GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
? ? GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
? ? GPIO_Init(GPIOA, &GPIO_InitStructure);
? ? GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
? ? GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
? ? GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
? ? GPIO_Init(GPIOA, &GPIO_InitStructure);
? ? SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
? ? SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
? ? SPI_InitStructure.SPI_DataSize = SPI_DataSize_16b;
? ? SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
? ? SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;
? ? SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
? ? SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_64;
? ? SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_LSB;
? ? SPI_InitStructure.SPI_CRCPolynomial = 0;
? ? SPI_Init(SPI1, &SPI_InitStructure);
//? ? SPI_SSOutputCmd(SPI1, ENABLE);
? ? SPI_Cmd(SPI1, ENABLE);
}
主函數(shù):
? ? SPI_FullDuplex_Init();
? ? Delay_Ms(10);
? ? while(1)
? ? {
? ? ? ? u8 retry;
? ? ? ? retry = 0;
//? ? ? ? while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET) //等待發(fā)送區(qū)空
//? ? ? ? {
//? ? ? ? ? ? retry++;
//? ? ? ? ? ? if(retry>200)return 0;
//? ? ? ? }
? ? ? ? GPIO_ResetBits(GPIOA, GPIO_Pin_4);
? ? ? ? Delay_Us(10);
? ? ? ? SPI_I2S_SendData(SPI1, 1000);
? ? ? ? Delay_Us(100);
? ? ? ? GPIO_SetBits(GPIOA, GPIO_Pin_4);
? ? ? ? Delay_Ms(1000);