用stm32 cubemx默认配置i2c1和urart1,本例子是用硬件i2c非模拟i2c

  /* I2C1 GPIO Configuration    PB6     ------> I2C1_SCLPB7     ------> I2C1_SDA * USART1 GPIO Configuration    PA9     ------> USART1_TXPA10     ------> USART1_RX */


在main.c修改如下
温度读取流程:
1.STM32向TMP1117发送一个写命令HAL_I2C_Master_Transmit,其中包含TMP117中温度寄存器的地址(地址0x00)的1个字节。
2.使用读取命令HAL_I2C_Master_Receive从 TMP117 读取 2 个字节。这 2 个字节将包含温度数据。

/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include <stdio.h>
#include <string.h>
/* USER CODE END Includes *//* Private variables ---------------------------------------------------------*/
I2C_HandleTypeDef hi2c1;
UART_HandleTypeDef huart1;
uint16_t count = 0;
/* USER CODE BEGIN PV */
static const uint8_t TMP117_ADDR = 0x48 << 1;  // Use 8-bit address
//I2C从机的地址最低为是读写标志位,1表示读,0表示写,剩下七位表示从机地址
static const uint8_t REG_TEMP = 0x00;
/* USER CODE END PV *//* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
int fputc(int ch ,FILE *f)
{HAL_UART_Transmit(&huart1,(uint8_t *)&ch,1,0xffff);return ch;
}
/* USER CODE END 0 */int main(void)
{/* USER CODE BEGIN 1 */HAL_StatusTypeDef ret;uint8_t buf[12];int16_t val;float temp_c;/* USER CODE END 1 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){// Tell TMP117 that we want to read from the temperature registerbuf[0] = REG_TEMP;ret = HAL_I2C_Master_Transmit(&hi2c1, TMP117_ADDR, buf, 1, HAL_MAX_DELAY);//buf为数组,同函数&可省略。if ( ret != HAL_OK ) {strcpy((char*)buf, "Error Tx\r\n");} else {// Read 2 bytes from the temperature registerret = HAL_I2C_Master_Receive(&hi2c1, TMP117_ADDR, &buf[0], 2, HAL_MAX_DELAY);if ( ret != HAL_OK ) {strcpy((char*)buf, "Error Rx\r\n");} else {//Combine the bytesval = ((int16_t)buf[0] << 8)| buf[1];// Convert to float temperature value (Celsius)temp_c = val * 0.0078125;printf("%d---Temp: %0.3f\r\n", count++, temp_c);}}// Send out buffer (temperature or error message)HAL_UART_Transmit(&huart1, buf, strlen((char*)buf), HAL_MAX_DELAY);// WaitHAL_Delay(1000);/* USER CODE END WHILE *//* USER CODE BEGIN 3 */}/* USER CODE END 3 */
}

/*I2C写数据的函数*/HAL_I2C_Master_Transmit(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t Timeout);/*
I2C_HandleTypeDef *hi2c :就是设置的实例,比如I2C1 &hi2c1
uint16_t DevAddress : 从机设备地址,比如0x48
uint8_t *pData :存放你要写的数据
uint16_t Size :数据的大小
uint32_t Timeout :最大的传输时间
例如
HAL_I2C_Master_Transmit(&hi2c1,0xA1,(uint8_t*)TxData,2,1000)
*/
/*I2C读数据的函数*/
HAL_I2C_Master_Receive(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t Timeout);
/*
I2C_HandleTypeDef *hi2c :就是设置的实例,比如I2C1 &hi2c1
uint16_t DevAddress : 从机设备地址,比如0x48
uint8_t *pData :存放你要读的数据
uint16_t Size :数据的大小
uint32_t Timeout :最大的传输时间
*/
void HAL_IIC_WriteByte_ToSlave(uint8_t I2C_Command)
{//  uint8_t  *pData;
//  pData = &I2C_Command;HAL_I2C_Mem_Write(&hi2c1, TMP117_ADDR, reg, I2C_MEMADD_SIZE_8BIT, &I2C_Command, 1, 100);
}
void HALIIC_ReadByte_FromSlave(uint8_t *RXbuf)
{HAL_I2C_Mem_Read(&hi2c1, TMP117_ADDR, reg, I2C_MEMADD_SIZE_8BIT, RXbuf, 1, 100);
}

STM32cube HAL库两条命令实现i2c通信---Nucleo L476RG用I2C实现tmp117模块温度读取并串口打印相关推荐

  1. 两条命令让你的git轻松自动变基,学到了!

    大厂技术  高级前端  Node进阶 点击上方 程序员成长指北,关注公众号 回复1,加入高级Node交流群 作者:张京 链接:https://segmentfault.com/a/1190000040 ...

  2. stm32cube,hal库来实现PS2手柄数据发送

    stm32cube,hal库来实现PS2手柄数据发送 很久前买了个PS2的手柄,如下,之前 以前不会使用cube来配置工程,导致写程序很麻烦,对我这样的新手很不友好,看卖家提供的程序也很麻烦,拉高拉低 ...

  3. 两条命令解决移动硬盘无法弹出的问题

    自从 Windows 10 更新到 20H2 版本后,几乎每次弹出移动硬盘都要碰到 "正在使用中" 无法弹出的问题,一般基于闪存的优盘直接狠心拔了完事,但是基于传统机械结构的移动硬 ...

  4. 两条命令解决移动硬盘无法弹出的问题(转载 )

    转载自 两条命令解决移动硬盘无法弹出的问题 | 呉真的博客 自从 Windows 10 更新到 20H2 版本后,几乎每次弹出移动硬盘都要碰到 "正在使用中" 无法弹出的问题,一般 ...

  5. 两条命令!Win7本本变无线基站

    http://www.myhack58.com/Article/54/93/2010/28567.htm 两条命令!Win7本本变无线基站 来源:本站转载 作者:佚名 时间:2010-12-14 14 ...

  6. linux shell两条命令,Linux最常用的18个Shell命令

    有些人仍然会有这中愚蠢的想法,他们认为使用Linux就必须使用Linux shell命令.胡说!你可以不懂得任何Linux命令,比如说ps,grep,ls等,但是你仍然可以使用很多现代的Linux桌面 ...

  7. windows 两条命令快速关闭 445等危险端口

    最近,计算机总是显示下图的这种威胁 应该是有黑客通过端口扫描进行网络攻击. 所以关闭不必要的端口非常重要. 常用端口介绍:如何防止黑客通过端口扫描进行网络攻击? 下面介绍如何快速关闭指定端口: 1. ...

  8. 两条命令快速关闭windows 445端口

    windows 中,搜索 cmd ,然后以管理员身份运行 cmd 然后按顺序执行以下两段命令: netsh advfirewall set allprofile state onnetsh advfi ...

  9. dos 一行两条命令

    为什么80%的码农都做不了架构师?>>>    1. 命令1 & 命令2 2. 命令1 && 命令2 这两种区别是第1种无论命令1是否执行成功都执行命令2, ...

最新文章

  1. 2020考研 统考英语 核心词汇:社会生活(1)(苗嘉)
  2. [译]从零开始成为数据科学家的9个步骤
  3. OpenFeign的9个坑,每个都能让你的系统奔溃 OpenFeign
  4. 从零开始学python电子书-从零开始学Python程序设计 PDF
  5. leetcode算法题--两数相加 II
  6. R语言--查看数据类型+类型判断
  7. Java 实现日期 Date 的赋值
  8. 计算机网络-基本概念(2)【网络层】-网际控制报文协议ICMP
  9. 阿里云云效技术专家:一文详解kubernetes下5种常见发布模式如何选择
  10. 目前可能最快的下载百度网盘文件的方法(aria2下载)
  11. 自定义异常最佳实践_播放,自定义和组织媒体的最佳文章
  12. 为什么嫁人就选程序员!
  13. vue之ele中的table组件(复选框的回显和重置)
  14. arcgis for android(二)显示二维地图
  15. 关于iPhone出现白苹果黑屏现象的修复方法
  16. renren-generator:运行报错java: 找不到符号 符号: 类 Longblob
  17. 针对前端初级学者,如何在windows下搭建react-native环境详细教程
  18. STM32CubeMX+SPI+FATFS读写SD卡
  19. 【庖丁解牛】从零实现FCOS(二):ground truth分配与loss计算
  20. 表格式计算机教案模板,教案的表格格式_教案的表格模板

热门文章

  1. python版植物大战僵尸源码_基于python的植物大战僵尸游戏设计与实现.docx
  2. Zigbee——协调器组建网络
  3. 5G NR学习理解系列——时频结构及相关概念
  4. 红米note4x Android7,红米Note4X能升级安卓7.0吗?红米Note4X如何升级Android7.0?
  5. 6款最好的免费在线二维码生成器
  6. Python 实现 周志华 《机器学习》 BP算法
  7. 【python pypy】pypy安装
  8. Python安装第三方库方法教程
  9. 似然估计 Hessain Fisher Information
  10. IDEA中新导入的项目找不到maven project解决办法