реклама на сайте
подробности

 
 
> STM32F103CBT и I2C2, нет генерации старта
rav38
сообщение Sep 4 2015, 08:43
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 54
Регистрация: 12-06-12
Из: Москва
Пользователь №: 72 275



Здравствуйте все!
Пытаюсь сделать опрос датчика по I2C2, используя HAL библиотеки stm32cubef1.
При попытке что либо сделать на шине (запись, чтение) получаю ошибку выполнения ф-ции и картинку на линии SDA (в прищепке).
Под отладчиком по шагам запускаю ф-цию HAL_I2C_IsDeviceReady. Вся работа заканчивается моментом генерации стартового бита.
Код
      /* Generate Start */
      SET_BIT(hi2c->Instance->CR1, I2C_CR1_START);


После выполнения этой строчки на SDA появляется шум.

Инициализация I2C2(взял из примеров):
CODE
void HAL_I2C_MspInit(I2C_HandleTypeDef *hi2c)
{
GPIO_InitTypeDef GPIO_InitStruct;

GPIO_InitStruct.Pin = GPIO_AMS_SCL_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_AF_OD;
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
HAL_GPIO_Init(GPIO_AMS_SCL_PORT, &GPIO_InitStruct);

GPIO_InitStruct.Pin = GPIO_AMS_SDA_PIN;
HAL_GPIO_Init(GPIO_AMS_SDA_PORT, &GPIO_InitStruct);

HAL_NVIC_ClearPendingIRQ ( AMS_I2C_ER_IRQ );
HAL_NVIC_SetPriority ( AMS_I2C_ER_IRQ, 1, 0 );
HAL_NVIC_EnableIRQ ( AMS_I2C_ER_IRQ );

HAL_NVIC_ClearPendingIRQ ( AMS_I2C_EV_IRQ );
HAL_NVIC_SetPriority ( AMS_I2C_EV_IRQ, 2, 0 );
HAL_NVIC_EnableIRQ ( AMS_I2C_EV_IRQ );

AMS_I2C_CLK_ENABLE();
};

void vAMS_I2C_Init(void)
{
AMS_I2CHandle.Instance = AMS_I2C;
AMS_I2CHandle.Init.ClockSpeed = I2C_STANDARD_MODE_MAX_CLK;
AMS_I2CHandle.Init.DutyCycle = I2C_DUTYCYCLE_2;
AMS_I2CHandle.Init.OwnAddress1 = AMS_I2C_ADDR;
AMS_I2CHandle.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
AMS_I2CHandle.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
AMS_I2CHandle.Init.OwnAddress2 = 0xFF;
AMS_I2CHandle.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
AMS_I2CHandle.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;

if(HAL_I2C_Init(&AMS_I2CHandle) != HAL_OK)
{
vAMS_Error_Handler();
}
}


Тактирование GPIO тоже включено. Подтяжки стоят.

На форуме упоминались проблемы именно со вторым модулем I2C, но скорее косячу сам. Где-то что-то не то настроил по ощущениям, а что именно понять не могу. Раньше аппартным модулем I2C не пользовался.
Как вариант попробовать подключить библиотеку CPAL (http://www.st.com/web/en/catalog/tools/PF258336) или сделать программную шину, но все же хочу понять почему не могу запустить HAL.

В общем прошу помощи.

Сообщение отредактировал rav38 - Sep 4 2015, 08:46
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
rav38
сообщение Sep 14 2015, 10:25
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 54
Регистрация: 12-06-12
Из: Москва
Пользователь №: 72 275



В общем проблему с интерфейсом так и не решил, но уперся в какие-то другие грабли, связанные с портом PB10 (аппаратный I2C2).
Написал программную реализацию I2C.
На плате две ведомых микросхемы, каждая на своем интерфейсе. I2C1 аппаратный запускать даже не пробовал, программная реализация заработала сразу же.
Начал пробовать опрашивать микросхему на PB10.
При инициализации GPIO PB10 c него начинает лезть 26МГц (картинка в первом посте темы). Перефирия не инициализирована, ремап не включен. Параллельно работает светодиодная моргалка и опрашивается первый пограммный порт I2C, все это крутится на FreeRTOS.
Если PB10 настроить на вход - генерации нет. Любой вариант выхода - генерация есть. Частотат появляется после выполнения кода
Код
  GPIO_InitStruct.Pin   =       GPIO_PIN_10;
  GPIO_InitStruct.Mode  =       GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull  =       GPIO_PULLUP;
  GPIO_InitStruct.Speed =       GPIO_SPEED_HIGH;
  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);


На любом другом порте проблема не наблюдается. Платы собраны в 2 экземплярах. Повторяемость 100%.
Куда копать?

Сообщение отредактировал rav38 - Sep 14 2015, 10:29
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 29th July 2025 - 17:51
Рейтинг@Mail.ru


Страница сгенерированна за 0.01361 секунд с 7
ELECTRONIX ©2004-2016