这是我用 SPI3 接 NRF2L01 时使用的配置,能成功使用设备。
[mw_shl_code=c,true]// SPI3 用于访问 NRF24L01
void SPI3_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
SPI_InitTypeDef SPI_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI3, ENABLE); // SPI3 时钟使能
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); // GPIOB 时钟使能
// 使能复用端口时钟,并使用重映射功能禁用 JTAG。可使用 SWD 仿真
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5; // 分别对应 SCK、MISO、MOSI 三个引脚
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; // PB3,4,5复用推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure); // 初始化 GPIOB
GPIO_SetBits(GPIOB, GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5); // PB3,4,5上拉
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; // SPI设置为双线双向全双工
SPI_InitStructure.SPI_Mode = SPI_Mode_Master; // SPI主机
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; // 发送接收8位帧结构
SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low; // 时钟悬空低
SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge; // 数据捕获于第1个时钟沿
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; // NSS信号由软件控制
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4; // 定义波特率预分频的值:波特率分频4,即 9MHz
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; // 数据传输从MSB位开始
SPI_InitStructure.SPI_CRCPolynomial = 7; // CRC 值计算的多项式
SPI_Init(SPI3, &SPI_InitStructure);
SPI_Cmd(SPI3, ENABLE); // 使能 SPI 外设
SPI3_ReadWrite(0xFF); // 启动传输
}[/mw_shl_code]
|