很好用的STM32L0 HAL 库写 I2C通信

作为一个资深51玩家,现在要玩低功耗,不得不转移到STM32L0系列。

看看L0的资料就够头大的,一长串不熟悉的函数命名,各种初始化操作,头疼欲裂,怀念51的直接寄存器读写操作。

再有牢骚,还是得把工作干了,谁叫咱要挣钱养家呢?

项目需要对SHT3X系列温湿度传感器进行读写,必须用I2C通信,你在网上搜一下,几乎全是对STM32 I2C的抱怨,全是说厂家的软硬件有BUG,最好采样模拟I2C方式。

花了两天时间搜搜,模拟I2C显然不适合我学习STM32的初衷,于是看看这个BUG究竟是什么?

搜到微雪课堂的一篇文章:

STM32CubeMX系列教程9:内部集成电路(I2C) - STM32CubeMX系列教程 微雪课堂 http://www.waveshare.net/study/article-648-1.html

正文一般般,倒是留言说明了解决BUG的办法:

1. IIC的回调函数里面需要将时钟初始化放在引脚初始化之前
  /* USER CODE BEGIN I2C1_MspInit 0 */
    __HAL_RCC_I2C1_CLK_ENABLE(); //默认生成的放在了引脚初始化后面!
  /* USER CODE END I2C1_MspInit 0 */

看到这个,信心大增,立马用STM32CubeMX 配置了我的板子(STM32L053C8T6),然后生产工程和代码。

接下来,修改stm32l0xx_hal_msp.c 中I2C的初始化代码,把时钟初始化放在引脚初始化之前,

最后用两个函数操作I2C读写:

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);

编译通过,连上SHT3X,一次成功!!!

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值