I2C(Inter-Integrated Circuit)是一种串行通信协议,广泛用于微控制器和各种外围设备之间的通信。STM32 HAL库提供了丰富的API函数,用于配置和控制I2C通信。 2. 阐述STM32作为I2C从设备(Slave)的基本概念和用途 在I2C通信中,设备分为两类:主设备(Master)和从设备(Slave)。主设备负责发起通信并产生时钟信号,而从设备...
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(); 我这里因为只是做两个STM32间的单向...
HAL_I2C_Slave_Transmit: 这个函数用于从机设备向主机设备发送数据。从机设备被动地等待主机设备的请求,...
使用HAL_I2C_Mem_Write等于先使用HAL_I2C_Master_Transmit传输第一个寄存器地址,再用HAL_I2C_Master_Transmit传输写入第一个寄存器的数据。可以传输多个数据 代码语言:javascript 代码运行次数:0 运行 AI代码解释 voidSingle_WriteI2C(uint8_t REG_Address,uint8_t REG_data){uint8_t TxData[2]={REG_Address,RE...
继续翻手册可以发现I2C2->CR1寄存器下还有一个很重要的位,I2C2->CR1[8] 代码中加入I2C2->CR1 |= 1 << 9;发现可以正常运行了,可能也是碰巧 HAL_I2C_Slave_Receive(&hi2c2, inquire,2,500);if(inquire[0] ==0xaa&& inquire[1] ==0x55){//查询到主机发送的查询码?inquire[0] =0; inquire[1] ...
HAL_I2C_Init(&hi2c1); 3. 通信流程 轮询方式访问从机 // 向从机1(地址0x50)写入数据 uint8_t slave1_addr = 0x50 << 1; // 左移1位(HAL库要求) uint8_t data_to_send[] = {0x01, 0x02}; HAL_I2C_Master_Transmit(&hi2c1, slave1_addr, data_to_send, 2, 100); ...
if (HAL_I2C_Mem_Read(&hi2c1, SLAVE_ADDRESS << 1, REGISTER_ADDRESS, I2C_MEMADD_SIZE_8BIT, &data_read, 1, 100) != HAL_OK) { Error_Handler(); } (四)主函数示例 int main(void) { HAL_Init(); MX_I2C1_Init(); while (1) ...
测试例程:定义一个256字节的buffer用来存放I2C从机的数据,默认赋初值0-255,然后通过中断的方式实现I2C数据读写。 示例代码如下: #include "stm32f10x.h" #include "stm32f10x_gpio.h" #include "stm32f10x_rcc.h" #include "stm32f10x_i2c.h" #include "misc.h" #define I2CSLAVE_ADDR 0x40 << 1...
void HAL_I2C_SlaveRxCpltCallback(I2C_HandleTypeDef *hi2c) { // 处理接收到的数据(rx_buffer) } 从机发送数据(主机读操作) // 启动从机发送(中断方式) HAL_I2C_Slave_Transmit_IT(&hi2c1, tx_buffer, buffer_size); // 中断回调函数(数据发送完成) ...