赞
踩
主机只要配置速度就行
从机配置相同速度,可以设置第二地址
因为我的板子上面已经有了上拉电阻,所以可以直接通信
int state = 0; static uint8_t I2C_recvBuf[10] = {0}; static uint8_t I2C_sendBuf[10] = {2,1,2,3,4,5,6,7,8,9}; void HAL_I2C_SlaveRxCpltCallback(I2C_HandleTypeDef *hi2c) { HAL_I2C_Slave_Receive_DMA(&hi2c1, I2C_recvBuf, 5); state = 1; } // I2C 干扰检测 void I2C2_ER_IRQHandler(void) { printf("ERROR I2C\r\n"); HAL_I2C_Slave_Receive_DMA(&hi2c1, I2C_recvBuf, 5); HAL_I2C_ER_IRQHandler(&hi2c2); } int main(void) { HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_DMA_Init(); MX_I2C1_Init(); MX_USART1_UART_Init(); MX_I2C2_Init(); printf("hello i2c stm32 \r\n"); HAL_I2C_Slave_Receive_DMA(&hi2c1, I2C_recvBuf, 5); while (1) { // 可以多地址接收数据 HAL_I2C_Master_Transmit_DMA(&hi2c2, (20<<1)|0x01 ,I2C_sendBuf, 5); //HAL_I2C_Master_Transmit_DMA(&hi2c2, (10<<1)|0x01 ,I2C_sendBuf, 5); if(state == 1) { state = 0; for (int i=0; i<4; i++) { printf("[%d]:%d", i, I2C_recvBuf[i]); } I2C_sendBuf[0] = I2C_sendBuf[0] + 1; if(I2C_sendBuf[0] > 100) { I2C_sendBuf[0] = 0; } printf("\r\n"); } HAL_Delay(1000); } }
示例代码下载
https://download.csdn.net/download/hmxm6/89324145
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。