? ? GPIO_InitTypeDef GPIO_InitStructure = { 0 };
? ? SPI_InitTypeDef SPI_InitStructure = { 0 };
? ? RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE);
? ? RCC_APB1PeriphClockCmd( RCC_APB1Periph_SPI3, ENABLE);
? ? GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;? ?//nss
? ? GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
? ? GPIO_Init( GPIOA, &GPIO_InitStructure);
? ? GPIO_SetBits(GPIOA, GPIO_Pin_15);
? ? GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;? ?//sck
? ? GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
? ? GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
? ? GPIO_Init( GPIOB, &GPIO_InitStructure);
? ? GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;? ?//miso
? ? GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
? ? GPIO_Init( GPIOB, &GPIO_InitStructure);
? ? GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;? ?//mosi
? ? GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
? ? GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
? ? GPIO_Init( GPIOB, &GPIO_InitStructure);
? ? SPI_InitStructure.SPI_Direction =SPI_Direction_1Line_Tx;// 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_Hard;
? ? SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_64; //SPI_BaudRatePrescaler_64;
? ? SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
? ? SPI_InitStructure.SPI_CRCPolynomial = 7;
? ? SPI_Init( SPI3, &SPI_InitStructure);
? ? SPI_Cmd( SPI3, ENABLE);
上面是SP3配置的代碼, 只要設(shè)置成SPI_NSS_HARD , spi 就不工作啦, 我用的是RTL8201F的phy, 所以智能使用SPI3,
但是沒有做重映射.? PA15是 NSS, 把它設(shè)置成這個模式 GPIO_Mode_AF_PP ,SPI可以發(fā)數(shù)據(jù),但是NSS(PA15)始終為高電平,不拉低.
咋整? 謝謝
個人信息保護,已隱藏
13910653233?