@vladgromch

Как настройть I2C для STM32F103 с использованием регистров?

я соеденил Arduino и Stm32 по шине I2C и когда запускаю простой скетч из примера i2c_scanner ардуино его не находит. что надо сделать чтобы ардуино его увидел?
#include "stm32f1xx.h"

void I2C_Configuration(void) {
    // Включение тактирования I2C1
    RCC->APB1ENR |= RCC_APB1ENR_I2C1EN;

    // Настройка PB6 (SCL) и PB7 (SDA) как альтернативной функции
    GPIOB->CRL &= ~(GPIO_CRL_MODE6 | GPIO_CRL_CNF6 | GPIO_CRL_MODE7 | GPIO_CRL_CNF7);
    GPIOB->CRL |= (GPIO_CRL_MODE6 | GPIO_CRL_MODE7); // Режим выхода 50 МГц
    GPIOB->CRL |= (GPIO_CRL_CNF6_1 | GPIO_CRL_CNF7_1); // Альтернативная функция Open-Drain

    // Настройка скорости передачи данных
    I2C1->CR2 |= (36 << 0); // HSI (8 MHz) делится на 36 -> FREQ = 222 kHz

    // Установка адреса устройства (если STM32F103 является устройством, а не мастером)
    I2C1->OAR1 |= (0x30 << 1); // Адрес устройства = 0x30

    // Включение I2C1
    I2C1->CR1 |= I2C_CR1_PE;
}

int main(void) {
    I2C_Configuration();

    // Далее можно выполнять операции передачи и приема данных по шине I2C
}
  • Вопрос задан
  • 97 просмотров
Пригласить эксперта
Ответы на вопрос 1
@kriptonus
Подтягивающие резисторы на шине I2C установлены?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы