面向物联网的嵌入式系统开发-25-STM32-I2C通信技术应用开发课件.pptx

上传人(卖家):晟晟文业 文档编号:4848966 上传时间:2023-01-17 格式:PPTX 页数:34 大小:1.62MB
下载 相关 举报
面向物联网的嵌入式系统开发-25-STM32-I2C通信技术应用开发课件.pptx_第1页
第1页 / 共34页
面向物联网的嵌入式系统开发-25-STM32-I2C通信技术应用开发课件.pptx_第2页
第2页 / 共34页
面向物联网的嵌入式系统开发-25-STM32-I2C通信技术应用开发课件.pptx_第3页
第3页 / 共34页
面向物联网的嵌入式系统开发-25-STM32-I2C通信技术应用开发课件.pptx_第4页
第4页 / 共34页
面向物联网的嵌入式系统开发-25-STM32-I2C通信技术应用开发课件.pptx_第5页
第5页 / 共34页
点击查看更多>>
资源描述

1、Internet+Education SolutionsCC2530和STM32嵌入式接口技术开发6.2 STM32 I2C通信技术应用开发EducationSolutions目录ContentsInternet+I2C总线STM32的I2C原理STM32 IIC库函数的使用温湿度传感器项目实践23:55/3IIC总线协议介绍IIC(InterIntegrated Circuit)总线是一种由PHILIPS公司开发的两线式串行总线(通常称I2C),用于连接微控制器及其外围设备。它是由数据线SDA和时钟SCL构成的串行总线,可发送和接收数据。23:55/4IIC物理层IIC支持多个设备连接总线电

2、容需小于400pFIIC的控制线较少只有SDA和SCL两根信号线IIC设备都有独立地址总线通过设备地址识别设备IIC需设置上拉电阻确认总线电平状态IIC的数据传输灵活速度从100到400kbit/s23:55/5IIC协议层读写指令段23:55/6IIC读写指令23:55/7IIC启停信号23:55/8IIC数据有效性23:55/9IIC从机地址23:55/10IIC响应与非响应信号23:55/11STM32的IIC原理1.通讯引脚SDA数据总线和SCL时钟总线。2.时钟控制逻辑通过时钟可以控制IIC总线的通信速率。3.数据控制逻辑对数据和地址进行控制和识别4.整体控制逻辑负责协调整个I2C外

3、设23:55/12STM32的IIC主发送器23:55/13STM32的IIC主接收器23:55/14STM32的IIC的使用typedefstructuint32_t I2C_ClockSpeed;/设置SCL时钟频率,此值要低于400000uint16_t I2C_Mode;/指定工作模式,可选I2C模式及SMBUS模式uint16_t I2C_DutyCycle;/指定时钟占空比,可选low/high=2:1及16:9模式uint16_t I2C_OwnAddress1;/指定自身的I2C设备地址uint16_t I2C_Ack;/使能或关闭响应(一般都要使能)uint16_t I2C_

4、AcknowledgedAddress;/指定地址的长度,可为7位及10位I2C_InitTypeDef;STM32集成的IIC库比较精简,只需要配置相关参数即可使用。23:55/15HTU21D温湿度传感器Humirel公司HTU21D温湿度传感器,传感器输出经过标定的数字信号,标准 I2C 格式。HTU21D 的分辨率可以通过输入命令进行改变(8/12bit 乃至12/14bit 的RH/T),传感器可以检测到电池低电量状态,并且输出校验和,有助于提高通信的可靠性。23:55/16项目场景库房内安装一定数量的环境检测传感器来实现对内部环境无死角的实时检测。这些传感器不光数量众多而且种类也众

5、多。如何在尽量少使用嵌入式处理芯片的情况下而获得更多的数据,最有效的方法就是采用总线连接,通过使用IIC总线可以实现一条总线连接多个IIC设备,从而达到高效数据采集。23:55/17任务目标库房环境监控系统生产企业要设计一套集成了环境采集系统和库房内部环境干预系统的综合环境维持系统,要求使用STM32处理器I2C接口采集温湿度传感器的数据,数据可通过显示屏实时显示。23:55/18项目实践本项目设计采用STM32F407的GPIO模拟IIC总线接口,将模拟总线与Plus节点板载的温湿度传感器相连接,使用IIC总线协议实现对温湿度传感器的数据获取,通过串口将采集的温湿度传感器数据打印在PC上以显

6、示获取的信息。23:55/19项目硬件连接图温湿度传感器原理图23:55/20项目程序逻辑框图23:55/21项目实现void iic_init(void)GPIO_InitTypeDef GPIO_InitStructure;RCC_AHB1PeriphClockCmd(I2C_CLK,ENABLE);GPIO_InitStructure.GPIO_Pin=PIN_SCL|PIN_SDA;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT;GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;GPIO_InitStructu

7、re.GPIO_Speed=GPIO_Speed_2MHz;GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;GPIO_Init(I2C_GPIO,&GPIO_InitStructure);lI2C初始化函数23:55/22项目实现void sda_out(void)GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Pin=PIN_SDA;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT;GPIO_InitStructure.GPIO_OType=GPIO

8、_OType_PP;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_2MHz;GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;GPIO_Init(I2C_GPIO,&GPIO_InitStructure);l设置SDA为输出23:55/23项目实现void sda_in(void)GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Pin=PIN_SDA;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN;GPIO_InitS

9、tructure.GPIO_OType=GPIO_OType_PP;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_2MHz;GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;GPIO_Init(I2C_GPIO,&GPIO_InitStructure);l设置SDA为输入23:55/24项目实现void iic_start(void)sda_out();GPIO_SetBits(I2C_GPIO,PIN_SDA);/拉高数据线GPIO_SetBits(I2C_GPIO,PIN_SCL);/拉高时钟线delay_us(5);/

10、延时GPIO_ResetBits(I2C_GPIO,PIN_SDA);/产生下降沿delay_us(5);/延时GPIO_ResetBits(I2C_GPIO,PIN_SCL);/拉低时钟线lI2C初始信号23:55/25项目实现void iic_stop(void)sda_out();GPIO_ResetBits(I2C_GPIO,PIN_SDA);/拉低数据线GPIO_SetBits(I2C_GPIO,PIN_SCL);/拉高时钟线delay_us(5);/延时5usGPIO_SetBits(I2C_GPIO,PIN_SDA);/产生上升沿delay_us(5);/延时5uslI2C停止信

11、号23:55/26项目实现void iic_send_ack(int ack)sda_out();if(ack)GPIO_SetBits(I2C_GPIO,PIN_SDA);/写应答信号elseGPIO_ResetBits(I2C_GPIO,PIN_SCL);GPIO_SetBits(I2C_GPIO,PIN_SCL);/拉高时钟线delay_us(5);/延时GPIO_ResetBits(I2C_GPIO,PIN_SCL);/拉低时钟线delay_us(5);/延时lI2C应答信号23:55/27项目实现int iic_recv_ack(void)int CY=0;sda_in();GPIO

12、_SetBits(I2C_GPIO,PIN_SCL);/拉高时钟线delay_us(5);/延时CY=SDA_R;/读应答信号GPIO_ResetBits(I2C_GPIO,PIN_SDA);/拉低时钟线delay_us(5);/延时return CY;lI2C接收应答信号23:55/28项目实现unsigned char iic_write_byte(unsigned char data)unsigned char i;sda_out();GPIO_ResetBits(I2C_GPIO,PIN_SCL);/拉低时钟线for(i=0;i 8;i+)if(data&0 x80)/判断数据最高位是

13、否为1GPIO_SetBits(I2C_GPIO,PIN_SDA);elseGPIO_ResetBits(I2C_GPIO,PIN_SDA);delay_us(5);/延时5uslI2C写一个字节数据23:55/29项目实现GPIO_SetBits(I2C_GPIO,PIN_SCL);/输出SDA稳定后,拉高SCL给出上升沿,从机检测到后进行数据采样delay_us(5);/延时5usGPIO_ResetBits(I2C_GPIO,PIN_SCL);/拉低时钟线delay_us(5);/延时5usdata=1;/数组左移一位 delay_us(5);/延时2ussda_in();lI2C写一个

14、字节数据23:55/30项目实现GPIO_SetBits(I2C_GPIO,PIN_SDA);/拉高数据线GPIO_SetBits(I2C_GPIO,PIN_SCL);/拉高时钟线delay_us(5);/延时2us,等待从机应答if(SDA_R)/SDA为高,收到NACKreturn 1;else /SDA为低,收到ACKGPIO_ResetBits(I2C_GPIO,PIN_SCL);/释放总线 delay_us(5);/延时2us,等待从机应答return 0;lI2C写一个字节数据23:55/31项目实现unsigned char iic_read_byte(unsigned char

15、 ack)unsigned char i,data=0;sda_in();GPIO_ResetBits(I2C_GPIO,PIN_SCL);GPIO_SetBits(I2C_GPIO,PIN_SDA);/释放总线for(i=0;i 8;i+)GPIO_SetBits(I2C_GPIO,PIN_SCL);/给出上升沿delay_us(30);/延时等待信号稳定data=1;lI2C读一个字节数据23:55/32项目实现if(SDA_R)/采样获取数据data|=0 x01;elsedata&=0 xfe;delay_us(10);GPIO_ResetBits(I2C_GPIO,PIN_SCL);

16、/下降沿,从机给出下一位值delay_us(20);sda_out();if(ack)GPIO_SetBits(I2C_GPIO,PIN_SDA);/应答状态elseGPIO_ResetBits(I2C_GPIO,PIN_SDA);lI2C读一个字节数据23:55/33项目实现delay_us(10);GPIO_SetBits(I2C_GPIO,PIN_SCL);delay_us(50);GPIO_ResetBits(I2C_GPIO,PIN_SCL);delay_us(50);return data;lI2C读一个字节数据23:55/34项目思考I2C总线的工作原理和通信协议?温湿度传感器的工作原理是什么,如何驱动?如何用I2C总线和STM32实现温湿度数据采集?

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(面向物联网的嵌入式系统开发-25-STM32-I2C通信技术应用开发课件.pptx)为本站会员(晟晟文业)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|