小实战项目-第二章2.3软件IIC 硬件IIC讲解 STM32 IIC通讯协议讲解

2024-08-28 17:52

本文主要是介绍小实战项目-第二章2.3软件IIC 硬件IIC讲解 STM32 IIC通讯协议讲解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这篇章我们说明硬件IIC,软件IIC和相关基础知识在这文章里面
添加链接描述
https://blog.csdn.net/qq_46187594/article/details/141642801

2.3-硬件I2C

我们还使用第0章的工程

初始化硬件IIC

在这里插入图片描述

设置串口,方便输出调试

在这里插入图片描述

重映射

在这里插入图片描述

/**
* @brief 重定向printf (重定向fputc),使用时候记得勾选上魔法棒->Target->UseMicro LIB 可能需要在C文件加typedef struct __FILE FILE;包含这个文件#include "stdio.h"
* @param 
* @return 
*/
int fputc(int ch,FILE *stream)
{HAL_UART_Transmit(&huart1,( uint8_t *)&ch,1,0xFFFF);return ch;
}

不要忘记

在这里插入图片描述

我们先测试一下发送函数

在这里插入图片描述

#include "MyApp.h"//#define GY30	0XB8
#define GY30	0X46
//ADDR接高地址为OxB8(1011100)然后写就是最后一位0 就是0xB8 如果读就最后一位1 就是0xB9
//ADDR接低地址为0x46(0100011)然后写操作最后一位是0 就是0x46 如果是读最后一位1 就是0x47
/* Private variables----------------------------------------------------------*//* Public variables-----------------------------------------------------------*/
uint8_t DATA[2];
/* Private function prototypes------------------------------------------------*/ 
/*******************
*  @brief  写一个Byte
*  @param  
*  @return  
*
*******************/
void GY30_Write_Byte(uint8_t Byte)
{HAL_I2C_Master_Transmit(&hi2c1,GY30,&Byte,1,1000);
}

波形如图没有问题

在这里插入图片描述

然后我们写读取数据的函数

/*******************
*  @brief  读光照数据
*  @param  
*  @return  
*
*******************/
void GY30_Read_Byte(void)
{HAL_I2C_Master_Receive(&hi2c1, GY30|0x01,DATA, 2,1000);
}

在这里插入图片描述

然后我们看一下主函数

	GY30_Write_Byte(0x01);GY30_Write_Byte(0x10);HAL_Delay(120);//延时GY30_Read_Byte();printf("数值:%d\r\n%d\r\n",DATA[0],DATA[1]);HAL_Delay(200);HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);

然后上面就实现了硬件IIC对数据的采集功能

我们看一下波形,注意这个传感器的ADDR是接低电平的

在这里插入图片描述

然后这样就是结束了。

总结一下:HAL的IIC还是非常好用的,他们封装好了,IIC的基本通信过程

比如:

HAL_I2C_Master_Transmit(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t Timeout)

这个是单片机作为主机的时候,单片机发送一个或者多个字节。

I2C_HandleTypeDef *hi2c :选择要使用的IIC

DevAddress:从设备地址

pData:要发送的数据地址

Size:要发送数据的字节数

Timeout:超时等待时间

调用该函数就会自动发送,而且也会把读写位自动置位,什么起始信号,终止信号都在函数内部已经实现

这是波形

在这里插入图片描述

下面这个是读数据

HAL_I2C_Master_Receive(&hi2c1, GY30|0x01,DATA, 2,1000);

&hi2c1:要读的设备地址。

GY30|0x01:从设备地址,这里|0x01 或0X01 是为了置为读数据位。

DATA:读出的数据存哪里,这是存储地址。

2:这是读的个数。

1000:超时等待时间。

在这里插入图片描述

这篇关于小实战项目-第二章2.3软件IIC 硬件IIC讲解 STM32 IIC通讯协议讲解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1115467

相关文章

SpringBoot项目中报错The field screenShot exceeds its maximum permitted size of 1048576 bytes.的问题及解决

《SpringBoot项目中报错ThefieldscreenShotexceedsitsmaximumpermittedsizeof1048576bytes.的问题及解决》这篇文章... 目录项目场景问题描述原因分析解决方案总结项目场景javascript提示:项目相关背景:项目场景:基于Spring

Python Transformers库(NLP处理库)案例代码讲解

《PythonTransformers库(NLP处理库)案例代码讲解》本文介绍transformers库的全面讲解,包含基础知识、高级用法、案例代码及学习路径,内容经过组织,适合不同阶段的学习者,对... 目录一、基础知识1. Transformers 库简介2. 安装与环境配置3. 快速上手示例二、核心模

解决Maven项目idea找不到本地仓库jar包问题以及使用mvn install:install-file

《解决Maven项目idea找不到本地仓库jar包问题以及使用mvninstall:install-file》:本文主要介绍解决Maven项目idea找不到本地仓库jar包问题以及使用mvnin... 目录Maven项目idea找不到本地仓库jar包以及使用mvn install:install-file基

springboot项目如何开启https服务

《springboot项目如何开启https服务》:本文主要介绍springboot项目如何开启https服务方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录springboot项目开启https服务1. 生成SSL证书密钥库使用keytool生成自签名证书将

Linux下如何使用C++获取硬件信息

《Linux下如何使用C++获取硬件信息》这篇文章主要为大家详细介绍了如何使用C++实现获取CPU,主板,磁盘,BIOS信息等硬件信息,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录方法获取CPU信息:读取"/proc/cpuinfo"文件获取磁盘信息:读取"/proc/diskstats"文

将Java项目提交到云服务器的流程步骤

《将Java项目提交到云服务器的流程步骤》所谓将项目提交到云服务器即将你的项目打成一个jar包然后提交到云服务器即可,因此我们需要准备服务器环境为:Linux+JDK+MariDB(MySQL)+Gi... 目录1. 安装 jdk1.1 查看 jdk 版本1.2 下载 jdk2. 安装 mariadb(my

Python列表去重的4种核心方法与实战指南详解

《Python列表去重的4种核心方法与实战指南详解》在Python开发中,处理列表数据时经常需要去除重复元素,本文将详细介绍4种最实用的列表去重方法,有需要的小伙伴可以根据自己的需要进行选择... 目录方法1:集合(set)去重法(最快速)方法2:顺序遍历法(保持顺序)方法3:副本删除法(原地修改)方法4:

在Spring Boot中浅尝内存泄漏的实战记录

《在SpringBoot中浅尝内存泄漏的实战记录》本文给大家分享在SpringBoot中浅尝内存泄漏的实战记录,结合实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录使用静态集合持有对象引用,阻止GC回收关键点:可执行代码:验证:1,运行程序(启动时添加JVM参数限制堆大小):2,访问 htt

Node.js 数据库 CRUD 项目示例详解(完美解决方案)

《Node.js数据库CRUD项目示例详解(完美解决方案)》:本文主要介绍Node.js数据库CRUD项目示例详解(完美解决方案),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考... 目录项目结构1. 初始化项目2. 配置数据库连接 (config/db.js)3. 创建模型 (models/

springboot项目中常用的工具类和api详解

《springboot项目中常用的工具类和api详解》在SpringBoot项目中,开发者通常会依赖一些工具类和API来简化开发、提高效率,以下是一些常用的工具类及其典型应用场景,涵盖Spring原生... 目录1. Spring Framework 自带工具类(1) StringUtils(2) Coll