0

我的问题是关于微控制器开发的。我开始将 PCA9685 连接到 nRF52 DK 并遇到了一个奇怪的问题。初始化 PWM 模块时,它不起作用。初始化需要将寄存器设置为某些值,这并不复杂。坐了一会儿后,我设法使其正常工作。[链接到工作代码][1] 代码看起来很糟糕,但它可以工作

我遇到了以下问题:

void pca9685_write_u8 (uint8_t reg,uint8_t val)
{
  uint8_t buff[2] = {reg,val};
    nrf_drv_twi_tx(&m_pcah.twi_handle,m_pcah.device_address,buff, 2, false);
}

我认为不值得解释该方法的作用。我经常使用它来初始化 PWM 驱动程序。但是如果我复制函数的主体并在它使用的地方替换它,那么一切都会停止工作。例如:

void pca9685_sleep(void)
{
    // Read the current state of the mode 1 register.
    uint8_t mode1_reg;
     pca9685_read_u8( PCA9685_REGISTER_MODE1, &mode1_reg);

    // Don't write the restart bit back and set the sleep bit.
    PCA9685_CLEAR_BIT_MASK(mode1_reg, PCA9685_REGISTER_MODE1_RESTART);
    PCA9685_SET_BIT_MASK(mode1_reg, PCA9685_REGISTER_MODE1_SLEEP);
     //pca9685_write_u8( PCA9685_REGISTER_MODE1, mode1_reg);
    uint8_t buff[2] = {PCA9685_REGISTER_MODE1, mode1_reg};
    nrf_drv_twi_tx(&m_pcah.twi_handle,m_pcah.device_address,buff, 2, false);
}

这还不是全部。但这是我唯一需要经过反复试验的事情。

void pca9685_write_u8 (pca9685_handle_t *m_handle,uint8_t reg,uint8_t val)
{
  uint8_t buff[2] = {reg,val};
    nrf_drv_twi_tx(&m_handle->twi_handle,m_handle->device_address,buff, 2, false);
}

但它没有用这是我第一次遇到这样的事情。

使用的工具:

  • nRF52-DK,
  • Segger 嵌入式工作室
  • PCA9685

我也用类似的方式收集了上面的发送函数[1]:https ://github.com/Nursultan-Salikhov/PCA_9686-with-nRF52/blob/main/pca9685.c

4

0 回答 0