HC32003因为主频低,所以如果使用软件来实现IIC,通讯速率会很慢,同时而且功耗会更高,所以建议有条件的使用硬件IIC来进行通讯,硬件IIC最高速率可以到1M
1.IIC初始化
#define IIC_SCL_PIN GpioPin2
#define IIC_SDA_PIN GpioPin1
#define IIC_PORT GpioPort0
void hw_iic_Init(void)
{
stc_gpio_cfg_t stcGpioCfg;
DDL_ZERO_STRUCT(stcGpioCfg);
Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio,TRUE); //开启GPIO时钟门控
stcGpioCfg.enDir = GpioDirOut; ///< 端口方向配置->输出
stcGpioCfg.enOD = GpioOdEnable; ///< 开漏输出
stcGpioCfg.enPu = GpioPuEnable; ///< 端口上拉配置->使能
stcGpioCfg.enPd = GpioPdDisable; ///< 端口下拉配置->禁止
Gpio_Init(IIC_PORT,IIC_SCL_PIN,&stcGpioCfg); ///< 端口初始化
Gpio_Init(IIC_PORT,IIC_SDA_PIN,&stcGpioCfg);
Gpio_SetAfMode(IIC_PORT,IIC_SCL_PIN,GpioAf2); ///< 配置SCL
Gpio_SetAfMode(IIC_PORT,IIC_SDA_PIN,GpioAf2); ///< 配置SDA
stc_i2c_cfg_t stcI2cCfg;
DDL_ZERO_STRUCT(stcI2cCfg); ///< 初始化结构体变量的值为0
Sysctrl_SetPeripheralGate(SysctrlPeripheralI2c,TRUE); ///< 开启I2C0时钟门控
stcI2cCfg.u32Pclk = Sysctrl_GetPClkFreq(); ///< 获取PCLK时钟
stcI2cCfg.u32Baud = 300000; ///< IIC频率,这里是300K
stcI2cCfg.enMode = I2cMasterMode; ///< 主机模式
stcI2cCfg.u8SlaveAddr = 0x55; ///< 从地址,主模式无效
stcI2cCfg.bGc = FALSE; ///< 广播地址应答使能关闭
I2C_Init(M0P_I2C,&stcI2cCfg); ///< 模块初始化
I2C_SetFunc(M0P_I2C,I2cModule_En); ///< 启动模块
}
2.写数据函数
***************************************