问答

汇集网友智慧,解决技术难题

21ic问答首页 - SPI3的问题

SPI3的问题

llljh2020-09-09
回答 +关注 35
2631人浏览 28人回答问题 分享 举报
28 个回答
  • 是否是因为管脚跟jtag功能复用引起的,只是在CUBEMX的Pinout界面的SYS->debug选了Serial Wire,但在程序中没看出差别来,还需要做什么么?
  • 那就要检查下外围电路了,总结一下你的说法,MOSI能够发送出波形0xAA,说明SPI能够工作,时钟门控,配置什么的都没有什么问题,在SPI发送完一个数据后,SPI的CLK信号在空闲状态下应该是高电平的,你测量到的是低电平。建议断电后,用万用表 量下CLK是否短路了
  • 低电平
  • 发送一个字节后,断点打到发送数据的哪一行代码那里的下一条语句,再量一下CLK的电压

  • static void MX_SPI3_Init(void)
    {

      hspi3.Instance = SPI3;
      hspi3.Init.Mode = SPI_MODE_MASTER;
      hspi3.Init.Direction = SPI_DIRECTION_2LINES;
      hspi3.Init.DataSize = SPI_DATASIZE_8BIT;
      hspi3.Init.CLKPolarity = SPI_POLARITY_HIGH;
      hspi3.Init.CLKPhase = SPI_PHASE_1EDGE;
      hspi3.Init.NSS = SPI_NSS_SOFT;
      hspi3.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_2;
      hspi3.Init.FirstBit = SPI_FIRSTBIT_MSB;
      hspi3.Init.TIMode = SPI_TIMODE_DISABLE;
      hspi3.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
      hspi3.Init.CRCPolynomial = 7;
      hspi3.Init.CRCLength = SPI_CRC_LENGTH_DATASIZE;
      hspi3.Init.NSSPMode = SPI_NSS_PULSE_ENABLE;
      if (HAL_SPI_Init(&hspi3) != HAL_OK)
      {
        _Error_Handler(__FILE__, __LINE__);
      }

    }
    空闲时时钟设置成高了,时钟信号的幅度还是50毫伏左右
  • 万用表是测不出这么高频率的电压的
  • 刚用示波器看了MOSI管脚,程序输出0xAA,示波器上能看出波形来,幅度能达到3.3V
  • 你把SPI配置 CLK空闲时为高电平,看看电压是多少,SPI有4种模式的,默认的可能是SPI模式0,也就是CLK在空闲的时候是低电平
  • 用示波器看下,除了时钟,还有数据信号线正常吗?
123

您需要登录后才可以回复 登录 | 注册