STM32F106C8T6怎么挂个内存,想用SPI总线来做。引脚是PB12,PB13,PB14,PB15。
时间:10-02
整理:3721RD
点击:
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初始化对了吗?为什么没有工作?
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初始化对了吗?为什么没有工作?
同求。希望有大神来解答