chatgpt look here!

news/2024/12/21 19:07:19/

第一部分
int _I2CWrite(VL53L1_DEV Dev, uint8_t pdata, uint32_t count) {
int status;
int i2c_time_out = I2C_TIME_OUT_BASE+ count
I2C_TIME_OUT_BYTE;

status = HAL_I2C_Master_Transmit(Dev->I2cHandle, Dev->I2cDevAddr, pdata, count, i2c_time_out);
if (status) {//VL6180x_ErrLog("I2C error 0x%x %d len", dev->I2cAddr, len);//XNUCLEO6180XA1_I2C1_Init(&hi2c1);
}
return status;

}

int _I2CRead(VL53L1_DEV Dev, uint8_t pdata, uint32_t count) {
int status;
int i2c_time_out = I2C_TIME_OUT_BASE+ count
I2C_TIME_OUT_BYTE;

status = HAL_I2C_Master_Receive(Dev->I2cHandle, Dev->I2cDevAddr|1, pdata, count, i2c_time_out);
if (status) {//VL6180x_ErrLog("I2C error 0x%x %d len", dev->I2cAddr, len);//XNUCLEO6180XA1_I2C1_Init(&hi2c1);
}
return status;

}
其中HAL_I2C_Master_Transmit的定义为:
HAL_StatusTypeDef HAL_I2C_Master_Transmit(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t Timeout)
{
uint32_t tickstart = 0x00U;

/* Init tickstart for timeout management*/
tickstart = HAL_GetTick();

if(hi2c->State == HAL_I2C_STATE_READY)
{
/* Wait until BUSY flag is reset */
if(I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_BUSY, SET, I2C_TIMEOUT_BUSY_FLAG, tickstart) != HAL_OK)
{
return HAL_BUSY;
}

/* Process Locked */
__HAL_LOCK(hi2c);/* Check if the I2C is already enabled */
if((hi2c->Instance->CR1 & I2C_CR1_PE) != I2C_CR1_PE)
{/* Enable I2C peripheral */__HAL_I2C_ENABLE(hi2c);
}/* Disable Pos */
hi2c->Instance->CR1 &= ~I2C_CR1_POS;hi2c->State     = HAL_I2C_STATE_BUSY_TX;
hi2c->Mode      = HAL_I2C_MODE_MASTER;
hi2c->ErrorCode = HAL_I2C_ERROR_NONE;/* Prepare transfer parameters */
hi2c->pBuffPtr    = pData;
hi2c->XferCount   = Size;
hi2c->XferOptions = I2C_NO_OPTION_FRAME;
hi2c->XferSize    = hi2c->XferCount;/* Send Slave Address */
if(I2C_MasterRequestWrite(hi2c, DevAddress, Timeout, tickstart) != HAL_OK)
{if(hi2c->ErrorCode == HAL_I2C_ERROR_AF){/* Process Unlocked */__HAL_UNLOCK(hi2c);return HAL_ERROR;}else{/* Process Unlocked */__HAL_UNLOCK(hi2c);return HAL_TIMEOUT;}
}/* Clear ADDR flag */
__HAL_I2C_CLEAR_ADDRFLAG(hi2c);while(hi2c->XferSize > 0U)
{/* Wait until TXE flag is set */if(I2C_WaitOnTXEFlagUntilTimeout(hi2c, Timeout, tickstart) != HAL_OK){if(hi2c->ErrorCode == HAL_I2C_ERROR_AF){/* Generate Stop */hi2c->Instance->CR1 |= I2C_CR1_STOP;return HAL_ERROR;}else{return HAL_TIMEOUT;}}/* Write data to DR */hi2c->Instance->DR = (*hi2c->pBuffPtr++);hi2c->XferCount--;hi2c->XferSize--;if((__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_BTF) == SET) && (hi2c->XferSize != 0U)){/* Write data to DR */hi2c->Instance->DR = (*hi2c->pBuffPtr++);hi2c->XferCount--;hi2c->XferSize--;}/* Wait until BTF flag is set */if(I2C_WaitOnBTFFlagUntilTimeout(hi2c, Timeout, tickstart) != HAL_OK){if(hi2c->ErrorCode == HAL_I2C_ERROR_AF){/* Generate Stop */hi2c->Instance->CR1 |= I2C_CR1_STOP;return HAL_ERROR;}else{return HAL_TIMEOUT;}}
}/* Generate Stop */
hi2c->Instance->CR1 |= I2C_CR1_STOP;hi2c->State = HAL_I2C_STATE_READY;
hi2c->Mode = HAL_I2C_MODE_NONE;/* Process Unlocked */
__HAL_UNLOCK(hi2c);return HAL_OK;

}
else
{
return HAL_BUSY;
}
}
如何将其用
typedef struct
{
uint32 scl_pin; // 用于记录对应的引脚编号
uint32 sda_pin; // 用于记录对应的引脚编号
uint8 addr; // 器件地址 七位地址模式
uint32 delay; // 模拟 IIC 软延时时长 0:1370KHz 10:1020KHz 20:757KHz 30: 633KHz 40: 532Khz 50: 448KHz 60: 395KHz 70: 359KHz 80: 324KHz 100: 268KHz 1000:32KHz
void *iic_scl; // 记录 SCL 端口地址
void *iic_sda; // 记录 SDA 端口地址
}soft_iic_info_struct;
static uint8 soft_iic_send_data (soft_iic_info_struct *soft_iic_obj, const uint8 data)
{
uint8 temp = 0x80;
while(temp)
{
gpio_set_level(soft_iic_obj->sda_pin, data & temp);
temp >>= 1;

    soft_iic_delay(soft_iic_obj->delay);soft_iic_gpio_high_scl();                                       // SCL 拉高soft_iic_delay(soft_iic_obj->delay);soft_iic_gpio_low_scl();                                        // SCL 拉低
}
return ((soft_iic_wait_ack(soft_iic_obj) == 1) ? 0 : 1 );

}
替换掉?并能配合VL53L1_Error VL53L1_WrByte(VL53L1_DEV Dev, uint16_t index, uint8_t data) {
VL53L1_Error Status = VL53L1_ERROR_NONE;
int32_t status_int;

 _I2CBuffer[0] = index>>8;_I2CBuffer[1] = index&0xFF;_I2CBuffer[2] = data;VL53L1_GetI2cBus();status_int = _I2CWrite(Dev, _I2CBuffer, 3);if (status_int != 0) {Status = VL53L1_ERROR_CONTROL_INTERFACE;}VL53L1_PutI2cBus();return Status;

}

VL53L1_Error VL53L1_WrWord(VL53L1_DEV Dev, uint16_t index, uint16_t data) {
VL53L1_Error Status = VL53L1_ERROR_NONE;
int32_t status_int;

 _I2CBuffer[0] = index>>8;_I2CBuffer[1] = index&0xFF;_I2CBuffer[2] = data >> 8;_I2CBuffer[3] = data & 0x00FF;VL53L1_GetI2cBus();status_int = _I2CWrite(Dev, _I2CBuffer, 4);if (status_int != 0) {Status = VL53L1_ERROR_CONTROL_INTERFACE;}VL53L1_PutI2cBus();return Status;

}
这几个函数进行使用?


http://www.ppmy.cn/news/955191.html

相关文章

2023-03-10:YUV420P像素数据编码为JPEG图片,请用go语言实现。

2023-03-10:YUV420P像素数据编码为JPEG图片,请用go语言实现。 答案2023-03-10: 方法一、使用 github.com/moonfdd/ffmpeg-go 库,基于雷霄骅的代码修改。 方法二、使用golang官方库image/jpeg,yuv420p先转换成rgb,再…

ChatGPT4.0在投资中的运用初探

导读: ChatGPT自2022年11月30日发布以来,便受到金融行业越来越多的关注。如多家银行宣布成为文心一言首批生态合作伙伴,积极考虑将类ChatGPT为代表的生成式对话产品引入银行业务。 关注公众号:【互联互通社区】,回复【…

朗润国际期货招商:有人认为Bard智能水平不如 ChatGPT

(2月8日)美股开盘,谷歌大跌超7%,市值蒸发约1020亿美元。业内人士普遍认为,主要导火索是谷歌人工智能聊天机器人Bard在一场发布会上对用户提出的问题给出了错误答案。 Bard在回答“詹姆斯韦伯太空望远镜(JW…

【ChatGPT】GPT-3.5+ChatGPT:图解概述

总结常见问题 –ChatGPT的受欢迎程度–ChatGPT的成本–ChatGPT的成就–在本地运行ChatGPT–API时间线GPT-3概述(2020年5月)GPT-3.5或InstructGPT概述(2022年1月)ChatGPT概述(2022年11月)ChatGPT的推荐替代方…

宝塔+x-ui面板共存,并使用Cloudflare WARP一键脚本解决openai 1020错误代码的问题记录

本文是根据网络上的资料后自行组合整理, 网站面板下载地址:宝塔 x-ui面板项目地址: x-ui Cloudflare WARP一键脚本项目地址: Cloudflare WARP 服务器版本:Ubuntu 22.04 x64 域名托管:cloudflare 宝塔安装 …

chatgpt-最常报错Access denied

一、问题 Access denied 的原因基本都是由于 IP 地址,例如我们用国内网络直接访问 ChatGPT 官网就会报错 Access denied(访问被拒绝),Error reference number 1020(错误参考编号:1020) 二、原因…

爆火的 ChatGPT 太强了!写代码、改 bug,网友:可取代 Stack Overflow 了

OpenAI 新上线的 ChatGPT 可谓是火爆出圈,这个对话模型可以回答后续问题,承认错误,挑战不正确的前提,还能帮你修改代码中的 bug…… 只要和它聊上几句,一会儿功夫它就能把问题给你解决了。例如用户要求:「C…

PMP考题练习2023-07-19

1、敏捷管理专业人士注意到产品待办事项上一个新故事很模糊,缺少验收标准。敏捷管理专业人士应在sprint周期中的哪个时间点要求产品负责人提供更多详情? A.在待办事项梳理会上。 B.在sprint回顾会议上。 C.在每日scrum期问。 D.在选代评审会上。 选A 解释…