STM32cube HAL库两条命令实现i2c通信---Nucleo L476RG用I2C实现tmp117模块温度读取并串口打印
用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模块温度读取并串口打印相关推荐
- 两条命令让你的git轻松自动变基,学到了!
大厂技术 高级前端 Node进阶 点击上方 程序员成长指北,关注公众号 回复1,加入高级Node交流群 作者:张京 链接:https://segmentfault.com/a/1190000040 ...
- stm32cube,hal库来实现PS2手柄数据发送
stm32cube,hal库来实现PS2手柄数据发送 很久前买了个PS2的手柄,如下,之前 以前不会使用cube来配置工程,导致写程序很麻烦,对我这样的新手很不友好,看卖家提供的程序也很麻烦,拉高拉低 ...
- 两条命令解决移动硬盘无法弹出的问题
自从 Windows 10 更新到 20H2 版本后,几乎每次弹出移动硬盘都要碰到 "正在使用中" 无法弹出的问题,一般基于闪存的优盘直接狠心拔了完事,但是基于传统机械结构的移动硬 ...
- 两条命令解决移动硬盘无法弹出的问题(转载 )
转载自 两条命令解决移动硬盘无法弹出的问题 | 呉真的博客 自从 Windows 10 更新到 20H2 版本后,几乎每次弹出移动硬盘都要碰到 "正在使用中" 无法弹出的问题,一般 ...
- 两条命令!Win7本本变无线基站
http://www.myhack58.com/Article/54/93/2010/28567.htm 两条命令!Win7本本变无线基站 来源:本站转载 作者:佚名 时间:2010-12-14 14 ...
- linux shell两条命令,Linux最常用的18个Shell命令
有些人仍然会有这中愚蠢的想法,他们认为使用Linux就必须使用Linux shell命令.胡说!你可以不懂得任何Linux命令,比如说ps,grep,ls等,但是你仍然可以使用很多现代的Linux桌面 ...
- windows 两条命令快速关闭 445等危险端口
最近,计算机总是显示下图的这种威胁 应该是有黑客通过端口扫描进行网络攻击. 所以关闭不必要的端口非常重要. 常用端口介绍:如何防止黑客通过端口扫描进行网络攻击? 下面介绍如何快速关闭指定端口: 1. ...
- 两条命令快速关闭windows 445端口
windows 中,搜索 cmd ,然后以管理员身份运行 cmd 然后按顺序执行以下两段命令: netsh advfirewall set allprofile state onnetsh advfi ...
- dos 一行两条命令
为什么80%的码农都做不了架构师?>>> 1. 命令1 & 命令2 2. 命令1 && 命令2 这两种区别是第1种无论命令1是否执行成功都执行命令2, ...
最新文章
- 2020考研 统考英语 核心词汇:社会生活(1)(苗嘉)
- [译]从零开始成为数据科学家的9个步骤
- OpenFeign的9个坑,每个都能让你的系统奔溃 OpenFeign
- 从零开始学python电子书-从零开始学Python程序设计 PDF
- leetcode算法题--两数相加 II
- R语言--查看数据类型+类型判断
- Java 实现日期 Date 的赋值
- 计算机网络-基本概念(2)【网络层】-网际控制报文协议ICMP
- 阿里云云效技术专家:一文详解kubernetes下5种常见发布模式如何选择
- 目前可能最快的下载百度网盘文件的方法(aria2下载)
- 自定义异常最佳实践_播放,自定义和组织媒体的最佳文章
- 为什么嫁人就选程序员!
- vue之ele中的table组件(复选框的回显和重置)
- arcgis for android(二)显示二维地图
- 关于iPhone出现白苹果黑屏现象的修复方法
- renren-generator:运行报错java: 找不到符号 符号: 类 Longblob
- 针对前端初级学者,如何在windows下搭建react-native环境详细教程
- STM32CubeMX+SPI+FATFS读写SD卡
- 【庖丁解牛】从零实现FCOS(二):ground truth分配与loss计算
- 表格式计算机教案模板,教案的表格格式_教案的表格模板
热门文章
- python版植物大战僵尸源码_基于python的植物大战僵尸游戏设计与实现.docx
- Zigbee——协调器组建网络
- 5G NR学习理解系列——时频结构及相关概念
- 红米note4x Android7,红米Note4X能升级安卓7.0吗?红米Note4X如何升级Android7.0?
- 6款最好的免费在线二维码生成器
- Python 实现 周志华 《机器学习》 BP算法
- 【python pypy】pypy安装
- Python安装第三方库方法教程
- 似然估计 Hessain Fisher Information
- IDEA中新导入的项目找不到maven project解决办法