完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
`这是我的代码 #include "SHT10.h" /************************************************************* Function :SHT10_Dly Description:SHT10时序需要的延时 Input : none return : none *************************************************************/ void SHT_Dly(void) { u16 i; for(i = 500; i > 0; i--); } /**************************************************************************** * Function Name : SHT_Config * Description : 初始化GPIO. * Input : None * Output : None * Return : None ****************************************************************************/ void SHT_INIT(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); GPIO_InitStructure.GPIO_Pin=SHT_SCK | SHT_DATA ; GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; GPIO_Init(GPIOB,&GPIO_InitStructure); SHT_RESET(); } /******************************************************************************* * 函 数 名 : SHT_FASONG * 函数功能 : SDA输出配置 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ void SHT_FASONG(void) { SHT_DATA_OUT(); //设置DATA数据线为输出 SHT_DATA_H(); SHT_SCK_L(); SHT_Dly(); SHT_SCK_H(); SHT_Dly(); SHT_DATA_L(); SHT_Dly(); SHT_SCK_L(); SHT_Dly(); SHT_SCK_H(); SHT_Dly(); SHT_DATA_H(); SHT_Dly(); SHT_SCK_L(); } /******************************************************************************* * 函 数 名 : SHT_DATA_OUT * 函数功能 : SDA输出配置 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ void SHT_DATA_OUT(void) { GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin=SHT_DATA; GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; GPIO_Init(GPIOB,&GPIO_InitStructure); } /******************************************************************************* * 函 数 名 : SHT_RESET * 函数功能 : SHT复位 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ void SHT_RESET(void) { u8 i=0; SHT_DATA_OUT(); SHT_SCK_L(); SHT_DATA_H(); for(i=0;i<9;i++) { SHT_SCK_H(); SHT_Dly(); SHT_SCK_L(); SHT_Dly(); } SHT_FASONG(); } /******************************************************************************* * 函 数 名 : SHT_DATA_IN * 函数功能 : SDA输入配置 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ void SHT_DATA_IN(void) { GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin=SHT_DATA; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU; GPIO_Init(GPIOB,&GPIO_InitStructure); } /******************************************************************************* * 函 数 名 : SHT_WRITE * 函数功能 : * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ void SHT_WriteByte(u8 value) { u8 i= 0; SHT_DATA_OUT(); //设置DATA数据线为输出 for(i = 0x80; i > 0; i /= 2) //写1个字节 { if(i & value) SHT_DATA_H(); else SHT_DATA_L(); SHT_Dly(); SHT_SCK_H(); SHT_Dly(); SHT_SCK_L(); SHT_Dly(); } SHT_DATA_IN(); //设置DATA数据线为输入,释放DATA线 SHT_SCK_H(); SHT_Dly(); SHT_SCK_L(); } /******************************************************************************* * 函 数 名 : SHT_READ_L * 函数功能 : * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ u8 SHT_ReadByte(u8 Ack) { u8 i, val = 0; SHT_DATA_IN(); //设置DATA数据线为输入 for(i = 0x80; i > 0; i /= 2) //读取1字节的数据 { SHT_Dly(); SHT_SCK_H(); SHT_Dly(); if(SHT_DATA_R()) val = (val | i); SHT_SCK_L(); } SHT_DATA_OUT(); //设置DATA数据线为输出 if(Ack) SHT_DATA_L(); //应答,则会接下去读接下去的数据(校验数据) else SHT_DATA_H(); //不应答,数据至此结束 SHT_Dly(); SHT_SCK_H(); SHT_Dly(); SHT_SCK_L(); SHT_Dly(); return val; //返回读到的值 } void SHT_Measure(u16 *p_value, u8 mode) { u32 i; u8 value_H = 0; u8 value_L = 0; SHT_FASONG(); //开始传输 switch(mode) { case TEMP: //测量温度 SHT_WriteByte(MEASURE_TEMP);//写MEASURE_TEMP测量温度命令 break; case HUMI: SHT_WriteByte(MEASURE_HUMI);//写MEASURE_HUMI测量湿度命令 break; default: break; } SHT_DATA_IN(); for(i = 0; i < 72000000; i++) //等待DATA信号被拉低 { if(SHT_DATA_R() == 0) break; //检测到DATA被拉低了,跳出循环 } value_H = SHT_ReadByte(ACK); value_L = SHT_ReadByte(noACK); *p_value = (value_H << 8) | value_L; } void SHT_Calculate(u16 t, u16 rh, float *p_temperature, float *p_humidity) { const float d1 = -39.7; const float d2 = +0.01; const float C1 = -2.0468; const float C2 = +0.0367; const float C3 = -0.0000015955; const float T1 = +0.01; const float T2 = +0.00008; float RH_Lin; //RH线性值 float RH_Ture; //RH真实值 float temp_C; temp_C = d1 + d2 * t; //计算温度值 RH_Lin = C1 + C2 * rh + C3 * rh * rh; //计算湿度值 RH_Ture = (temp_C -25) * (T1 + T2 * rh) + RH_Lin; //湿度的温度补偿,计算实际的湿度值 if(RH_Ture > 100) //设置湿度值上限 RH_Ture = 100; if(RH_Ture < 0.1) RH_Ture = 0.1; //设置湿度值下限 *p_humidity = RH_Ture; *p_temperature = temp_C; } float SHT_CalcuDewPoint(float t, float h) { float logEx, dew_point; logEx = 0.66077 + 7.5 * t / (237.3 + t) + (log10(h) - 2); dew_point = ((0.66077 - logEx) * 237.3) / (logEx - 8.16077); return dew_point; } #include"SHT10.h" #include"printf.h" int main() { u16 humi_val, temp_val; float humi_val_real = 0.0; float temp_val_real = 0.0; float dew_point = 0.0; printf_init(); printf(" SHT10温室度测试程序!!! "); SHT_INIT(); delay_ms(20); while(1) { SHT_Measure(&temp_val,TEMP); //获取温度测量值 SHT_Measure(&humi_val,HUMI); //获取湿度测量值 SHT_Calculate(temp_val, humi_val, &temp_val_real, &humi_val_real); //计算实际的温湿度值 dew_point = SHT_CalcuDewPoint(temp_val_real, humi_val_real); //计算露点温度 printf("当前环境温度为:%2.1f℃,湿度为:%2.1f%%,露点温度为%2.1f℃ ", temp_val_real, humi_val_real, dew_point); delay_ms(1000); } } 请问是我的程序有问题呢还是我的接线有问题 ` |
|
相关推荐
3个回答
|
|
这种同步通讯其实仿真的时候可以一步一步的点击,逐步看IO口的输出和读回对不对。先读一下芯片ID之类的看看对不对。
|
|
|
|
你这有没有示波器之类的东东啊 直接看看时序之类的 就一目了然了 就这么猜 谁能知道咋回事啊
|
|
|
|
1、确定硬件连接是否正确,多看几眼管脚定义。
2、先用示波器查看stm32的IO是否用信号发出,并且可以查看发出的时序波形是否符合预期。 3、满足以上两个条件,在线仿真寄存器值是否正确。首先确定地址是否正确。 |
|
|
|
只有小组成员才能发言,加入小组>>
3974 浏览 0 评论
8520 浏览 0 评论
5943 浏览 0 评论
4089 浏览 1 评论
5180 浏览 0 评论
请问一下qspi mtsr引脚传输一次32bit后引脚不拉低怎么解决?
408浏览 2评论
646浏览 2评论
4749浏览 2评论
最近UJA1023开发遇到问题了,各位大神有谁知道可以替代这颗芯片的
582浏览 1评论
807浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 15:18 , Processed in 0.766251 second(s), Total 85, Slave 65 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号