STM32F106C8T6怎么挂个内存,想用SPI总线来做。引脚是PB12,PB13,PB14,PB15。

2019-07-14 22:07发布

RCC_APB2PeriphClockCmdRCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO, ENABLE);
        AFIO->MAPR|=GPIO_Remap_SPI1;///选择SPI1. 映射到第二种SPI。 bit0位配置1为第二套方案,选择引脚为PB12,13,14,15. 0为第一种方案。选择引脚为PA4,5,6,7



RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;  //复用推挽输出
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStruct);

GPIO_InitStruct.GPIO_Pin = GPIO_Pin_12;  //SPI CS  
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;  //通用推挽输出
GPIO_Init(GPIOB, &GPIO_InitStruct);
GPIO_SetBits(GPIOB,GPIO_Pin_12);  ///拉高片选,使SPI工作。
///SPI 使能
RCC_APB2PeriphClockCmd( RCC_APB2Periph_SPI1, ENABLE );



  SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; //设置SPI单向或者双向的数据模式:SPI设置为双线双向全双工
  SPI_InitStructure.SPI_Mode = SPI_Mode_Master; //设置SPI工作模式:设置为主SPI
  SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; //设置SPI的数据大小:SPI发送接收8位帧结构
  SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;//选择了串行时钟的稳态:时钟悬空高
  SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;//数据捕获于第二个时钟沿
  SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;//NSS信号由硬件(NSS管脚)还是软件(使用SSI位)管理:内部NSS信号有SSI位控制
  SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256;//定义波特率预分频的值:波特率预分频值为256
  SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;//定义波特率预分频的值:波特率预分频值为256
  SPI_InitStructure.SPI_CRCPolynomial = 7; //CRC值计算的多项式
  SPI_Init(SPI2, &SPI_InitStructure);//根据SPI_InitStruct中指定的参数初始化外设SPIx寄存器



  /* Enable SPI1 */
  SPI_Cmd(SPI2, ENABLE);

   SPIx_ReadWriteByte(0xff);//启动传输   




代码是这样写的,我的SPI初始化对了吗?为什么没有工作?
0条回答

一周热门 更多>