资源简介
本文是我参考了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个文件信息
相关资源
- stm32做的红外遥控解码程序
- 《emwin实战指南(基于STM32-ISO开发板)
- Beginning STM32: Developing with FreeRTOS libo
- stm32f103c8t6_sch.Lib
- ALIENTEK战舰STM32F1 V3开发板原理图.rar
- STM32F103RC+ADC+DMA多通道采样LCD显示
- I2C读写AT24C02 基于STM32F103 cube116540
- 基于stm32f103ve的程序——跑马灯实验
- 基于STM32RCT6的步进电机驱动程序
- stm32f407上的两个can发送和接收例程
- STM32 led 时钟
- STM32 2.4G通信例程
- 直流无刷电机方波驱动 stm32 例程代码
- STM32中文资料
- STM32蓝牙和串口程序
- STM32f103超声波模块例程
- stm32f103c8t6 4 oled.rar
- stm32f030 IAP Demo(原创)
- STM32基于rt_thread操作系统的SDHC卡文件
- NRF24L01实现51与STM32双向通讯
- STM32F103 串口程序(完整版)
- stm32 ds18b20 温度传感器 测试通过
- stm32官方例程
- STM32F103定时器中断程序
- [免费]基于stm32f103ze 的OLED驱动代码
- STM32F103RBT6驱动UC1698控制芯片的160160黑
- STM32F103 DS18B20 V3.5.0固件库驱动程序工
- STM32定时器使用入门。看了这个程序会
- SIM908 SDIO FSMC STM32 FIFO
- STM32F103 CC2500完整驱动(模拟SPI)
评论
共有 条评论