c头文件库文件函数库 I2C主机接收

 2024-03-11 05:04:07  阅读 0

我使用 I2C1 作为主接收器,I2C2 作为从发送器。 程序如下。 程序总是卡在判断ADDR位上,也就是红色部分。 我是新手。 不知道我对I2C的理解有什么问题,就是跑不了。 这个非常困难。 我很急。 感谢您的帮助。

#

#

u8=0;

u8 i = 0;

u8 标志1=0,标志2=0,=0;

/******************************************************** ***** *****

功能:无效延迟(vu32)

参数:vu32延迟时间

描述:延迟指定时间

返回:无

****************************************************** *****/

无效延迟(vu32)

为(;!= 0;--);

/************************配置函数************************ */

无效(无效)

;

。 = ; //串口的波特率,例如最大4./s

。 = ; //数据字长(8位或9位)

。 = ; //可配置停止位 - 支持 1 或 2 个停止位

。 = ; //无奇偶校验

.ntrol = ; //无硬件流控制

。 = | ; //双工模式,使能发送和接收

(,&);//调用STM32的USART初始化底层函数

(,);

无效(无效)

;

/* I2C */

(I2C1);

。 = ;

。 = ;

。 = 0xA1;

。 = ;

.ess = ;

。 = ;

(I2C1,);

(I2C1,&);

g(I2C1,);

(I2C2);

。 = ;

。 = ;

。 = 0xA2;

。 = ;

.ess = ;

。 = ;

(I2C2,&);

(I2C2,);

/*允许1字节1响应模式*/

g(I2C2,);

/************************GPIO配置函数************************ **/

无效(无效)

;//定义类型结构

。 = |||; //PB.6,PB.7

。 = ;

。 = ; //多路开漏输出

(GPIOB,&);

。 = ; //PA9

。 = ;

。 = ; //复用推挽输出

(GPIOA,&);

。 = ; //PA10

.=G;

(GPIOA,&);

/************************时钟配置函数************************ **/

无效(无效)

md(||1, );//使能GPIOA时钟

md(|, );//启用时钟

/************************功能支持功能************************ **/

int fputc(int ch, FILE *f)

/* 将你的 fputc 放在这里 */

/* 循环直到结束 */

而 ((, ) == 重置)

{}

/* 例如写一个到USART */

(, () ch);

ch;

int fgetc(文件 *fp)

整数通道=0;

while((, ) == 重置)

ch = (int)->DR & 0xFF;

(ch); //回声

ch;

/************************主功能*********************** */

int 主函数(无效)

();

();

();

();

while((I2C1, ));

(I2C1, );//BUSY=0时发送启动条件,进入主模式

while(!(I2C1, ));//发生后读SR1并写DR,(())/* BUSY总线忙,MSL主机模式和SB启动条件已发送标志*/

(I2C1,0xA2,er);//发送地址,最后一位为1为写,最后一位为0为读

while(!(I2C1,));

while((I2C2, ) == 重置);

(I2C2,0xff);

while((I2C1,) == 重置);

=(I2C1);

g(I2C1,);

g(I2C2,);

(I2C1,);

("\r\n%d\r\n",);

同时(1);

.rar

标签: 函数 发送 时钟

如本站内容信息有侵犯到您的权益请联系我们删除,谢谢!!


Copyright © 2020 All Rights Reserved 京ICP5741267-1号 统计代码