Например TDA7294

Форум РадиоКот • Просмотр темы - STM32F030F4P6 проблемы с шиной I2C.
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Ср июн 18, 2025 03:41:41

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 3 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: STM32F030F4P6 проблемы с шиной I2C.
СообщениеДобавлено: Сб янв 11, 2025 19:03:20 
Нашел транзистор. Понюхал.

Зарегистрирован: Вс мар 27, 2022 09:38:17
Сообщений: 160
Рейтинг сообщения: 0
Добрый день.
Проблемы с шиной I2C.
SDA и SCL всегда в H.
Не выдаёт вообще ничего.
Настройки приложу ниже.
У кого был опыт подскажите пожалуйста в чём может быть проблема или ошибка.
Контролер " STM32F030F4P6"
Спасибо!

void RCC_mk(void){ // Настройки тактирования МК без внешнего кварца 48 мГц.
// ---------- Настройка регистра RCC_CR ----------
// 1)
MODIFY_REG(FLASH->ACR, FLASH_ACR_LATENCY_Msk, 0b010 << FLASH_ACR_LATENCY_Pos); // 1 такт ожидания 48 мГц
SET_BIT(FLASH->ACR, FLASH_ACR_PRFTBE); // Буфер предварительной выборки ВКЛ.
SET_BIT(FLASH->ACR, FLASH_ACR_PRFTBS); // Буфер предварительной выборки ВКЛ.

SET_BIT(RCC->CR, RCC_CR_HSION); // Генератор HSI Вкл.
while(READ_BIT(RCC->CR, RCC_CR_HSIRDY) == RESET); // Ожидание флага готовности тактовой частоты HSI

CLEAR_BIT(RCC->CR, RCC_CR_HSEON); // Выключить HSE ( отсоеденить кварц )
CLEAR_BIT(RCC->CR, RCC_CR_CSSON); // CSS OFF.

// ---------- Настройка регистра RCC_CFRG ----------
// 2)
MODIFY_REG(RCC->CFGR, RCC_CFGR_SW_Msk, 0b10 << RCC_CFGR_SW_Pos); // PLL тактирование MK
MODIFY_REG(RCC->CFGR, RCC_CFGR_SWS_Msk, 0b10 << RCC_CFGR_SWS_Pos); // PLL тактирование MK

MODIFY_REG(RCC->CFGR, RCC_CFGR_HPRE_Msk, 0b0000 << RCC_CFGR_HPRE_Pos); // Шина APB /1
MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE_Msk, 0b000 << RCC_CFGR_PPRE_Pos); // Шина APB1 /1

CLEAR_BIT(RCC->CFGR, RCC_CFGR_PLLSRC); // источник PLL это HSI делённый /2 бит = 0.

MODIFY_REG(RCC->CFGR, RCC_CFGR_PLLMUL_Msk, 0b1010 << RCC_CFGR_PLLMUL_Pos); // Умножитель на 12.

SET_BIT(RCC->CR, RCC_CR_PLLON); // PLL ВКЛ.
while(READ_BIT(RCC->CR, RCC_CR_PLLRDY) == RESET); // Ожидаем готовности PLL
}

void I2C_init(void){ // Настройки шины I2C
SET_BIT(RCC->AHBENR, RCC_AHBENR_GPIOAEN); // Запустим тактирование порта A
SET_BIT(RCC->APB1ENR, RCC_APB1ENR_I2C1EN); // Включччить тактирование I2C
SET_BIT(RCC->CFGR3, RCC_CFGR3_I2C1SW_SYSCLK); // Тактирование шины от SYSCLK 48 мГц. (RCC_CFRG3 регистр)

CLEAR_BIT(I2C1->CR1,I2C_CR1_PE); // Отключить шину
while(READ_BIT(I2C1->CR1, I2C_CR1_PE)); // Ждём пока отключится I2C
SET_BIT(I2C1->CR1, I2C_CR1_ANFOFF); // Аналоговый фильтр OFF
SET_BIT(I2C1->CR1, I2C_CR1_NOSTRETCH); // Растяжение тактов ОТКЛ.
CLEAR_BIT(SYSCFG->CFGR1, SYSCFG_CFGR1_I2C_FMP_PA9); // Обычный режим без Fast+
CLEAR_BIT(SYSCFG->CFGR1, SYSCFG_CFGR1_I2C_FMP_PA10); // Обычный режим без Fast+
SET_BIT(I2C1->CR2, I2C_CR2_AUTOEND); // Автостоп ВКЛ.
// ---------- Настройки порта PA9 I2C ----------
// ---------- SCL ----------
//MODIFY_REG(I2C1->CR1, I2C_CR1_DNF_Msk, 0b0001 << I2C_CR1_DNF_Pos); // Цифровой фильтр ВКЛ.

MODIFY_REG(GPIOA->AFR[4], GPIO_AFRH_AFSEL9_Msk, 0b0100 << GPIO_AFRH_AFSEL9_Pos); // Тактиров.альт.функц. №4
MODIFY_REG(GPIOA->MODER, GPIO_MODER_MODER9_Msk, 0b10 << GPIO_MODER_MODER9_Pos); // Альтернат_функции
SET_BIT(GPIOA->OTYPER, GPIO_OTYPER_OT_9); // В режиме открытый "СТОК"
MODIFY_REG(GPIOA->OSPEEDR, GPIO_OSPEEDR_OSPEEDR9_Msk, 0b11 << GPIO_OSPEEDR_OSPEEDR9_Pos); // Высокая скорость
MODIFY_REG(GPIOA->PUPDR, GPIO_PUPDR_PUPDR9_Msk, 0b01 << GPIO_PUPDR_PUPDR9_Pos); // Резисторы ОТКЛ.

// ---------- Насройки порта PA10 I2C ----------
// ---------- SDA ----------
MODIFY_REG(GPIOA->AFR[4], GPIO_AFRH_AFSEL10_Msk, 0b0100 << GPIO_AFRH_AFSEL10_Pos); // Тактиров.альт.функц. №4
MODIFY_REG(GPIOA->MODER, GPIO_MODER_MODER10_Msk, 0b10 << GPIO_MODER_MODER10_Pos); // Альтернат_функции
SET_BIT(GPIOA->OTYPER, GPIO_OTYPER_OT_10); // В режиме открытый "СТОК"
MODIFY_REG(GPIOA->OSPEEDR, GPIO_OSPEEDR_OSPEEDR10_Msk, 0b11 << GPIO_OSPEEDR_OSPEEDR10_Pos); // Высокая скорость
MODIFY_REG(GPIOA->PUPDR, GPIO_PUPDR_PUPDR10_Msk, 0b01 << GPIO_PUPDR_PUPDR10_Pos); // Резисторы ОТКЛ.
// ---------- Настройки таймингов I2C ----------
I2C1->TIMINGR = (uint32_t)0x20303E5D; // 48MHz 100kHz
SET_BIT(I2C1->CR1,I2C_CR1_PE); // Включить шину
while(READ_BIT(I2C1->CR1, I2C_CR1_PE) == RESET); // Ждём пока включится I2C
}


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32F030F4P6 проблемы с шиной I2C.
СообщениеДобавлено: Сб янв 11, 2025 19:22:28 
Мучитель микросхем

Зарегистрирован: Вт окт 01, 2024 15:22:33
Сообщений: 419
Рейтинг сообщения: 0
Код:
MODIFY_REG(GPIOA->AFR[4], GPIO_AFRH_AFSEL9_Msk, 0b0100 << GPIO_AFRH_AFSEL9_Pos);

Там всего 2 регистра: AFR[0] и AFR[1].


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32F030F4P6 проблемы с шиной I2C.
СообщениеДобавлено: Сб янв 11, 2025 19:39:54 
Нашел транзистор. Понюхал.

Зарегистрирован: Вс мар 27, 2022 09:38:17
Сообщений: 160
Рейтинг сообщения: 0
Сейчас пересмотрю

Добавлено after 6 minutes 34 seconds:
Спасибо большое! Завелась! Там получается что Рег 0 это AFRL, а рег 1 это AFRН, мой был 1. Спасибо!


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 15


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y