Luxuff 发表于 2024-3-14 10:35

HC32F460 IIC

HC32F460JETA-LQFP48 配置IIC,PB12\PB13可以正常运行,换PA10\PA11就不行了,时钟和数据都监测不到,为啥吖?已确认PA10\PA11未被占用,且支持IIC输出,各位大佬,救救孩子{:cry:}
//宏定义
#define ADC_ADDRESS                         (0x48U) //01001000<<1 = 1001000
#define I2C_ADC_SCL_PORT                  (GPIO_PORT_B)
#define I2C_ADC_SCL_PIN                     (GPIO_PIN_12)
#define I2C_ADC_SDA_PORT                  (GPIO_PORT_B)
#define I2C_ADC_SDA_PIN                     (GPIO_PIN_13)
#define I2C_ADC_GPIO_SCL_FUNC               (GPIO_FUNC_49)
#define I2C_ADC_GPIO_SDA_FUNC               (GPIO_FUNC_48)

#define I2C_ADC_UNIT                        (CM_I2C3)
#define I2C_ADC_FCG_USE                     (FCG1_PERIPH_I2C3)

//初始化部分
int32_t ADC_POT_Initialize(void)
{

    LL_PERIPH_WE(LL_PERIPH_ALL);
    //ADC
   /* Initialize I2C port*/
    GPIO_SetFunc(I2C_ADC_SCL_PORT, I2C_ADC_SCL_PIN, I2C_ADC_GPIO_SCL_FUNC);
    GPIO_SetFunc(I2C_ADC_SDA_PORT, I2C_ADC_SDA_PIN, I2C_ADC_GPIO_SDA_FUNC);
    //GPIO_SetFunc(I2C_PTT_SCL_PORT, I2C_PTT_SCL_PIN, I2C_PTT_GPIO_SCL_FUNC);
    //GPIO_SetFunc(I2C_PTT_SDA_PORT, I2C_PTT_SDA_PIN, I2C_PTT_GPIO_SDA_FUNC);

    /* Enable I2C Peripheral*/
    FCG_Fcg1PeriphClockCmd(I2C_ADC_FCG_USE, ENABLE);
   // FCG_Fcg1PeriphClockCmd(I2C_PTT_FCG_USE, ENABLE);


    int32_t i32Ret;
    stc_i2c_init_t stcI2cInit;
    float32_t fErr;

    I2C_DeInit(I2C_ADC_UNIT);
    //I2C_DeInit(I2C_PTT_UNIT);

    (void)I2C_StructInit(&stcI2cInit);
    stcI2cInit.u32ClockDiv = I2C_CLK_DIV8;
    stcI2cInit.u32Baudrate = I2C_ADC_BAUDRATE;
    stcI2cInit.u32SclTime = 3UL;
    i32Ret = I2C_Init(I2C_ADC_UNIT, &stcI2cInit, &fErr);
    if(i32Ret != LL_OK){
      while(1);
    }
   
    /*stcI2cInit.u32Baudrate = I2C_PTT_BAUDRATE;
    i32Ret = I2C_Init(I2C_PTT_UNIT, &stcI2cInit, &fErr);

    if(i32Ret != LL_OK){
      while(1);
    }*/
   
    I2C_BusWaitCmd(I2C_ADC_UNIT, ENABLE);
    //I2C_BusWaitCmd(I2C_PTT_UNIT, ENABLE);
    /* Peripheral registers write protected */
    LL_PERIPH_WP(LL_PERIPH_ALL);
   
    uint8_t data;
    i32Ret = I2C_Master_Receive(I2C_ADC_UNIT, ADC_ADDRESS | 0x01, data, 3);
    if(i32Ret == LL_OK){
      memcpy(&adc_config ,&data, 1);
    }
   
    return i32Ret;
}

//不能正常运行的宏,我就改了针脚配置
#define ADC_ADDRESS                         (0x48U)
#define I2C_ADC_SCL_PORT                  (GPIO_PORT_A)
#define I2C_ADC_SCL_PIN                     (GPIO_PIN_10)
#define I2C_ADC_SDA_PORT                  (GPIO_PORT_A)
#define I2C_ADC_SDA_PIN                     (GPIO_PIN_11)
#define I2C_ADC_GPIO_SCL_FUNC               (GPIO_FUNC_49)
#define I2C_ADC_GPIO_SDA_FUNC               (GPIO_FUNC_48)

#define I2C_ADC_UNIT                        (CM_I2C1)
#define I2C_ADC_FCG_USE                     (FCG1_PERIPH_I2C1)


wubangmi 发表于 2024-3-15 09:21

有没有可能是你板子有问题,也就是你PA10/PA11的引脚上有电容,或者没有上拉电阻,或者上拉电阻太大?

Luxuff 发表于 2024-3-15 13:17

wubangmi 发表于 2024-3-15 09:21
有没有可能是你板子有问题,也就是你PA10/PA11的引脚上有电容,或者没有上拉电阻,或者上拉电阻太大? ...

昨天已经解决了,就是你说的这个问题,没有上拉电阻,我太依赖开发板了{:cry:}{:cry:}

daichaodai 发表于 2024-3-18 07:59

呵呵,IIC必须要加上啦电阻才得行。

小夏天的大西瓜 发表于 2024-3-26 15:36

wubangmi 发表于 2024-3-15 09:21
有没有可能是你板子有问题,也就是你PA10/PA11的引脚上有电容,或者没有上拉电阻,或者上拉电阻太大? ...

上拉电阻是必须的嘛?IIC通讯电气设计

LOVEEVER 发表于 2024-3-27 10:52

Luxuff 发表于 2024-3-15 13:17
昨天已经解决了,就是你说的这个问题,没有上拉电阻,我太依赖开发板了 ...

开发板一般情况下IIC有相关的跳线吧?

xdvca 发表于 2024-7-31 22:39

在配置 HC32F460JETA-LQFP48 的 I2C 时,如果 PB12 和 PB13 可以正常工作,但 PA10 和 PA11 不能工作,这可能涉及多个因素,包括引脚配置、外设设置、或者其他硬件问题。
页: [1]
查看完整版本: HC32F460 IIC