void Spi_Configuration(void) { SPI_InitTypeDef SPI_InitStructure; 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; //定义波特率预分频的值:波特率预分频值为16 SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; //指定数据传输从MSB位还是LSB位开始:数据传输从MSB位开始 SPI_InitStructure.SPI_CRCPolynomial = 7; //CRC值计算的多项式 SPI_Init(SPI3, &SPI_InitStructure); //根据SPI_InitStruct中指定的参数初始化外设SPIx寄存器 SPI_Cmd(SPI3, ENABLE); //使能SPI外设 SPI3_ReadWriteByte(0xff);//启动传输 } IO初始化 RCC->APB2ENR |= 0x00000001; //禁用JTAG,开启SWD AFIO->MAPR = (0x00FFFFFF & AFIO->MAPR)|0x02000000; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3|GPIO_Pin_5; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;; GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; GPIO_Init(GPIOB, &GPIO_InitStructure); //MISO GPIO_SetBits(GPIOB,GPIO_Pin_3|GPIO_Pin_5); //PB3/4/5上拉 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15; // GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOA, &GPIO_InitStructure); 开启时钟 //下面是给各模块开启时钟 //启动GPIO ,AFIO RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD |RCC_APB2Periph_AFIO , ENABLE); //SPI3时钟使能 RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI3,ENABLE); 我通过SPI与F-RAM通信只能看见发送的波形,看不到接收的波形,正常情况下主机控制时序,那么当主机发送完指令后,时钟信号在接收过程中是显示还是不显示,是只有接收到数据才有时钟信号吗?F-RAM是在上升沿读取数据的,现在就是接收不到数据,我用这几个引脚进行模拟SPI通信时可以的,发送的,正常通信的数据的时钟比不正常的慢了半个周期??? |
评分
查看全部评分
评分
查看全部评分