关于CH32V003 I2C模块的一些问题
  1. 为了正常使用必须给 I2C 输入正确的时钟,其中标准模式下,输入时钟最低为 2MHz,在快速模
    式下,输入时钟最低为 4MHz。但I2C1_CTLR2的FREQ[5:0]范围是8-48,是否能设为2-4

  2. I2C1_CKCFGR的CCR[11:0]分频系数该如何填写

I2C1_CTLR2的FREQ[5:0]牵扯到内部的延时,按照手册范围走,大了没关系,分频系数按照库函数配置就可以。一般库函数的时钟配置是APB1=系统主频,不会到达2M或者4M。

static void SetSysClockTo_24MHZ_HSI(void)

{

    /* Flash 0 wait state */

    FLASH->ACTLR &= (uint32_t)((uint32_t)~FLASH_ACTLR_LATENCY);

    FLASH->ACTLR |= (uint32_t)FLASH_ACTLR_LATENCY_0;


    /* HCLK = SYSCLK = APB1 */

    RCC->CFGR0 |= (uint32_t)RCC_HPRE_DIV6;

}

这边时钟配置24M/6=4M,我这样测试IIC没问题。

image.png

此时I2C1_CTLR2的FREQ[5:0]=4M。这样也没问题。image.png


目前的情况是:主机发送写指令,写一个字节,然后发送repeated start ,读一个字节,之前写的字节不会触发RxNE中断导致接收不到这个字节


你好,具体邮箱联系我吧,zdg@wch.cn


只有登录才能回复,可以选择微信账号登录