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配置的代码, 只要设置成SPI_NSS_HARD , spi 就不工作啦, 我用的是RTL8201F的phy, 所以智能使用SPI3,
但是没有做重映射. PA15是 NSS, 把它设置成这个模式 GPIO_Mode_AF_PP ,SPI可以发数据,但是NSS(PA15)始终为高电平,不拉低.
咋整? 谢谢
个人信息保护,已隐藏
13910653233