Вс ноя 06, 2022 19:33:03
#include <Arduino.h>
#include <Wire.h>
void setup() {
Wire.begin(D1, D2); /* join i2c bus with SDA=D1 and SCL=D2 of NodeMCU */
}
void loop() {
Wire.beginTransmission(0x08); /* begin with device address 8 */
Wire.write("Hello STM32"); /* sends hello string */
Wire.endTransmission(); /* stop transmitting */
delay(1000);
}
#include "main.h"
#include "i2c.h"
#include "gpio.h"
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_I2C1_Init();
uint8_t buf[32];
while (1) {
HAL_I2C_Slave_Receive(&hi2c1, buf, 11, 5000);
}
HAL_I2C_Slave_Receive(&hi2c1, buf, 11, 5000);
HAL_I2C_Slave_Receive_IT(&hi2c1, buf, 11);
while (HAL_I2C_GetState(&hi2c1) != HAL_I2C_STATE_LISTEN);
Вс ноя 06, 2022 19:54:35
// Где-то в настройках:
HAL_I2C_EnableListen_IT(...) - включить в принципе прерывания
// В месте, где определены обработчики событий
void HAL_I2C_AddrCallback(I2C_HandleTypeDef *hi2c, uint8_t TransferDirection, uint16_t AddrMatchCode)
{
// Прилетел адрес ведомого, здесь уже можно вызывать HAL_I2C_Slave_Seq_Receive_IT
}
Вс ноя 06, 2022 20:21:57
void HAL_I2C_AddrCallback(I2C_HandleTypeDef *hi2c, uint8_t TransferDirection, uint16_t AddrMatchCode) {
// Прилетел адрес ведомого, здесь уже можно вызывать HAL_I2C_Slave_Seq_Receive_IT
uint8_t buf[32];
HAL_I2C_Slave_Seq_Receive_IT( &hi2c1, buf, 11, I2C_FIRST_FRAME);
}
int main(void) {
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_I2C1_Init();
HAL_I2C_EnableListen_IT(&hi2c1);
while (1) {
}
}
Пн ноя 07, 2022 21:19:41
void HAL_I2C_AddrCallback(I2C_HandleTypeDef *hi2c, uint8_t TransferDirection, uint16_t AddrMatchCode) {
uint8_t test_buf[] = "Hello ESP-12F";
if (TransferDirection == I2C_DIRECTION_RECEIVE) {
HAL_I2C_Slave_Seq_Transmit_IT(&hi2c1, (uint8_t *) test_buf, 13, I2C_FIRST_AND_LAST_FRAME);
} else {
HAL_I2C_Slave_Seq_Receive_IT(&hi2c1, (uint8_t *) test_buf, 11, I2C_FIRST_AND_LAST_FRAME);
}
}
HAL_I2C_EnableListen_IT(&hi2c1);
while (1) {
if (Xfer_Complete == 1) {
HAL_Delay(1);
HAL_I2C_EnableListen_IT(&hi2c1);
Xfer_Complete = 0;
}
}
extern __IO uint32_t Xfer_Complete;
void HAL_I2C_SlaveRxCpltCallback(I2C_HandleTypeDef *I2cHandle) {
Xfer_Complete = 1;
}
void HAL_I2C_SlaveTxCpltCallback(I2C_HandleTypeDef *I2cHandle) {
Xfer_Complete = 1;
}
void HAL_I2C_SlaveRxCpltCallback(I2C_HandleTypeDef *I2cHandle) {
Xfer_Complete = 1;
HAL_Delay(1);
HAL_I2C_EnableListen_IT(&hi2c1);
}
uint8_t aTxBuffer[32];
uint8_t aRxBuffer[32];
void HAL_I2C_AddrCallback(I2C_HandleTypeDef *hi2c, uint8_t TransferDirection, uint16_t AddrMatchCode) {
uint8_t test_buf[] = "Hello ESP-12F";
if (TransferDirection == I2C_DIRECTION_RECEIVE) {
HAL_I2C_Slave_Seq_Transmit_IT(&hi2c1, (uint8_t *) test_buf, 13, I2C_FIRST_AND_LAST_FRAME);
} else {
HAL_I2C_Slave_Seq_Receive_IT(&hi2c1, (uint8_t *) test_buf, 11, I2C_FIRST_AND_LAST_FRAME);
}
}