Easyelectronics.ru

Электроника для всех
Текущее время: 26 июн 2022, 23:14

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



JLCPCB – Прототипы печатных плат за $2/5шт. два слоя. $5/5шт. четыре слоя
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
 Заголовок сообщения: STM8L + i2c. Не удается инициализация
СообщениеДобавлено: 05 май 2022, 02:06 
Здравствуйте!

Зарегистрирован: 05 май 2022, 01:15
Сообщения: 2
Здравствуйте, участники форума, надеюсь на вашу помощь в освоении контроллера stm8L.
Я новичок в данном вопросе, плох в английских мануалах.
Итак ситуация: Решил использовать STM8L152K4
Среда разработки: IAR
Так же использовал библиотеку STM8L15x-16x-05x-AL31-L_StdPeriph_Lib v1.6.2 (https://www.st.com/en/embedded-software/stsw-stm8016.html)
Пытаюсь организовать связь с часами реального времени по i2c. Микроконтроллер должен выступать мастером.

Проблема: флаг I2C_FLAG_BUSY всегда взведен.
После инициализации нет напряжения ни на PC0 ни на PC1.
По моим мыслям он не может даже сгенерировать START.

Далее привожу код, который своровал из примеров + видео, которые смог найти. В нем i2c сделан на прерываниях,
Код:
void main()
{
  CLK_DeInit();
  CLK_HSICmd(ENABLE);
  // TIM4 & I2C  clock Enable
  CLK_PeripheralClockConfig(CLK_Peripheral_TIM4, ENABLE);
  CLK_PeripheralClockConfig(CLK_Peripheral_I2C1, ENABLE);

  // system_clock  fast mode
  CLK_SYSCLKDivConfig(CLK_SYSCLKDiv_1);

  // Initialize TIM4 peripheral to generate an interrupt each 1ms
  TIM4_TimeBaseInit(TIM4_Prescaler_128, TIM4_PERIOD);
  // Enable Update interrupt
  TIM4_ITConfig(TIM4_IT_Update, ENABLE);

  // Initialize I2C peripheral
  I2C_Init(I2C1, I2C_SPEED, 0xA0,
           I2C_Mode_I2C, I2C_DutyCycle_2,
           I2C_Ack_Enable, I2C_AcknowledgedAddress_7bit);

  ITC_SetSoftwarePriority(I2C1_IRQn, ITC_PriorityLevel_3);

  enableInterrupts();

  // Enable TIM4
  TIM4_Cmd(ENABLE);

  I2C_ITConfig(I2C1, (I2C_IT_TypeDef)(I2C_IT_EVT | I2C_IT_BUF) , ENABLE);

  //вот тут, если остановить программу нет питания на PC0
   /* Generate the Start condition */
   I2C_GenerateSTART(I2C1, ENABLE);
    while (I2C_GetFlagStatus(I2C1, I2C_FLAG_BUSY)); //тут зависает
     while ((I2C1->CR2 & I2C_CR2_STOP) == I2C_CR2_STOP);
}


Если есть необходимость, расшифрую библиотечные функции


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM8L + i2c. Не удается инициализация
СообщениеДобавлено: 05 май 2022, 02:14 
Старожил

Зарегистрирован: 10 окт 2014, 00:48
Сообщения: 7942
"нет напряжения ни на PC0 ни на PC1"
Два подтягивающих резистора где?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM8L + i2c. Не удается инициализация
СообщениеДобавлено: 06 май 2022, 15:30 
Здравствуйте!

Зарегистрирован: 05 май 2022, 01:15
Сообщения: 2
u37 писал(а):
"нет напряжения ни на PC0 ни на PC1"
Два подтягивающих резистора где?

Они есть, подключены штатно к питанию


Вложения:
-5449884543516523796_120.jpg
-5449884543516523796_120.jpg [ 13.19 Кб | Просмотров: 1119 ]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM8L + i2c. Не удается инициализация
СообщениеДобавлено: 06 май 2022, 16:30 
Старожил

Зарегистрирован: 08 июл 2013, 17:00
Сообщения: 1417
10к- не многовато ли?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM8L + i2c. Не удается инициализация
СообщениеДобавлено: 06 май 2022, 16:49 
Старожил
Аватара пользователя

Зарегистрирован: 30 янв 2014, 18:09
Сообщения: 721
Откуда: Мать городов Русских
Как ни тяжело после регистров смотреть на эти библиотеки, но попробую пованговать.
Я не увидел конфигурации собственно ножек порта PC. Нужно эти два вывода перевести в режим альтернативной функции.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM8L + i2c. Не удается инициализация
СообщениеДобавлено: 06 май 2022, 21:43 
Старожил

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 3850
Попробуйте снизить номиналы резисторов хотя бы до 4.7К.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM8L + i2c. Не удается инициализация
СообщениеДобавлено: 08 май 2022, 01:27 
Старожил

Зарегистрирован: 16 окт 2013, 01:27
Сообщения: 2042
С резюками 10 кОм работать будет, но на низкой скорости 100 кГц
Инит порта простой:
Код:
CLK->PCKENR |= CLK_PCKENR_I2C;
GPIOC->DDR |=0b111;
GPIOC->CR1 &=(~0b11);
GPIOC->CR2 |=0b11;//SCL, SDA -OD
//-------I2C ENABLE----------------
I2C->FREQR = 16;           
I2C->CCRH=0x01; //0x0A
I2C->CCRL=0x01; //I2C->CCRL=0x0B;
I2C->CR1 |= I2C_CR1_PE;



Зачем вы опрашиваете флаг Busy после старта ? Оно и будет занято у Вас.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM8L + i2c. Не удается инициализация
СообщениеДобавлено: 08 май 2022, 09:43 
Старожил
Аватара пользователя

Зарегистрирован: 14 апр 2014, 11:06
Сообщения: 1676
Откуда: Курск
Почитайте Errata про i2c, возможно поможет
Я помню после прочтения решил сразу заняться stm32


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


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


Кто сейчас на конференции

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


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

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

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB