当前位置: 首页 > wzjs >正文

恩施哪里有做网站的西安住房建设局网站

恩施哪里有做网站的,西安住房建设局网站,石台做网站,广告logo设计软件首先说明: 1.SMBus和I2C的区别 我曾尝试用江科大的I2C底层去直接读取该模块,但是无法成功,之后AI生成的的代码也无法成功。 思来想去最大的可能就是SMBus这个协议的问题,根据百度得到的结果如下: SMBus和I2C的区别 链…

首先说明:

1.SMBus和I2C的区别

        我曾尝试用江科大的I2C底层去直接读取该模块,但是无法成功,之后AI生成的的代码也无法成功。

        思来想去最大的可能就是SMBus这个协议的问题,根据百度得到的结果如下:

SMBus和I2C的区别

链接:

smbus协议_百度百科https://baike.baidu.com/item/smbus%E5%8D%8F%E8%AE%AE/56360572.个人见解(希望有知道的可以补充说明或纠错):

        ①SMBus协议是I2C的pro版本,对时序要求更加严格。

        ②特别是在超时方面,I2C可能是在SCL的对应电平下改变SDA的电平,那就能正常操作,不在意时间多久;但SMBus则是要求了SCL在对应电平下,SDA应该在什么时候做出改变,否则超时。

               

代码:

以下是我用STM32F103C8T6能读取到我认为正常数据的代码,若不满足读者要求,请自行微调。

若对你有帮助,请点赞收藏~

#include "stm32f10x.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_rcc.h"//************** 宏定义 **************
#define I2C_SCL_PIN    GPIO_Pin_6
#define I2C_SDA_PIN    GPIO_Pin_7
#define I2C_GPIO_PORT  GPIOB#define Nack_counter   10
#define uint           unsigned int
#define uchar          unsigned char//************** 全局变量 **************
volatile uchar DataH, DataL, Pecreg;
volatile uint temp;
//************** 函数声明 **************
void I2C_GPIO_Init(void);
void start_bit(void);
void stop_bit(void);
void send_bit(uchar bit_val);
uchar rx_byte(void);
uchar tx_byte(uchar dat_byte);
void delay_us(uint us);
uint memread(void);//************** GPIO初始化 **************
void I2C_GPIO_Init(void) {GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);  // 使能GPIOB时钟// SCL和SDA配置为开漏输出GPIO_InitStructure.GPIO_Pin = I2C_SCL_PIN | I2C_SDA_PIN;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;  // 开漏输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(I2C_GPIO_PORT, &GPIO_InitStructure);// 初始状态拉高GPIO_SetBits(I2C_GPIO_PORT, I2C_SCL_PIN | I2C_SDA_PIN);
}//************** 延时函数(72MHz主频)**************
void delay_us(uint us) {us *= 72/5;  // 72MHz下1us需要72个周期(实测需校准)while(us--) {__NOP();}
}//************** I2C起始信号 **************
void start_bit(void) {GPIO_SetBits(I2C_GPIO_PORT, I2C_SDA_PIN);GPIO_SetBits(I2C_GPIO_PORT, I2C_SCL_PIN);delay_us(5);  // 保持时间≥4.7usGPIO_ResetBits(I2C_GPIO_PORT, I2C_SDA_PIN);delay_us(5);GPIO_ResetBits(I2C_GPIO_PORT, I2C_SCL_PIN);
}//************** I2C停止信号 **************
void stop_bit(void) {GPIO_ResetBits(I2C_GPIO_PORT, I2C_SCL_PIN);GPIO_ResetBits(I2C_GPIO_PORT, I2C_SDA_PIN);delay_us(5);GPIO_SetBits(I2C_GPIO_PORT, I2C_SCL_PIN);delay_us(5);GPIO_SetBits(I2C_GPIO_PORT, I2C_SDA_PIN);
}//************** 发送单bit **************
void send_bit(uchar bit_val) {if(bit_val) {GPIO_SetBits(I2C_GPIO_PORT, I2C_SDA_PIN);} else {GPIO_ResetBits(I2C_GPIO_PORT, I2C_SDA_PIN);}delay_us(2);GPIO_SetBits(I2C_GPIO_PORT, I2C_SCL_PIN);delay_us(5);  // SCL高电平≥4.0usGPIO_ResetBits(I2C_GPIO_PORT, I2C_SCL_PIN);delay_us(2);
}//************** 接收单bit **************
uchar receive_bit(void) {uchar bit_val;GPIO_SetBits(I2C_GPIO_PORT, I2C_SDA_PIN);  // 释放SDA线delay_us(2);GPIO_SetBits(I2C_GPIO_PORT, I2C_SCL_PIN);delay_us(5);bit_val = GPIO_ReadInputDataBit(I2C_GPIO_PORT, I2C_SDA_PIN);GPIO_ResetBits(I2C_GPIO_PORT, I2C_SCL_PIN);delay_us(2);return bit_val;
}//************** 发送单字节 **************
//void tx_byte(uchar dat_byte) {
//    uchar i, n = Nack_counter;
//    
//TX_again:
//    for(i = 0; i < 8; i++) {
//        send_bit((dat_byte & 0x80) ? 1 : 0);
//        dat_byte <<= 1;
//    }
//    
//    if(receive_bit()) {  // 检测NACK
//        stop_bit();
//        if(n--) {
//            start_bit();
//            goto TX_again;
//        }
//    }
//}uchar tx_byte(uchar dat_byte)
{for(uchar i = 0; i < 8; i++) {send_bit((dat_byte & 0x80) ? 1 : 0);dat_byte <<= 1;}return !receive_bit();  // 返回1=ACK, 0=NACK
}//************** 接收单字节 **************
uchar rx_byte(void) {uchar i, dat = 0;for(i = 0; i < 8; i++) {dat <<= 1;if(receive_bit()) dat |= 0x01;}send_bit(0);  // 发送ACKreturn dat;
}//************** 读取温度数据 **************
//uint memread(void) {
//    start_bit();
//    tx_byte(0x00);  // MLX90614地址+写
//    tx_byte(0x07);  // 读取RAM命令
//    
//    start_bit();
//    tx_byte(0xB5);  // MLX90614地址+读
//    
//    DataL = rx_byte();
//    DataH = rx_byte();
//    Pecreg = rx_byte();
//    
//    stop_bit();
//    return (DataH << 8) | DataL;
//}
uint memread(void) {start_bit();if (!tx_byte(0xB4)) {  // 发送地址+写stop_bit();return 0xFFFF;}if (!tx_byte(0x07)) {  // 发送命令(读取RAM)stop_bit();return 0xFFFF;}start_bit();if (!tx_byte(0xB5)) {  // 发送地址+读stop_bit();return 0xFFFF;}DataL = rx_byte();  // 低字节DataH = rx_byte();  // 高字节Pecreg = rx_byte(); // PEC(可选)stop_bit();return ((DataH << 8) | DataL)*0.02 - 273.15;
}//************** 主函数 **************
int main(void) {SystemInit();  // 系统时钟配置为72MHzI2C_GPIO_Init();while(1) {temp = memread();// 此处添加温度处理代码delay_us(20000);  // 延时20ms}
}

使用方法:

①直接copy到自己的main.c

②下载到STM32F103C8T6板子上,并保持连接。根据下面代码接线,供电3.3V

#define I2C_SCL_PIN    GPIO_Pin_6
#define I2C_SDA_PIN    GPIO_Pin_7
#define I2C_GPIO_PORT  GPIOB

③使用debug模式查看数据,具体如下:

若点击运行后temp数据不变,则需要进行下面这一步:


文章转载自:

http://kNDCoZ1i.qtqjx.cn
http://6INwM7wU.qtqjx.cn
http://DBFfMEWm.qtqjx.cn
http://1B0nKcfM.qtqjx.cn
http://ePC2ztux.qtqjx.cn
http://jJNaa0VR.qtqjx.cn
http://C62qDlQF.qtqjx.cn
http://0mWhisBA.qtqjx.cn
http://UDz0KQJd.qtqjx.cn
http://NcwqYZlo.qtqjx.cn
http://Wul46Amy.qtqjx.cn
http://TuUzuVkC.qtqjx.cn
http://qBNwC8EC.qtqjx.cn
http://nrPW1dRU.qtqjx.cn
http://3GUQSA1w.qtqjx.cn
http://WYZ7khrL.qtqjx.cn
http://a6pa1sKY.qtqjx.cn
http://VyT1mpcB.qtqjx.cn
http://H2vz0BYy.qtqjx.cn
http://wg4RS4MJ.qtqjx.cn
http://PX7zmM1V.qtqjx.cn
http://ikPIIDwX.qtqjx.cn
http://IeidwHrJ.qtqjx.cn
http://jVLQYtim.qtqjx.cn
http://eoSnpyHp.qtqjx.cn
http://84ugOLoN.qtqjx.cn
http://eEcp1LZY.qtqjx.cn
http://RNwlnbZo.qtqjx.cn
http://txi8BN79.qtqjx.cn
http://bd6brZqP.qtqjx.cn
http://www.dtcms.com/wzjs/711120.html

相关文章:

  • 网站开发与管理心得体会婚纱摄影照片
  • 2022中国互联网公司排名徐州网站优化价格
  • 合肥哪里做网站wordpress 一键
  • 建站公司服务费包括哪些wordpress 修改主题名
  • 招代理的网站建设公司上市公司中 哪家网站做的好
  • 网站技术建设维护技术论文海南省建设厅网站
  • 重庆网站建设设计公司信息asp.net 手机网站模板
  • wordpress模板html5郑州网站seo诊断
  • 做免费资料分享网站会不会涉及版权wordpress运营服务费用
  • 网站开发的理解php 网站cookie
  • 网站备注销全国企业管理信息系统网站
  • 祥云平台网站建设怎么收费好玩的手机网页游戏
  • 学习网站模板下载私人网站如何做竞价
  • 网络公司开发网站网络广告推广公司
  • 企业网站建设哪家优惠网站建设推荐频道
  • 郴州网站seo上海歌舞娱乐场所停业
  • 青岛房地产网站建设全方位营销型网站
  • 做网站导航栏目怎么做wordpress如何使用dplayer
  • 安康做企业网站的温州网站网络公司
  • 珠海市企业网站制作平台深圳手机网站设计公司
  • 电子商务网站建设技术有哪些方面企业融资论文
  • 上海网站建设咨询怎么做电影网站吗
  • 个人网站收款接口软件开发一般多少钱
  • iis7 多个网站 80端口上海前端
  • 仿起点小说网站开发揭阳网站制作平台
  • 哈尔滨制作网站价格成都淮州新城建设投资有限公司网站
  • 广州 环保 凡人网站建设排名点击软件
  • 网站结构怎么分析网站的建设流程具体有哪些
  • 绍兴做网站公司哪家好注册公司流程及手续
  • 网站上传小马后怎么做spring做网站