您的位置:首页 > 文旅 > 旅游 > 个人中心页面模板_微信小程序是干什么用的_网站关键词推广工具_制作网页的代码

个人中心页面模板_微信小程序是干什么用的_网站关键词推广工具_制作网页的代码

2025/5/15 16:03:39 来源:https://blog.csdn.net/ffyy_123/article/details/144316506  浏览:    关键词:个人中心页面模板_微信小程序是干什么用的_网站关键词推广工具_制作网页的代码
个人中心页面模板_微信小程序是干什么用的_网站关键词推广工具_制作网页的代码

主要问题:
1,使用STM32F103C8T6,模拟IIC,SCL和SDA口配置为推挽输出上拉,主要是SDA脚,每次都要输出输入模式重新配置,虽然也能通信,但不稳定,出错率大;
2,后将SCL和SDA口配置为开漏输出上拉,仍是IO模拟IIC,开漏的特点是写1时,是使用上拉电阻将总线拉高,总线处于“释放”状态,其他器件2可以拉低,写0是总线接地,总线此时是不能被其他器件拉高的,所示总线处于被写0一方的的占用或者强制。而我的stm32无外接上拉电阻,SHT20的SCL和SDA也无外接上拉电阻,这时使用HAH库的写高,是无法拉高的,后将SCL和SDA脚都加了10K上拉电阻后,通信正常;
3,也可以使用STM32CubeMX配置为硬件IIC进行通信,也要外接上拉电阻,但此方法还未尝试,发现网上说STM32F103系列的IIC使用HAH库发送函数返回BUSY,存在BUSY锁死问题,暂时未用。

下图是SCL和SDA脚配置为推挽上拉输出方式通信,的宏定义,SDA每次操作都要重新配置输入或输出,此方法在IIC通信中不可取:
请添加图片描述
再来说说SHT20的驱动,我使用非主机模式,默认温度测量需要等待80几ms,如果使用裸机,只有阻塞延迟,太浪费时间了,还是要加实时操作系统的,像FREERTOS。
如下模拟IIC读测值代码,也有问题,还未调通!!!

void SHT2x_MeasureHM(etSHT2xMeasureType eSHT2xMeasureType)
{  uint8_t checksum; uint16_t i = 0; uint8_t back_flag = 1; I2c_StartCondition();back_flag = I2c_WriteByte(I2C_ADR_W);if(back_flag == ACK){ sensor_warning_flag = 0;switch(eSHT2xMeasureType){ case HUMIDITY: back_flag = I2c_WriteByte(TRIG_RH_MEASUREMENT_POLL); break;case TEMP :    back_flag = I2c_WriteByte(TRIG_T_MEASUREMENT_POLL); break;default: break;}if(back_flag == ACK)//-- wait until hold master is released --{I2c_StopCondition();DelayMicroSeconds(80000);   //等待最大80msback_flag = I2c_WriteByte(I2C_ADR_R);while(back_flag== NACK){I2c_StopCondition();DelayMicroSeconds(80000*(++i)); //等待测量时间I2c_StartCondition();back_flag = I2c_WriteByte(I2C_ADR_R);if (i>=2) {error |= TIME_OUT_ERROR;return;}};//-- read two data bytes and one checksum byte --dat[0] = I2c_ReadByte(ACK);  //高8位数据dat[1] = I2c_ReadByte(ACK);  //低8位数据checksum= I2c_ReadByte(NACK);  //8位校验位数据//-- verify checksum --error = SHT2x_CheckCrc(dat,2,checksum);I2c_StopCondition();}elseerror |= ACK_ERROR;}elseerror |= ACK_ERROR;
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com