资源简介
本文是我参考了CSDN里许多博主的文档和代码改编的,检测的数据比较稳定,具体的优化算法可以再简便写,代码里的检测模式设置的选择可以改变检测的时间,具体的根据自己的要求而定,该文档和代码只供参考,如有不足之处,烦请各位大牛指出,谢谢!
代码片段和文件信息
#include “i2c_hal.h“
// SDA on PB7
#define SDA_LOW() IIC_SDA=0 // set SDA to low
#define SDA_OPEN() IIC_SDA=1 // set SDA to open-drain
#define SDA_READ READ_SDA // read SDA
// SCL on PB6 /* -- adapt the defines for your uC -- */
#define SCL_LOW() IIC_SCL=0 // set SCL to low
#define SCL_OPEN() IIC_SCL=1 // set SCL to open-drain
#define SCL_READ READ_SCL // read SCL
//-----------------------------------------------------------------------------
void I2c_Init(void) /* -- adapt the init for your uC -- */
{
RCC->APB2ENR|=1<<3; //先使能外设IO PORTB时钟
SDA_OPEN();
SCL_OPEN();
GPIOB->CRL&=0X00FFFFFF; //PB6/7 推挽输出
GPIOB->CRL|=0X55000000;
}
//-----------------------------------------------------------------------------
void I2c_StartCondition(void)//起始信号
{
SDA_OPEN(); //sda线输出
delay_us(10);
SCL_OPEN();
delay_us(10);
SDA_LOW();//START:when CLK is highDATA change form high to low
delay_us(100);
SCL_LOW();//钳住I2C总线,准备发送或接收数据
delay_us(100);
}
//-----------------------------------------------------------------------------
void I2c_StopCondition(void)
{
SCL_LOW();
delay_us(10);
SDA_LOW();
delay_us(10);
SCL_OPEN();
delay_us(100);//STOP:when CLK is high DATA change form low to high
SDA_OPEN();
delay_us(100);
}
//-----------------------------------------------------------------------------
etError I2c_WriteByte(u8t txByte)
{
etError error = NO_ERROR;
u8t mask;
for(mask = 0x80; mask > 0; mask >>= 1) // shift bit for masking (8 times)
{
if((mask & txByte) == 0) {SDA_LOW(); } //数据线拉低,发送0--printf(“%ld\r\n“SDA_LOW());
else {SDA_OPEN();} //数据线拉高,发送1--printf(“%ld\r\n“SDA_OPEN());
delay_us(10);
SCL_OPEN(); //时钟线拉高,告诉从机,主机数据发送完毕
delay_us(50); //电平保持时间,等待从机接收数据
SCL_LOW(); //时钟线拉低,告诉从机,主机需要发送数据
delay_us(10); //电平保持时间,等待时钟线稳定
}
SDA_OPEN(); //数据线上拉
SCL_OPEN(); //时钟线拉高,告诉从机,主机现在开始读取数据
delay_us(100); // data set-up time (t_SU;DAT)
if(GPIOB->IDR&(1<<7)) error = ACK_ERROR; // 检测从机是否回应应答,SDA_READ(GPIOB_7)为1则应答失败
SCL_LOW();
delay_us(200); // wait to see byte package on scope
return error; // return error code
}
//-----------------------------------------------------------------------------
etError I2c_ReadByte(u8t *rxByte etI2cAck ack u8t timeout)
{
etError error = NO_ERROR;
u8t mask;
*rxByte = 0x00;
for(mask = 0x80; mask > 0; mask >>= 1) // shift bit for masking (8 times)
{
SCL_LOW(); //时钟线拉低,告诉从机,主机需要数据
delay_us(20); //电平保持时间,等待时钟线稳定
SCL_OPEN(); //时钟线拉高,告诉从机,主机现在正在读取数据
delay_us(30); // SCL high time (t_HIGH)
if(GPIOB->IDR&(1<<7)) *rxByte |= mask; // read bit
delay_us(20); // clock set-up time (t_SU;CLK)
}
SCL_LOW();
if(ack == ACK) {SDA_LOW();} // send
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2018-01-18 11:00 STH3x参考代码\
文件 633166 2018-01-18 11:00 STH3x参考代码\IIC协议总结.docx
文件 926221 2017-12-12 12:19 STH3x参考代码\Sensirion_Humidity_Sensors_SHT3x_Datasheet_digital.pdf
目录 0 2018-01-15 20:19 STH3x参考代码\SHT30代码\
文件 3584 2018-01-10 14:55 STH3x参考代码\SHT30代码\core_cm3.crf
文件 95 2018-01-10 14:55 STH3x参考代码\SHT30代码\core_cm3.d
文件 10500 2018-01-10 14:55 STH3x参考代码\SHT30代码\core_cm3.o
文件 226547 2018-01-10 15:49 STH3x参考代码\SHT30代码\i2c_hal.crf
文件 296 2018-01-10 15:49 STH3x参考代码\SHT30代码\i2c_hal.d
文件 240036 2018-01-10 15:49 STH3x参考代码\SHT30代码\i2c_hal.o
文件 1859 2018-01-15 15:47 STH3x参考代码\SHT30代码\Jli
文件 671 2018-01-10 15:50 STH3x参考代码\SHT30代码\Jli
文件 230591 2018-01-10 15:49 STH3x参考代码\SHT30代码\main.crf
文件 295 2018-01-10 15:49 STH3x参考代码\SHT30代码\main.d
文件 241764 2018-01-10 15:49 STH3x参考代码\SHT30代码\main.o
目录 0 2018-01-15 20:19 STH3x参考代码\SHT30代码\OBJ\
文件 3584 2018-01-10 16:31 STH3x参考代码\SHT30代码\OBJ\core_cm3.crf
文件 103 2018-01-10 16:31 STH3x参考代码\SHT30代码\OBJ\core_cm3.d
文件 10568 2018-01-10 16:31 STH3x参考代码\SHT30代码\OBJ\core_cm3.o
文件 224495 2018-01-15 17:49 STH3x参考代码\SHT30代码\OBJ\delay.crf
文件 289 2018-01-15 17:49 STH3x参考代码\SHT30代码\OBJ\delay.d
文件 236856 2018-01-15 17:49 STH3x参考代码\SHT30代码\OBJ\delay.o
文件 19 2018-01-15 15:41 STH3x参考代码\SHT30代码\OBJ\ExtDll.iex
文件 232267 2018-01-15 18:01 STH3x参考代码\SHT30代码\OBJ\i2c_hal.crf
文件 511 2018-01-15 18:01 STH3x参考代码\SHT30代码\OBJ\i2c_hal.d
文件 246052 2018-01-15 18:01 STH3x参考代码\SHT30代码\OBJ\i2c_hal.o
文件 235828 2018-01-15 18:01 STH3x参考代码\SHT30代码\OBJ\main.crf
文件 502 2018-01-15 18:01 STH3x参考代码\SHT30代码\OBJ\main.d
文件 247996 2018-01-15 18:01 STH3x参考代码\SHT30代码\OBJ\main.o
文件 243104 2018-01-15 18:01 STH3x参考代码\SHT30代码\OBJ\sht3x.crf
文件 516 2018-01-15 18:01 STH3x参考代码\SHT30代码\OBJ\sht3x.d
............此处省略76个文件信息
相关资源
- STM32f103C8t6型单片机用于超声波测距
- DHT11温湿度传感器项目代码.rar
- STM32 ADC与DMA多通道采集加均值滤波.
- ldc1314测试程序stm32f1
- mpr121.zip
- 倒立摆调试,使用步进电机,完全成
- STM32F1 直线倒立摆程序代码
- STM32F103+SIM800A双向通信
- STM32F103采用DMA实现USART2接收和发送
- STM32F103采用DMA实现USART3接收和发送
- stm32f103和时钟芯片ds1302
- stm32f103驱动北微传感器
- 声光感应控制LED灯
- RikiRobot Stm32驱动板开发使用说明
- STM32L476资料
- STM32F103 模糊自整定位置式PID控制电机
- 基于stm32数字光强计GY-30光强采集ole
- 基于STM32的模拟鼠标移动
- stm32f013 OLED 屏幕和粉尘传感器串口
- STM32C8T6通过扫描二维码进行智能开锁
- STM32F1指南者步进电机驱动
- 基于STM32的智能浇花系统(带ucosiii操
- 基于STM32F103的智能浇花系统
- 四路驱动小车stm32f103源码
- STM32控制SIM800c,sim900a,接收短信,
- STM32F103读取ds18b20温度传感器
- stm32f103iic读取AT24XX全系eeprom
- 基于stm32+onenet的智能花盆
- stm32 输出3相spwm
- 分享一个0.96的oled显示驱动,软件模拟
评论
共有 条评论