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

 
 
4 страниц V  < 1 2 3 4 >  
Reply to this topicStart new topic
> STM32F050 I2C, не работает
Axel
сообщение Jun 19 2014, 04:34
Сообщение #16


Местный
***

Группа: Свой
Сообщений: 480
Регистрация: 21-11-04
Пользователь №: 1 188



Цитата(glags @ Jun 18 2014, 13:58) *
...Лучше бы помогли ценным советом чем базар разводить...

Ну прям сердце разрывается... Итак:
1. ST-шный I2C работает. Проверено на разных STM32 и STM8.
2. ST-шный I2C производит впечатление недоделанного курсового. Причина ворчания (одна из) - удивительные упражнения с ACK-ом и STOP-ом в конце приема.
3. ST-шные примеры малополезны по причинам:
а) используют весьма нелюбимую мной либу
б) не облегчают понимание
в) абсолютно не гарантируют отсутствие (или уменьшение) проблем при попытке их адаптации под свои нужды
Теперь советы (естественно только ценные):
1. Детально разобраться с регистрами (по мануалу, на всякие AN-ы не заморачиваться), после чего сконфигурить порт по собственному разумению
2. Разрешить клоки на I2C (RCC->APB1ENR) и GPIO (RCC->APB2ENR). Не забыть про бит 0 в RCC->APB2ENR.
3. Начать изучать поведение пинов с команды I2C1->CR1 |= (1 << 8) (старт)
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jun 19 2014, 06:14
Сообщение #17


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(Axel @ Jun 19 2014, 10:34) *
Теперь советы (естественно только ценные):
...
4. Разобраться с тактированием периферии в чипе по мануалу (aka - регистрам). RCC?
5. Разобраться с конфигурированием пинов по мануалу.
6. Разобраться с контроллером прерываний по мануалу.

После этого минимума в принципе более-менее уже можно приступать к реализации обмена по I2C.
Go to the top of the page
 
+Quote Post
glags
сообщение Jun 19 2014, 07:19
Сообщение #18


Участник
*

Группа: Участник
Сообщений: 58
Регистрация: 9-05-13
Из: Львов, Украина
Пользователь №: 76 782



Цитата(smalcom @ Jun 19 2014, 02:27) *
чо-чо!? только?

> Примеры из библиотеки работают?
[attachment=85495:iic.png]

А можно ссылочку на эту библиотеку. sm.gif

Отвечаю сразу для Axel и jcxz на Ваши советы. sm.gif
1) С регистрами I2C более менее разобрался, но чтоб отсеять свои сомнения передачу организовал на SPL.
2) Всё сделано как надо, в первом посте всё описано.
3) Какое б не было поведение пинов на команду I2C1->CR1 |= (1 << 8) (старт), но оно должно быть. А там глухо.
На 4,5 и 6 я уже собаку съел. Тут ошибок быть не может. Тем более об 6 пункте (прерывания) рано говорить, так как оно организовывается только по приёму. На передачу оно не надо. В данном случае хотелось чтоб при передаче хотябы ноги дрыгнулись.
Может кто уже сам лично програмировал I2C на этом проце (STM32F050F4P6 корпус TSSOP20).
Организовывал I2C на 105 и 407 процах проблем не было, а тут засада какая-то. Такое впечатление что он есть только в даташите на проц, а в реалии его нет.

Сообщение отредактировал glags - Jun 19 2014, 07:22
Go to the top of the page
 
+Quote Post
x893
сообщение Jun 19 2014, 08:00
Сообщение #19


Профессионал
*****

Группа: Свой
Сообщений: 1 333
Регистрация: 27-10-08
Из: Планета Земля
Пользователь №: 41 226



Нет такого процессора у ST - STM32F050F4
Go to the top of the page
 
+Quote Post
hd44780
сообщение Jun 19 2014, 08:16
Сообщение #20


Профессионал
*****

Группа: Свой
Сообщений: 1 202
Регистрация: 26-08-05
Из: Донецк, ДНР
Пользователь №: 7 980



Та ну, нету....

А в ДШ есть - вложение.
А вот запросто может быть, что он просто получился кривым и глюкавым, что о нём поспешили забыть и заменить его на те же F031 или на F051 ..
Эскизы прикрепленных изображений
Прикрепленное изображение
 

Прикрепленные файлы
Прикрепленный файл  stm32f050.pdf ( 1.07 мегабайт ) Кол-во скачиваний: 6
 


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
adnega
сообщение Jun 19 2014, 08:31
Сообщение #21


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(hd44780 @ Jun 19 2014, 12:16) *
А вот запросто может быть, что он просто получился кривым и глюкавым, что о нём поспешили забыть и заменить его на те же F031 или на F051 ..

Проц, как проц.
Просто, сейчас его называют по-другому.
Новость уже обсуждали тут (http://www.compel.ru/2014/05/29/pereimenovanie-mikrokontrollerov-stm32f0-i-stm32f3/).
Обычно кривость наблюдается у программиста, "особенности" чипа описаны в специальном документе.
Сомнительно, что такой явный и повторяемый баг туда не попал.
Go to the top of the page
 
+Quote Post
Axel
сообщение Jun 19 2014, 08:31
Сообщение #22


Местный
***

Группа: Свой
Сообщений: 480
Регистрация: 21-11-04
Пользователь №: 1 188



Цитата(glags @ Jun 19 2014, 10:19) *
1) С регистрами I2C более менее разобрался, но чтоб отсеять свои сомнения передачу организовал на SPL.

Сомнительный путь для отсева сомнений (ИМХО)... А регистры в отладчике просматривали?
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Jun 19 2014, 09:09
Сообщение #23


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



а че такое SPL, простите?

да я бы проверил все флаги, наверняка там для прерываний куча флагов ставиться во время работы i2C, хоть поглядеть они стараются? А может еще ноги снаружи пошевелить, вдруг вы не мастером сделали?
Go to the top of the page
 
+Quote Post
scifi
сообщение Jun 19 2014, 09:25
Сообщение #24


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(Golikov A. @ Jun 19 2014, 13:09) *
а че такое SPL, простите?

Вас в гугле забанили, простите?
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Jun 19 2014, 09:30
Сообщение #25


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



не допер дописать STM32 SPL, а по SPL такое выдает.... я догадывался что это библиотека, просто хотел быть уверен)
Go to the top of the page
 
+Quote Post
glags
сообщение Jun 19 2014, 10:55
Сообщение #26


Участник
*

Группа: Участник
Сообщений: 58
Регистрация: 9-05-13
Из: Львов, Украина
Пользователь №: 76 782



Цитата(Golikov A. @ Jun 19 2014, 12:09) *
а че такое SPL, простите?

да я бы проверил все флаги, наверняка там для прерываний куча флагов ставиться во время работы i2C, хоть поглядеть они стараются? А может еще ноги снаружи пошевелить, вдруг вы не мастером сделали?

Да вы правы, уже добавил I2C1->CR1|=I2C_CR1_SMBHEN | I2C_CR1_PE; //включить I2C
Огромное спасибо, минут через 30 проверю.

Кстати заметил одну особенность у этого проца. У меня на нём настроен SPI и к нему подключен єкран. от нокии 3310. Я отключил I2C и на его место включил USART. Запустил и случилось чудо - SPI загнулся, а USART работает. Принимает и передаёт данные, подключил к компу через переходник usb-usart. Написал програмулину которая принимает от порта данные и обратно выдаёт то что приняло. В терменале всё чётко, для надёжности проверки обратно в терминал выдавал то что принял +1.
Так вот к чему я веду. Может этот проц может работать только с одним аппаратным интерфейсом? Но в эррате и даташите я ничего про это не нашёл. Шас попробую SPI отключить и проверить.

Изменил инициализацию добавив CR1|=I2C_CR1_SMBHEN;
Код
RCC->APB1ENR = RCC_APB1ENR_PWREN | RCC_APB1ENR_I2C1EN;
RCC->APB2ENR = RCC_APB2ENR_SYSCFGEN;
RCC->AHBENR = RCC_AHBENR_GPIOAEN;

GPIOA->MODER |= GPIO_MODER_MODER9_1 | GPIO_MODER_MODER10_1;
GPIOA->AFR[1] |= 0x00000440;//I2C - 4
GPIOA->OTYPER |= GPIO_OTYPER_OT_9 | GPIO_OTYPER_OT_10;

    I2C1->CR1|=I2C_CR1_PE;          //включить I2C
    I2C1->CR1&=~I2C_CR1_PE;         //выключить I2C
    while(I2C1->CR1&I2C_CR1_PE);    //ждём пока выключится I2C
    //I2C1->TIMINGR|=(PRESC << 28)|(SCLL<<0)|(SCLH<<8)|(SCLDEL<<20)|(SDADEL<<16);
    //PRESC=11, SCLL=199, SCLH=195, SCLDEL=4, SDADEL=2 это для 10кГц
    //PRESC=11, SCLL=19, SCLH=15, SCLDEL=4, SDADEL=2 это для 100кГц
    //PRESC=5, SCLL=9, SCLH=3, SCLDEL=3, SDADEL=3 это для 400кГц
    //PRESC=5, SCLL=3, SCLH=1, SCLDEL=1, SDADEL=0 это для 1000кГц
    I2C1->TIMINGR|=(11 << 28)|(199<<0)|(195<<8)|(4<<20)|(2<<16); //конфигурируем тайминги
    I2C1->CR1|=I2C_CR1_SMBHEN | I2C_CR1_PE;          //включить I2C
    I2C1->CR2 =  I2C_CR2_AUTOEND | (1<<16) | I2C_CR2_RD_WRN | (0x90<<1);


И случилось не вероятное передача заработала, но приём пока нет. Огромаднейшее СПАСИБО Golikov A.. Теперь щас повоюю с приёмом, может с адресом слейва намутил. sm.gif
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jun 19 2014, 11:34
Сообщение #27


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(glags @ Jun 19 2014, 10:19) *
На 4,5 и 6 я уже собаку съел. Тут ошибок быть не может.
Ну-ну. И после этого вы пишете

Цитата(glags @ Jun 19 2014, 13:55) *
Код
GPIOA->MODER |= GPIO_MODER_MODER9_1 | GPIO_MODER_MODER10_1;
...
GPIOA->OTYPER |= GPIO_OTYPER_OT_9 | GPIO_OTYPER_OT_10;
Рекомендую съесть еще одну собаку. В этом коде поведение может быть каким угодно и очень часто совсем не таким, какого вы ожидали. Не удивительно, что у вас
Цитата(glags @ Jun 19 2014, 13:55) *
Запустил и случилось чудо - SPI загнулся, а USART работает


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
glags
сообщение Jun 19 2014, 11:49
Сообщение #28


Участник
*

Группа: Участник
Сообщений: 58
Регистрация: 9-05-13
Из: Львов, Украина
Пользователь №: 76 782



Цитата(Сергей Борщ @ Jun 19 2014, 14:34) *
Ну-ну. И после этого вы пишете

Рекомендую съесть еще одну собаку. В этом коде поведение может быть каким угодно и очень часто совсем не таким, какого вы ожидали. Не удивительно, что у вас

Вы имеете "логическое ИЛИ" ?. Так я это делаю чтоб SWD порт не потерять. В отладчике на регистры смотрел, то там всё ОК.
Go to the top of the page
 
+Quote Post
Axel
сообщение Jun 19 2014, 12:20
Сообщение #29


Местный
***

Группа: Свой
Сообщений: 480
Регистрация: 21-11-04
Пользователь №: 1 188



Так вроде I2C_CR1_SMBHEN (3-й бит в CR1) здесь не при делах (если Вы действительно говорите про I2C, а не про SMBUS). Рекомендация по поводу собаки видится по-прежнему актуальной...
Go to the top of the page
 
+Quote Post
glags
сообщение Jun 19 2014, 12:56
Сообщение #30


Участник
*

Группа: Участник
Сообщений: 58
Регистрация: 9-05-13
Из: Львов, Украина
Пользователь №: 76 782



Цитата(Axel @ Jun 19 2014, 15:20) *
Так вроде I2C_CR1_SMBHEN (3-й бит в CR1) здесь не при делах (если Вы действительно говорите про I2C, а не про SMBUS). Рекомендация по поводу собаки видится по-прежнему актуальной...

Bit 21 SMBDEN: SMBus Device Default address enable
0: Device default address disabled. Address 0b1100001x is NACKed.
1: Device default address enabled. Address 0b1100001x is ACKed.
Вы какой мануал смотрите sm.gif
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 04:36
Рейтинг@Mail.ru


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