完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
硬件搭建应该没有问题,不知哪里出了问题,下面贴上程序
myiic.c用的是原子的,用示波器显示器件有应答,但数据一直为零 #include <STM32f10x_lib.h>#include "sys.h"#include "myiic.h"#include "delay.h"#include "led.h" unsigned char Acc; #define SIZE sizeof(TEXT_Buffer) int main(void){ unsigned char acktemp=1;unsigned char i=0; Stm32_Clock_Init(9);//系统时钟设置delay_init(72);//延时初始化IIC_Init();//IIC初始化 LED_Init(); while(1){ /*read 6 bytes from mem*/IIC_Start();IIC_Send_Byte(0x30);acktemp=IIC_Wait_Ack();IIC_Send_Byte(0x28);/*address*/acktemp=IIC_Wait_Ack();IIC_Start();IIC_Send_Byte(0x31);acktemp=IIC_Wait_Ack();Acc= IIC_Read_Byte(0);////for(i=0;i<6;i++)//{//Acc = IIC_Read_Byte((i<5)?1:0); // }IIC_Stop();if ((Acc != 0)&&(Acc != 0xff)){ LED1=0; }else { LED1=1; } }} #include "myiic.h"#include "delay.h"////////////////////////////////////////////////////////////////////////////////// //本程序只供学习使用,未经作者许可,不得用于其它任何用途//Mini STM32开发板//IIC 驱动函数 //发烧友@ALIENTEK//技术论坛:www.openedv.com//修改日期:2010/6/10 //版本:V1.0//版权所有,盗版必究。//Copyright(C) 发烧友 2009-2019//All rights reserved////////////////////////////////////////////////////////////////////////////////// //初始化IICvoid IIC_Init(void){ RCC->APB2ENR|=1<<4;//先使能外设IO PORTC时钟 GPIOC->CRH&=0XFFF00FFF;//PC11/12 复用开漏输出 //推挽输出GPIOC->CRH|=0X00033000; GPIOC->ODR|=3<<11; //PC11,12 输出高}//产生IIC起始信号void IIC_Start(void){SDA_OUT(); //sda线输出IIC_SDA=1; IIC_SCL=1;delay_us(4); IIC_SDA=0;//START:when CLK is high,DATA 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;SDA_IN(); //SDA设置为输入 IIC_SDA=1;delay_us(1); IIC_SCL=1;delay_us(1); while(READ_SDA){ucErrTime++;if(ucErrTime>250){IIC_Stop();return 1;}}IIC_SCL=0;//时钟输出0 return 0; } //产生ACK应答void IIC_Ack(void){IIC_SCL=0;SDA_OUT();IIC_SDA=0;delay_us(2);IIC_SCL=1;delay_us(2);IIC_SCL=0;}//不产生ACK应答 void IIC_NAck(void){IIC_SCL=0;SDA_OUT();IIC_SDA=1;delay_us(2);IIC_SCL=1;delay_us(2);IIC_SCL=0;} //IIC发送一个字节//返回从机有无应答//1,有应答//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; txd<<=1; delay_us(2); //对TEA5767这三个延时都是必须的IIC_SCL=1;delay_us(2); IIC_SCL=0;delay_us(2); } } //读1个字节,ack=1时,发送ACK,ack=0,发送nACK u8 IIC_Read_Byte(unsigned char ack){unsigned char i,receive=0;SDA_IN();//SDA设置为输入 for(i=0;i<8;i++ ){ IIC_SCL=0; delay_us(4);IIC_SCL=1; receive<<=1; if(READ_SDA)receive++; delay_us(3); } if (!ack) IIC_NAck();//发送nACKelse IIC_Ack(); //发送ACK return receive;} 而且receive一直为零,即 READ_SDA 为零 |
|
相关推荐
2个回答
|
|
检查IO设置是否正确!
|
|
|
|
sda,scl 接pc11 pc12, 中断和控制端都没用,难道推挽输出有问题?
|
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1771 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1619 浏览 1 评论
1070 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
724 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1673 浏览 2 评论
1936浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
729浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
569浏览 3评论
594浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
552浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 20:58 , Processed in 0.795074 second(s), Total 81, Slave 64 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号