hal库里有很多的iic的库函数,比如
hal_i2c_master_transmit(i2c_handletypedef *hi2c, uint16_t devaddress, uint8_t *pdata, uint16_t size, uint32_t timeout)hal_i2c_master_receive(i2c_handletypedef *hi2c, uint16_t devaddress, uint8_t *pdata, uint16_t size, uint32_t timeout)hal_i2c_master_transmit_it(i2c_handletypedef *hi2c, uint16_t devaddress, uint8_t *pdata, uint16_t size)hal_i2c_master_receive_it(i2c_handletypedef *hi2c, uint16_t devaddress, uint8_t *pdata, uint16_t size);hal_i2c_master_transmit_dma(i2c_handletypedef *hi2c, uint16_t devaddress, uint8_t *pdata, uint16_t size);hal_i2c_master_receive_dma(i2c_handletypedef *hi2c, uint16_t devaddress, uint8_t *pdata, uint16_t size)等这些函数参数需要使用发送的器件地址,数据地址和数据长度。具体的器件地址需要查询数据手册。很多原理图会标记出器件的地址(七位地址),如果不看手册,直接使用此地址进行读写的话往往是不行的。
这里的地址一般使用的是八位地址,iic的器件手册给的一般是七位地址比如下两个图的a2a1a0如果全都为0,七位地址就是1110000=0x70;
但是根据读写要将此地址左移一位,然后最低位赋值0或者1。此例子中,读地址为11100001=0xe1;
写地址为11100000=0xe0。使用库函数的时候要使用这两个地址,不要直接使用0x70这个地址。
以此地址为例可以进行如下读写。
写:hal_i2c_master_transmit_it(&hi2c1,0xe0, pointer_register,1);while (hal_i2c_getstate(&hi2c1) != hal_i2c_state_ready){ ;}读:hal_i2c_master_receive_it(&hi2c1, 0xe1, pdata,1);while (hal_i2c_getstate(&hi2c1) != hal_i2c_state_ready){ ;}
骨传导耳机南卡runner pro与韶音as800全面对比,哪一款更具性价比呢?
哪些因素会影响服务器机柜的正常工作
FORESEE XP2000 PCIe 4.0 SSD多重加密功能,锁定数据安全
HAMR硬盘并不高大上!未来会覆盖中低容量
变压器电压不稳应该加装无功补偿设备吗
STM32的IIC库函数使用误区
如何比较市场上不同品牌的安全光幕安全光栅?
区块链技术能否解决DeFi领域面临的一些问题
复杂约束下自动驾驶车辆的运动规划解析
华为p10与小米6哪个更值得入手?华为p10与小米6对比评测:谁最性能怪兽
ROG游戏手机体验 怎样的手机才能称得上游戏手机
财付通24小时人工客服电话是多少
国产内存进展缓慢,打破DRAM的价格垄断还有待期望
海湾国家巴林将使用华为技术推出5G商用网络
蓝牙耳机国产品牌什么的好,蓝牙耳机国产排行榜
什么是星形和三角形接法 三角形接法和星形接法的电压电流
WiTricity与高通Halo的整合将推动无线充电的发展
台积电3nm官宣量产 扩产同日提上议程 能否为半导体注入强心针?
陈肇雄:5G技术是实现万物互联的关键信息基础设施
先进封装中铜-铜低温键合技术研究进展