完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
原子哥,现象:我在eeprom某个地址写个数,然后在读出来显示,但是返回的数据老是不对 。帮忙看一下到底是除了什么问题。谢谢!!
#include "iic.h" #include "delay.h" //iic初始化 void iicinit(void) { RCC->APB2ENR|=1<<4;//开启portc的时钟 GPIOC->CRH&=0XFFF00FFF; GPIOC->CRH|=0X00033000; //设置c 11 12为推挽输出 GPIOC->ODR|=3<<11; //PC11,12 输出高 } //iic起始信号 void iicstart(void) { //sda线输出 sda_out(); iic_sda=1; delay_us(7); iic_scl=1; delay_us(7); iic_sda=0;//START:when CLK is high,DATA change form high to low delay_us(7); iic_scl=0;//钳住I2C总线,准备发送或接收数据 } //iic终止信号 void iicstop(void) { //sda线输出 sda_out(); iic_sda=0; delay_us(7); iic_scl=1; //STOP:when CLK is high DATA change form low to high delay_us(7); iic_sda=1;//发送I2C总线结束信号 delay_us(4); // iic_scl=0 ; } //应答信号ack=1,应答,ack=1,不应答 u8 iic_ack(void) { u8 ack ; sda_in(); //read_sda=1; //delay_us(5); iic_scl=1; delay_us(7); ack =read_sda; delay_us(5); iic_scl=0; delay_us(5); return (ack); } //通过icc总线写1位数据 void iic_write_onebit(u8 data) { sda_out(); iic_sda=data; delay_us(10); iic_scl=1; delay_us(10); iic_scl=0; delay_us(10); } //写一个字节 void iic_write_onebyte(u8 data) //写数据时,从高位往低位写,先写第8位 { u8 t; u8 temp; sda_out(); temp=data; for(t=8;t>0;t--) { if(temp&0x80) iic_write_onebit(1); else iic_write_onebit(0); temp<<=1; } } //读一个字节 u8 iic_read_onebyte(void) { u8 t,flag=0; u8 data=0; sda_in(); iic_scl=0; delay_us(10); iic_scl=1; delay_us(5); for(t=0;t<8;t++) { flag=read_sda; data<<=1; //8位数据传完后,要scl清零 if(flag) data|= 0x01; } iic_scl=0; delay_us(10); return (data); } //向24c02某个地址写数据 void write_24c02_onebyte(u16 add ,u8 data) { iicstart(); iic_write_onebyte(0xa0); iic_ack(); iic_write_onebyte(add); iic_ack(); iic_write_onebyte(data); iic_ack(); iicstop(); delay_ms(5); } //从24c02里读数据 u8 read_24c02_onebyte(u16 add) { u8 data; iicstart(); iic_write_onebyte(0xa0); //开始写 iic_ack(); iic_write_onebyte(add); iic_ack(); iicstart(); iic_write_onebyte(0xa1);//开始读 iic_ack(); data=iic_read_onebyte(); iic_ack(); iicstop(); return (data); } ALIENTEK MINISTM32 实验16 IIC实验.zip (1.77 MB ) |
|
相关推荐
6个回答
|
|
|
|
|
|
不是的。你们的代码我看过了。这是我自己编的,但是测试不通过。我想看看我对iic总线的时序理解到对不对。帮忙看一下吧,原子哥。
|
|
|
|
这个还是你自己慢慢对照吧.参考我们的例子.
|
|
|
|
……………………………………………………………………………………
|
|
|
|
你能确定你写的正确了?
|
|
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
414 浏览 1 评论
273 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
243 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
607 浏览 2 评论
631 浏览 2 评论
1356浏览 9评论
36浏览 3评论
STM32CUBEMX4.22.1在main函数里面添加一行语句就死机的原因?
40浏览 3评论
38浏览 3评论
KEIL MDK为什么无法debug library中的代码?
75浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-4-25 06:57 , Processed in 0.830362 second(s), Total 80, Slave 64 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号