OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2798|回复: 1

求助一个STM32F031的SPI 通信问题。

[复制链接]

4

主题

9

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2019-5-22
在线时间
14 小时
发表于 2020-3-13 10:20:29 | 显示全部楼层 |阅读模式
8金钱
本帖最后由 密密123 于 2020-3-17 15:18 编辑

最近使用STM32F0和传感器进行数据通信,尝试了很多办法,都捕捉不到波形,甚至连时钟波形都没有,顺便说一下,传感器收到0x9才会返回数据。返回24位,一下是我的配置和数据传输程序。
void SPI_GPIO_Configuration(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;
          SPI_InitTypeDef  SPI_InitStructure;        
         
          /* 使能AHB时钟 */
  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE);
                  /* 使能APB2时钟 */
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);

  /*定义 SPI复用引脚 */
  GPIO_InitStructure.GPIO_Pin = PIN_SPI_SCK | PIN_SPI_MISO | PIN_SPI_MOSI;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;                       //复用模式
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                  //高速输出
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;                     //推完输出
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;                       //上拉
  GPIO_Init(PORT_SPI_SCK, &GPIO_InitStructure);
        

  GPIO_PinAFConfig(GPIOB, GPIO_PinSource4, GPIO_AF_0);
  GPIO_PinAFConfig(GPIOB, GPIO_PinSource5, GPIO_AF_0);
  GPIO_PinAFConfig(GPIOB, GPIO_PinSource3, GPIO_AF_0);
        
  /* 片选CS */
  GPIO_InitStructure.GPIO_Pin = PIN_SPI_CS;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;                      //输出模式
//        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;                     //推完输出
//        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                  //高速输出
//          GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;                       //上拉
  GPIO_Init(PORT_SPI_CS, &GPIO_InitStructure);
        
  /* SPI 初始化定义 */
  SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; //SPI设置为双线双向全双工
  SPI_InitStructure.SPI_Mode = SPI_Mode_Master;                      //设置为主 SPI
  SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;                  //SPI发送接收 8 位帧结构
  SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;                        //时钟悬空低
  SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;                       //数据捕获于第二个时钟沿
  SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;                          //软件控制 NSS 信号
  SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_8; //波特率预分频值为8
  SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;                 //数据传输从 MSB 位开始
  SPI_InitStructure.SPI_CRCPolynomial = 7;                           //定义了用于 CRC值计算的多项式
  SPI_Init(SPI1, &SPI_InitStructure);

  SPI_RxFIFOThresholdConfig(SPI1, SPI_RxFIFOThreshold_QF);
  SPI_Cmd(SPI1, ENABLE);
        
//                GPIO_SetBits(GPIOB, GPIO_Pin_15);        
}



/************************************************
函数名称 : SPI_WriteReadByte
功    能 : 对SPI写读字节数据
参    数 : TxData --- 发送的字节数据
返 回 值 : 读回来的字节数据
作    者 : Mico
*************************************************/
uint8_t SPI_WriteReadByte(uint8_t TxData)

{

//  while((SPI1->SR & SPI_I2S_FLAG_TXE) == (uint16_t)RESET);
//  SPI_SendData8(SPI1, TxData);

//  while((SPI1->SR & SPI_I2S_FLAG_RXNE) == (uint16_t)RESET);
//  return SPI_ReceiveData8(SPI1);
        
        while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET)
        SPI_SendData8(SPI1, TxData);
        
        while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET)
                return SPI_ReceiveData8(SPI1);
}

主函数:
    while(1)
    {

                        GPIO_SetBits(GPIOB, GPIO_Pin_15);
                        GPIO_ResetBits(GPIOB, GPIO_Pin_15);                        
                        SpiRes = SPI_WriteReadByte(0x90);
                        SPI_WriteReadByte(0xFF);
                        SPI_WriteReadByte(0xFF);
                        GPIO_SetBits(GPIOB, GPIO_Pin_15);        
        
                        
    }
}

引脚:PB3:SCK
PB4:MISO
PB5:MOSI
PA15:NSS

微信图片_20200313101853.png
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2020-3-14 00:58:35 | 显示全部楼层
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-22 10:39

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表