HC32003单片机芯片硬件IIC

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.写数据函数

 ***************************************
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
单片机C语言程序设计实训100例基于8051+Proteus仿真.zip 第 01 篇 基础部分 01 闪烁的LED 02 从左到右的流水灯 03 左右来回的流水灯 04 花样流水灯 05 LED模拟交通灯 06 单只数码管循环显示0-9 07 8只数码管滚动显示单个数字 08 8只数码管显示多个不同字符 09 8只数码管闪烁显示 10 8只数码管滚动显示数字串 11 K1-K4 控制LED移位 12 K1-K4 键状态显示 13 K1-K4 分组控制LED 14 K1-K4 控制数码管移位显示 15 K1-K4 控制数码管加减演示 16 4×4键盘矩阵控制条形LED显示 17 数码管显示4×4键盘矩阵按键 18 开关控制LED 19 继电器控制照明设备 20 数码管显示拨码开关编码 21 开关控制报警器 22 按键发音 23 播放一段音乐 24 INT0中断计数 25 INT0中断控制LED 26 INT0及INT1中断计数 27 TIMER0控制单只LED闪烁 28 TIMER0控制流水灯 29 TIMER0控制四只LED滚动闪烁 30 TIMER0控制LED二进制计数 31 TIMER0与TIMER1控制条形LED 32 10秒的秒表 33 用计数器中断实现100以内的按键计数 34 100000秒以内的计时程序 35 定时器控制数码管动管显示 36 8×8LED点阵屏显示数字 37 按键控制8×8LED点阵屏显示图形 38 用定时器设计的门铃 39 演奏一段音阶 40 按键控制定时器选播多段音乐 41 定时器控制交通指示灯 42 报警器与旋转灯 43 串行数据转换为并行数据 44 并行数据转换为串行数据 45 甲机通过串口控制乙机LED闪烁 46 单片机之间双向通信 47 单片机向主机发送字符串 48 单片机与PC机串口通讯仿真 第 02 篇 硬件应用 01 74LS138译码器应用 02 74HC154译码器应用 03 74HC595串入并出芯片应用 04 74LS148扩展中断 05 IIC-24C04与蜂鸣器 06 IIC-24C04与数码管 07 6264扩展内存 08 用8255实现接口扩展 09 555的应用 10 BCD译码数码管显示数字 11 MAX7221控制数码管动态显示 12 1602字符液晶滚动演示程序 13 1602液晶显示的DS1302实时时钟 14 12864LCD图形滚动演示 15 160128LCD图文演示 16 2×20串行字符液晶演示 17 开关控制12864LCD串行模式显示 18 ADC0832模数转换与显示 19 ADC0808 PWM实验 20 ADC0809模数转换与显示 21 用DAC0832生成锯齿波 22 用DAC0808实现数字调压 23 PCF8591模数与数模转换实验 24 DS1621温度传感器实验 25 DS18B20温度传感器实验 26 正反转可控的直流电机 27 正反转可控的步进电机 28 键控看门狗 第 03 篇 综合设计 01 可以调控的走马灯 02 按键选播电子音乐 03 可演奏的电子琴 04 1602LCD显示仿手机键盘按键字符 05 1602LCD显示电话拨号键盘按键实验 06 12864LCD显示计算器键盘按键实验 07 数码管随机模拟显示乘法口诀 08 1602LCD随机模拟显示乘法口诀 09 用数码管设计的可调式电子钟 10 用1602LCD设计的可调式电子钟 11 用DS1302与数码管设计的可调电子表 12 用DS1302与1602LCD设计的可调式电子日历与时钟 13 用DS1302与12864LCD设计的可调式中文电子日历 14 用PG12864LCD设计的指针式电子钟 15 高仿真数码管电子钟 16 1602LCD显示的秒表 17 数码管显示的频率计 18 字符液晶显示的频率计 19 用ADC0832调节频率输出 20 用ADC0832设计的两路电压表 21 用数码管与DS18B20设计温度报警器 22 用1602LCD与DS18B20设计的温度报警器 23 数码管显示的温控电机 24 温度控制直流电机转速 25 用ADC0808设计的调温报警器 26 160128LCD中文显示温度与时间 27 用DAC0808设计的直流电机调速器 28 160128液晶中文显示ADC0832两路模数转换结果 29 160128液晶曲线显示ADC0832两路模数转换结果 30 串口发送数据到2片8×8点阵屏滚动显示 31 用74HC595与74LS154设计的16×16点阵屏 32 用8255与74LS154设计的16×16点阵屏 33 8×8LED点阵屏仿电梯数字滚动显示 34 用24C04与1602LCD设计电子密码锁 35 光耦控制

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值