WCH沁恒单片机
直播中

哈哈哈

10年用户 869经验值
擅长:可编程逻辑
私信 关注
[问答]

CH582 spi读lora寄存器错位如何解决?

比如读0x42读lora芯片的版本好 返回的是下一个寄存器的值。读0x41才能返回0x42的值
类似的代码在STM32上正常不会错位



***********  main **************

#if 1
  /* SPI 0 */
  GPIOA_SetBits( GPIO_Pin_12 );
  GPIOA_ModeCfg( GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14, GPIO_ModeOut_PP_5mA );

  // lora_reset perform reset
      GPIOA_ResetBits(LORA_RESET);

      DelayMs( 10 );
      GPIOA_SetBits(LORA_RESET);

      DelayMs( 10 );
      SPI0_DataMode(Mode0_HighBitiNFront);
  SPI0_MasterDefInit();

  while( 1 )
  {
    uint8_t version = LORA_singleTransfer(0x42,0x00);
    char info[20];
    sprintf(info,"0x%02x n",version);
      PRINT(info);
      DelayMs(1000);
  }


**************************************


uint8_t LORA_singleTransfer(uint8_t address, uint8_t value)
{
  uint8_t response;

  GPIOA_ResetBits( GPIO_Pin_12 );
  SPI0_MasterSendByte( address );
  SPI0_MasterSendByte( value );
  response = SPI0_MasterRecvByte();
  GPIOA_SetBits( GPIO_Pin_12 );

  return response;
}
  

回帖(1)

刘建军

2022-8-12 10:07:16
582的SPI只支持模式0和模式3.
有条件可以用示波器或者逻辑分析仪看下SPI的波形,看看数据发送是否异常。
另外如果不具备观测波形的条件,可以把SPI的时钟先调慢,试试效果,硬件电路上如果串了电阻啥 的,时钟调慢可能也可以解决问题。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分