IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> SDP810-500PA气压传感器驱动程序 -> 正文阅读

[嵌入式]SDP810-500PA气压传感器驱动程序

平台

平台: stm32f103c8t6
在这里插入图片描述

协议

协议:IIC
在这里插入图片描述

原理

在这里插入图片描述

驱动源码

IIC_dif_pressure.c

#include <stm32f10x_lib.h>
#include "IIC_dif_pressure.h"
#include "stdio.h"
#include "delay.h"
unsigned char  crc = 0xff;
float dif_pressure;//压差值
float tempre_value;  //温度因子
float Scale_Factors; //比例因子


void delay_xus(u16 time)
{    
	u16 i=0;     
	while(time--)
	{      			
		i=10;  
		while(i--) ;    
	}
}
void delay_xms(u16 time)
{     
	u16 i=0; 
	while(time--) 
	{     
		i=12000; 
		while(i--) ;     
	}
}



void IIC2_Init(void)
{					     
	GPIO_InitTypeDef GPIO_InitStructure;  
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, 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(GPIOA, &GPIO_InitStructure);
	GPIO_SetBits(GPIOA,GPIO_Pin_12|GPIO_Pin_11); 	
}

void IIC2_Start(void)
{
	SDA2_OUT();    
	IIC2_SDA=1;	  	  
	IIC2_SCL=1;
	delay_xus(4);
 	IIC2_SDA=0;
	delay_xus(4);
	IIC2_SCL=0;
}	  

void IIC2_Stop(void)
{
	SDA2_OUT();
	IIC2_SCL=0;
	IIC2_SDA=0;
 	delay_xus(4);
	IIC2_SCL=1; 
	IIC2_SDA=1;
	delay_xus(4);							   	
}

uint8_t IIC2_Wait_Ack(void)
{
	uint8_t ucErrTime=0;
	SDA2_IN();     
	IIC2_SDA=1;
	delay_xus(1);	   
	IIC2_SCL=1;
	delay_xus(1);	 
	while(READER_SDA)
	{
		ucErrTime++;
		if(ucErrTime>250)
		{
			IIC2_Stop();
			return 1;
		}
	}
	IIC2_SCL=0;//ê±?óê?3?0 	   
	return 0;  
} 

void IIC2_Ack(void)
{
	IIC2_SCL=0;
	SDA2_OUT();
	IIC2_SDA=0;
	delay_xus(2);
	IIC2_SCL=1;
	delay_xus(2);
	IIC2_SCL=0;
}
	    
void IIC2_NAck(void)
{
	IIC2_SCL=0;
	SDA2_OUT();
	IIC2_SDA=1;
	delay_xus(2);
	IIC2_SCL=1;
	delay_xus(2);
	IIC2_SCL=0;
}					 				     
		  
void IIC2_Send_Byte(u8 txd)
{                        
    uint8_t t;   
	SDA2_OUT(); 	    
    IIC2_SCL=0;
	for(t=0;t<8;t++)
    {              
  
		if((txd&0x80)>>7)
			IIC2_SDA=1;
		else
			IIC2_SDA=0;	  
		txd<<=1;   
		delay_xus(2);
		IIC2_SCL=1;
		delay_xus(2); 
		IIC2_SCL=0;	
		delay_xus(2);
		
    }	 
} 	    
//读1个字节
uint8_t IIC2_Read_Byte(unsigned char ack)
{
	uint8_t i,receive=0;
	SDA2_IN();//SDAéè???aê?è?
    for(i=0;i<8;i++ )
	{
        IIC2_SCL=0; 
        delay_xus(2);
		IIC2_SCL=1;
        if(READER_SDA)receive++;   
        receive<<=1;
		delay_xus(1); 
    }					 
    if (ack==0)
        IIC2_NAck();//·¢?ínACK
    else
        IIC2_Ack(); //·¢?íACK   
    return receive;
}

//3?ê??ˉIIC2?ó?ú
void SDP810_Init(void)
{
	IIC2_Init();
}
//?áè?sdp810êy?Y

void  SDP810_ReadData(u16 cmd,int8_t *p)
{    
	    uint8_t i=0;
	    uint8_t ack=0;
	    IIC2_Start();  	 	   
		IIC2_Send_Byte(0X4a);           //发送写地址		   
		IIC2_Wait_Ack();
	    IIC2_Send_Byte(cmd>>8);//发送高地址
	    IIC2_Wait_Ack();
		IIC2_Send_Byte(cmd);   //发送低地址
		IIC2_Wait_Ack(); 
	    IIC2_Stop();//产生一个停止条件
	    
	    delay_xms(10);
	    IIC2_Start();
	    IIC2_Send_Byte(0X4b);           //发送读地址	
        IIC2_Wait_Ack();	
	   
	    for(i=0;i<9;i++)
	
	      {
			 if(i<8)
			 {
			    ack=1;
			 }
			 else
			 {
			    ack=0;//最后一个发送nack
			 }
             p[i]=IIC2_Read_Byte(ack);	
			
			 
		  }
           IIC2_Stop();//产生一个停止条件
		   delay_xms(10);

}	
//sdp810连续测量写命令
void SDP810_Write_Cmd(uint16_t cmd)
{				   	  	    																 
     	
	    IIC2_Start();  
		IIC2_Send_Byte(0X4a);	    //发送写命令
	    IIC2_Wait_Ack();
	    IIC2_Send_Byte(cmd>>8);//发送高地址
	    IIC2_Wait_Ack();
		IIC2_Send_Byte(cmd);   //发送低地址
		IIC2_Wait_Ack(); 	 										  		   			   
		IIC2_Stop();//产生一个停止条件
	    delay_xms(10);
}

//sdp810获取值
void Sdp810_GetValue(void)
{
    int8_t p[9];
	SDP810_ReadData(0x3615,p);
//	SDP810_ReadData(0x361E,p);
	dif_pressure=(float)(((p[0]*256)+p[1])/240.0);
	tempre_value=(float)(((p[3]*256)+p[4])/200.0);
	Scale_Factors=(float)((p[6]*256)+p[7]);
	
	
}
 
	


IIC_dif_pressure.h

#ifndef __IICPRESSURE_H
#define __IICPRESSURE_H
#include "sys.h"

//IO方向设置
#define SDA2_IN()  {GPIOA->CRH&=0XFFFF0FFF;GPIOA->CRH|=(u32)8<<12;} //输入上拉、下拉模式
#define SDA2_OUT() {GPIOA->CRH&=0XFFFF0FFF;GPIOA->CRH|=(u32)3<<12;} //推挽输出模式
//IO操作函数	 
#define IIC2_SCL    PAout(12) //SCL
#define IIC2_SDA    PAout(11) //SDA	 
#define READER_SDA   PAin(11)  //输入SDA 
#define SLAVE_ADDRESS	0x25
#define SDP_TYPE SLAVE_ADDRESS//SDP810地址

//IIC2所有操作函数
void IIC2_Init(void);                //初始化IIC2的IO口				 
void IIC2_Start(void);				//发送IIC2开始信号
void IIC2_Stop(void);	  			//发送IIC2停止信号
void IIC2_Send_Byte(uint8_t txd);	//IIC2发送一个字节
uint8_t IIC2_Read_Byte(uint8_t ack);//IIC2读取一个字节
uint8_t IIC2_Wait_Ack(void); 		//IIC2等待ACK信号
void IIC2_Ack(void);				//IIC2发送ACK信号
void IIC2_NAck(void);				//IIC2不发送ACK信号

void IIC2_Write_One_Byte(uint8_t daddr,uint8_t addr,uint8_t data);
uint8_t IIC2_Read_One_Byte(uint8_t daddr,uint8_t addr);	


void  SDP810_ReadData(u16 cmd,int8_t *p);//读多个字节
void SDP810_Write_Cmd(uint16_t cmd);		
extern void Sdp810_GetValue(void);




void SDP810_Init(void); //初始化IIC

//extern void delay_ms(u16 time);
//extern void delay_us(u16 time);    
#endif







  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-07-25 11:50:39  更:2021-07-25 11:52:02 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年4日历 -2024/4/25 3:23:56-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码