资源简介
STM32的硬件I2C不好用,这是一份关于基于STM32的模拟I2C代码
代码片段和文件信息
#include “I2C.h“
#include “stm32f10x.h“
#include “delay.h“
void i2c_init(void)
{
GPIO_InitTypeDef GPIO_Init_Structure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOBENABLE);
GPIO_Init_Structure.GPIO_Pin=GPIO_Pin_6|GPIO_Pin_7;
GPIO_Init_Structure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_Init_Structure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOB&GPIO_Init_Structure);
GPIO_SetBits(GPIOBGPIO_Pin_6|GPIO_Pin_7);
}
//产生IIC起始信号
void IIC_Start(void)
{
SDA_OUT(); //sda线输出
IIC_SDA=1;
IIC_SCL=1;
delay_us(4);
IIC_SDA=0;//START:when CLK is highDATA change form high to low
delay_us(4);
IIC_SCL=0;//钳住I2C总线,准备发送或接收数据
}
//产生IIC停止信号
void IIC_Stop(void)
{
SDA_OUT();//sda线输出
IIC_SCL=0;
IIC_SDA=0;//STOP:when CLK is high DATA change form low to high
delay_us(4);
IIC_SCL=1;
IIC_SDA=1;//发送I2C总线结束信号
delay_us(4);
}
//等待应答信号到来
//返回值:1,接收应答失败
// 0,接收应答成功
u8 IIC_Wait_Ack(void)
{
u8 ucErrTime=0;
IIC_SDA=1;delay_us(1);
SDA_IN(); //SDA设置为输入
IIC_SCL=1;delay_us(1);
while(READ_SDA)
{
ucErrTime++;
if(ucErrTime>250)
{
//IIC_Stop();
return 1;
}
}
IIC_SCL=0;//时钟输出0
return 0;
}
void IIC_Ack(void)
{
IIC_SCL=0;
SDA_OUT();
IIC_SDA=0;
delay_us(2);
IIC_SCL=1;
delay_us(2);
IIC_SCL=0;
}
void IIC_NAck(void)
{
IIC_SCL=0;
SDA_OUT();
IIC_SDA=1;
delay_us(2);
IIC_SCL=1;
delay_us(2);
IIC_SCL=0;
}
void IIC_Send_Byte(u8 txd)
{
u8 t;
SDA_OUT();
IIC_SCL=0;//拉低时钟开始数据传输
for(t=0;t<8;t++)
{
//IIC_SDA=(txd&0x80)>>7;
if((txd&0x80)>>7)
IIC_SDA=1;
else
IIC_SDA=0;
txd<<=1;
delay_us(2); //对TEA5767这三个延时都是必须的
IIC_SCL=1;
delay_us(2);
IIC_SCL=0;
delay_us(2);
}
}
u8 IIC_Read_Byte(void )
{
unsigned char ireceive=0;
SDA_IN();//SDA设置为输入
for(i=0;i<8;i++ )
{
IIC_SCL=0;
delay_us(2);
IIC_SCL=1;
receive<<=1;
if(READ_SDA)receive++;
delay_us(2);
}
return receive;
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 2206 2014-12-13 22:51 I2C(模拟)\I2C.c
文件 494 2014-12-13 22:28 I2C(模拟)\I2C.h
目录 0 2015-02-20 15:17 I2C(模拟)
----------- --------- ---------- ----- ----
2700 3
- 上一篇:天猫雪花悬浮代码 淘宝下雪代码
- 下一篇:统计多个区域的面积和周长并输出到表格
相关资源
- 飞思卡尔 MC9S12XEP100 App Demo用于Bootlo
- 两片单片机之间的串行通信(proteus仿
- stm32f103zet6开发板LCD显示屏源码
- QT5串口通信程序源码
- 基于mega128的ds18b20+串口程序 实测通过
- Xshell要继续使用此程序您必须应用最
- 51单片机汇编程序-数码管动态扫描
- 无线充电程序
- STM32直流电机控制程序
- SineGen v2.5-声波生成器含程序源代码
- [小程序]语音合成
- 程序员英语手册
- DS3231驱动程序
- 果蝇算法的程序
- UAC信息添加器 给你的程序添加小盾牌
- 合泰bs83b08c触摸按键源程序 C
- HDLC协议解析程序,简单实用,可以用
- MCP3202 AD 驱动子程序
- cc2530 zigbee通讯程序
- CAD图纸自动提取所有圆形坐标,并自
- STM32F103VCT6+W5500 TCP 服务端通信成功开
- 基于STM32F103的W5500 TCP Client测试程序
- 《合成孔径雷达成像算法与实现》一
- labview 交通灯状态机程序
- 高频小信号谐振放大器设计
- 自行车轮LED花样显示灯控制程序
- 基于VHDL的按键消抖程序
- 28335 PWM启动AD程序,自己写的简单易懂
- 加密狗驱动senseIV2.x驱动程序
- 利用MPI协议与西门子PLC S7-300系统通讯
评论
共有 条评论