小实战项目-第二章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

相关文章

Python使用国内镜像加速pip安装的方法讲解

《Python使用国内镜像加速pip安装的方法讲解》在Python开发中,pip是一个非常重要的工具,用于安装和管理Python的第三方库,然而,在国内使用pip安装依赖时,往往会因为网络问题而导致速... 目录一、pip 工具简介1. 什么是 pip?2. 什么是 -i 参数?二、国内镜像源的选择三、如何

部署Vue项目到服务器后404错误的原因及解决方案

《部署Vue项目到服务器后404错误的原因及解决方案》文章介绍了Vue项目部署步骤以及404错误的解决方案,部署步骤包括构建项目、上传文件、配置Web服务器、重启Nginx和访问域名,404错误通常是... 目录一、vue项目部署步骤二、404错误原因及解决方案错误场景原因分析解决方案一、Vue项目部署步骤

使用 sql-research-assistant进行 SQL 数据库研究的实战指南(代码实现演示)

《使用sql-research-assistant进行SQL数据库研究的实战指南(代码实现演示)》本文介绍了sql-research-assistant工具,该工具基于LangChain框架,集... 目录技术背景介绍核心原理解析代码实现演示安装和配置项目集成LangSmith 配置(可选)启动服务应用场景

golang内存对齐的项目实践

《golang内存对齐的项目实践》本文主要介绍了golang内存对齐的项目实践,内存对齐不仅有助于提高内存访问效率,还确保了与硬件接口的兼容性,是Go语言编程中不可忽视的重要优化手段,下面就来介绍一下... 目录一、结构体中的字段顺序与内存对齐二、内存对齐的原理与规则三、调整结构体字段顺序优化内存对齐四、内

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型的操作流程

《0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeekR1模型的操作流程》DeepSeekR1模型凭借其强大的自然语言处理能力,在未来具有广阔的应用前景,有望在多个领域发... 目录0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型,3步搞定一个应

Python itertools中accumulate函数用法及使用运用详细讲解

《Pythonitertools中accumulate函数用法及使用运用详细讲解》:本文主要介绍Python的itertools库中的accumulate函数,该函数可以计算累积和或通过指定函数... 目录1.1前言:1.2定义:1.3衍生用法:1.3Leetcode的实际运用:总结 1.1前言:本文将详

配置springboot项目动静分离打包分离lib方式

《配置springboot项目动静分离打包分离lib方式》本文介绍了如何将SpringBoot工程中的静态资源和配置文件分离出来,以减少jar包大小,方便修改配置文件,通过在jar包同级目录创建co... 目录前言1、分离配置文件原理2、pom文件配置3、使用package命令打包4、总结前言默认情况下,

在Java中使用ModelMapper简化Shapefile属性转JavaBean实战过程

《在Java中使用ModelMapper简化Shapefile属性转JavaBean实战过程》本文介绍了在Java中使用ModelMapper库简化Shapefile属性转JavaBean的过程,对比... 目录前言一、原始的处理办法1、使用Set方法来转换2、使用构造方法转换二、基于ModelMapper

Java实战之自助进行多张图片合成拼接

《Java实战之自助进行多张图片合成拼接》在当今数字化时代,图像处理技术在各个领域都发挥着至关重要的作用,本文为大家详细介绍了如何使用Java实现多张图片合成拼接,需要的可以了解下... 目录前言一、图片合成需求描述二、图片合成设计与实现1、编程语言2、基础数据准备3、图片合成流程4、图片合成实现三、总结前

python实现简易SSL的项目实践

《python实现简易SSL的项目实践》本文主要介绍了python实现简易SSL的项目实践,包括CA.py、server.py和client.py三个模块,文中通过示例代码介绍的非常详细,对大家的学习... 目录运行环境运行前准备程序实现与流程说明运行截图代码CA.pyclient.pyserver.py参