一、实验目的:通过单片机普通IO口,模拟IIC时序,掌握IIC通讯协议。
二、实验用到的主控芯片:STM32F103RCT6,IIC通讯引脚IIC_SDA:PC11,IIC_SCL:PC12
三、SHT30地址线接地。
四、SHT30.h
#ifndef SHT30_H
#define SHT30_H
#include "delay.h"
#include "sys.h"
#include "stdio.h"
#include "usart.h"
#include "string.h"
extern u8 humiture_buff1[20];
void SHT30_Init(void);
void IIC_ACK(void);
void IIC_NACK(void);
u8 IIC_wait_ACK(void);
void IIC_Start(void);
void IIC_Stop(void);
void IIC_SendByte(u8 byte);
u8 IIC_RcvByte(void);
void SHT30_read_result(u8 addr);
#endif
五、SHT30.c
#include "SHT30.h"
#define write 0
#define read 1
//IIC总线接口定义
#define SCL PCout(12)
#define SDA_OUT PCout(11)
#define SDA_IN PCin(11)
#define IIC_INPUT_MODE_SET() {GPIOC->CRH&=0XFFFF0FFF;GPIOC->CRH|=8<<12;}
#define IIC_OUTPUT_MODE_SET() {GPIOC->CRH&=0XFFFF0FFF;GPIOC->CRH|=3<<12;}
float humiture[4];
u8 humiture_buff1[20];
void SHT30_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
//RCC->APB2ENR|=1<<4;//先使能外设IO PORTC时钟
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC, ENABLE );
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12|GPIO_Pin_11;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);
SCL=1;
SDA_OUT=1;
}
/*主机发送ACK*/
void IIC_ACK(void)
{
IIC_OUTPUT_MODE_SET();
SCL=0;
delay_us(2