打印
[技术问答]

HC32F460 IIC

[复制链接]
728|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Luxuff|  楼主 | 2024-3-14 10:35 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
HC32F460JETA-LQFP48 配置IIC,PB12\PB13可以正常运行,换PA10\PA11就不行了,时钟和数据都监测不到,为啥吖?已确认PA10\PA11未被占用,且支持IIC输出,各位大佬,救救孩子
//宏定义
#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[3];
    i32Ret = I2C_Master_Receive(I2C_ADC_UNIT, ADC_ADDRESS | 0x01, data, 3);
    if(i32Ret == LL_OK){
      memcpy(&adc_config ,&data[2], 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的引脚上有电容,或者没有上拉电阻,或者上拉电阻太大? ...

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

使用特权

评论回复
地板
daichaodai| | 2024-3-18 07:59 | 只看该作者
呵呵,IIC必须要加上啦电阻才得行。

使用特权

评论回复
5
小夏天的大西瓜| | 2024-3-26 15:36 | 只看该作者
wubangmi 发表于 2024-3-15 09:21
有没有可能是你板子有问题,也就是你PA10/PA11的引脚上有电容,或者没有上拉电阻,或者上拉电阻太大? ...

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

使用特权

评论回复
6
LOVEEVER| | 2024-3-27 10:52 | 只看该作者
Luxuff 发表于 2024-3-15 13:17
昨天已经解决了,就是你说的这个问题,没有上拉电阻,我太依赖开发板了 ...

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

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

2

帖子

0

粉丝