Easyelectronics.ru

Электроника для всех
Текущее время: 25 сен 2022, 06:52

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




Начать новую тему Ответить на тему  [ Сообщений: 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
Сообщения: 8083
"нет напряжения ни на 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 Кб | Просмотров: 1731 ]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM8L + i2c. Не удается инициализация
СообщениеДобавлено: 06 май 2022, 16:30 
Старожил

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


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

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


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

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


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

Зарегистрирован: 16 окт 2013, 01:27
Сообщения: 2106
С резюками 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 часов


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

Сейчас этот форум просматривают: Google [Bot]


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

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

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