1 硬件连接 测试芯片:STM32F103ZET6 测试方法:用一个USB转I2C的工具接到STM32的I2C引脚上,通过上位机工具进行读写操作。如果没有这个工具,也可以用另外一个stm32或者其他设备测试通讯,同时也可以借助示波器或者逻辑分析仪来辅助调试。 硬件连接: STM32这边使用硬件I2C1(PB6、PB7),并外接上拉电阻。 2 软件编程...
一般来说HAL库的通信io类API分为polling阻塞,IT和DMA方式。而I2C分主从模式,不同I2C器件有不同的协议细节,在此基础还要向上支持SMBus/PMBus等协议,导致API冗杂。API大概可以按以下方式组合: 【主机/从机】-【序列】-【阻塞/中断/DMA】-【收/发】 其中主机模式特有【内存存取】模式 例如: HAL_I2C_Master_Trans...
}voidHAL_I2C_MemTxCpltCallback(I2C_HandleTypeDef *hi2c){ writeCplt =1; } 三、DMA模式 DMA mode IO MEM 使用DMA模式前,需要对DMA进行配置,这种模式下,也是要使用一定的时间来进行等待I2C的操作(I2C进行设置地址及读数据前操作,接收数据的时候,直接使用DMA记录)。 操作完成后,会在回调函数进行确认,跟中断...
I2C模块的使用方法(上) 6405 9 8:16 App [STM32 HAL库][定时器]输入捕获,最佳教程,没有之一~ 9114 13 6:19 App [STM32 HAL库][GPIO]按钮实验,最佳教程,没有之一~ 1万 5 3:38 App [STM32 HAL库][GPIO]IO最大输出速度,最佳教程,没有之一~ 4万 10 6:08:53 App 基于HAL库的开发(基于...
HAL_I2C_Slave_Receive();//STM32 从机机接收,不需要用到寄存器地址 HAL_I2C_Slave_Transmit();//STM32 从机机发送,不需要用到寄存器地址 HAL_I2C_Slave_Receive_IT(); HAL_I2C_Slave_Receive_DMA(); HAL_I2C_Slave_Transmit_IT(); HAL_I2C_Slave_Transmit_DMA(); ...
I2C中断打开event中断 配置I2C的DMA 【用来和上位机通信的UART配置,不需要的话可以不管】 这里实现的是烂大街的空闲中断接收任意长度的UART UART配置 打开中断(用于实现任意长度接收) 配置UART的DMA STM32代码部分: 包含stdio.h 定义接收用的相关变量 重定向printf到UART(不向上位机输出可以不定义) ...
登录后复制HAL_StatusTypeDefHAL_I2C_Master_Receive(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t Timeout) DevAddress:7bit从机地址左移 + 1bit 1 pData:存储读到的数据,数据仍然是大端模式,即第一个接收的数据存在pData[0],第二个存在pData[1],第三...
I2cHandle.Init.OwnAddress2 = 0xFE; 其中如前面介绍,I2C有两种地址方式,在这里I2C_ADDRESSINGMODE_7BIT是将I2C设置为7为从机地址模式。OwnAddress1为本设备I2C地址即我们自己设置的从机地址,OwnAddress2不需要设置。 2、I2C引脚与中断初始化 void HAL_I2C_MspInit(I2C_HandleTypeDef *hi2c) ...
之后 SDA 卡在低电平并且 HAL_BUSY 在连续的 I2C 读取时返回。我可以重现此问题,同时强调 I2C 读取...
上一节课是IIC的轮询模式与AHT20模块通信采集温湿度, 主机使用HAL_I2C_Master_Transmit发送采集温湿度命令,命令有四字节,第一字节为地址,后三字节为采集命令。每发出一个字节,从机返回一次ack确认。 随后,主机使用HAL_I2C_Master_Receive请求温湿度数据,请求指令中只有从机地址,不能携带数据,地址末尾置1,然后从机...