Например TDA7294

Форум РадиоКот • Просмотр темы - stm32f1 + i2c1 help!
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Ср апр 17, 2024 00:30:10

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


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



Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: stm32f1 + i2c1 help!
СообщениеДобавлено: Пн апр 01, 2019 14:04:19 
Родился

Зарегистрирован: Пн апр 01, 2019 13:59:02
Сообщений: 3
Рейтинг сообщения: 0
Помогите разобраться. Пытаюсь запустить i2c на портах 6 и 7 на stm32f103c8t6, все работает регистры статусов меняются, ошибок BERR не выдает, но и ничего не передает на самом деле.

Код:
#include "stm32f103xb.h"

int main() {

   // restart afio
   RCC->APB2RSTR |= RCC_APB2RSTR_AFIORST;
   // turn on b-pins
   RCC->APB2ENR |= RCC_APB2ENR_IOPBEN;
   // turn on afio
   RCC->APB2ENR |= RCC_APB2ENR_AFIOEN;
      // turn on I2C1
   RCC->APB1ENR |= RCC_APB1ENR_I2C1EN;
   // turn on pins 6, 7
   // AF and open-drain and 50MHz
   GPIOB->CRL |= 0xFF << 24;
   // set i2c1 freq
   I2C1->CR2 |= 2;
   // set ack
   I2C1->CR1 |= I2C_CR1_ACK;
   // set Pause
   I2C1->CCR |= 100;
   // trise
   I2C1->TRISE |= 9;
   // on i2c
   I2C1->CR1 |= I2C_CR1_PE;

   // start signal
   I2C1->CR1 |= I2C_CR1_START;
   while (!(I2C1->SR1 & I2C_SR1_SB));
   (void) I2C1->SR1;

   I2C1->DR |= 0x27 << 1;
   while (!(I2C1->SR1 & (I2C_SR1_ADDR)));
   (void) I2C1->SR1;
   (void) I2C1->SR2;

   I2C1->DR |= ('a' & 0xF0) | 0x08 | 0x04 | 0x01;
   while (!(I2C1->SR1 & (I2C_SR1_BTF)));
   (void) I2C1->SR1;
   (void) I2C1->SR2;

   I2C1->DR |= ('a' & 0xF0) | 0x08 | 0x00 | 0x01;
   while (!(I2C1->SR1 & (I2C_SR1_BTF)));
   (void) I2C1->SR1;
   (void) I2C1->SR2;

   I2C1->DR |= (('a' & 0x0F) << 4) | 0x08 | 0x04 | 0x01;
   while (!(I2C1->SR1 & (I2C_SR1_BTF)));
   (void) I2C1->SR1;
   (void) I2C1->SR2;

   I2C1->DR |= (('a' & 0x0F) << 4) | 0x08 | 0x00 | 0x01;
   while (!(I2C1->SR1 & (I2C_SR1_BTF)));
   (void) I2C1->SR1;
   (void) I2C1->SR2;

   I2C1->CR1 |= I2C_CR1_STOP;

   while (1);

   return 0;
}


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32f1 + i2c1 help!
СообщениеДобавлено: Вт апр 02, 2019 20:49:58 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 18
Рейтинг сообщений: 403
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 2479
Рейтинг сообщения: 0
RCC_APB2RSTR_AFIORST если нажал, то отпускать надо. Дальше не смотрел.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32f1 + i2c1 help!
СообщениеДобавлено: Ср апр 03, 2019 20:10:16 
Мучитель микросхем

Карма: 2
Рейтинг сообщений: 10
Зарегистрирован: Ср окт 19, 2011 08:48:27
Сообщений: 443
Откуда: Мать городов русских
Рейтинг сообщения: 0
2 Yorlik Что за девайс висит на I2C? По идее он должен отвечать Ack - и STM32 ждёт пока не будет ответ.

_________________
Хорошему коту и в декабре - март :)


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: stm32f1 + i2c1 help!
СообщениеДобавлено: Пт апр 05, 2019 09:10:39 
Родился

Зарегистрирован: Пн апр 01, 2019 13:59:02
Сообщений: 3
Рейтинг сообщения: 0
В том то и дело, устройство отвечает, но остальные байты не передаются, кроме адреса


Вернуться наверх
 
Организация питания на основе надежных литиевых аккумуляторов EVE и микросхем азиатского производства

Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: stm32f1 + i2c1 help!
СообщениеДобавлено: Пт апр 05, 2019 09:18:13 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 18
Рейтинг сообщений: 403
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 2479
Рейтинг сообщения: 0
Посмотри пример. I2C не терпит суеты и лишних телодвижений.
Код:
bool EE_24C::WriteByte(uint16_t adr, uint8_t data)

  pI2C->CR1 = I2C_CR1_PE | I2C_CR1_START;
  while(!(pI2C->SR1 & I2C_SR1_SB));
  pI2C->DR = w_adr;
  while(!(pI2C->SR1 & I2C_SR1_ADDR))
  {
    if(pI2C->SR1 & I2C_SR1_AF)
    {
      pI2C->CR1 = I2C_CR1_PE | I2C_CR1_STOP;
      return false;
    }
  };
  pI2C->SR2;
  while(!(pI2C->SR1 & I2C_SR1_TXE));
  pI2C->DR = adr>>8;
  while(!(pI2C->SR1 & I2C_SR1_TXE));
  pI2C->DR = adr;
  while(!(pI2C->SR1 & I2C_SR1_TXE));
  pI2C->DR = data;   
  while(!((pI2C->SR1 & I2C_SR1_TXE) && (pI2C->SR1 & I2C_SR1_BTF)));   
  pI2C->CR1 = I2C_CR1_PE | I2C_CR1_STOP;
 
  return true;
}


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: stm32f1 + i2c1 help!
СообщениеДобавлено: Пт апр 05, 2019 10:44:38 
Родился

Зарегистрирован: Пн апр 01, 2019 13:59:02
Сообщений: 3
Рейтинг сообщения: 0
Спасибо! Этот код работает. Странный конечно у stm32 i2c ведь я вроде тоже самое делаю)

Добавлено after 35 minutes 54 seconds:
Проблема в том, что регистр I2C1->DR сам не отчищается, хотя должен как написано в rm, и поэтому I2C1->DR |= data такая запись отправляла смесь предыдущего байта и этого, решение простое использовать I2C1->DR = data


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32f1 + i2c1 help!
СообщениеДобавлено: Пт апр 05, 2019 12:40:05 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 18
Рейтинг сообщений: 403
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 2479
Рейтинг сообщения: 0
Остановите Землю, я сойду.


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

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


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

Сейчас этот форум просматривают: ozzy и гости: 20


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

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


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