19.05.2015, 07:42
|
|
Почётный гражданин KAZUS.RU
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,816
Сказал спасибо: 13
Сказали Спасибо 399 раз(а) в 214 сообщении(ях)
|
Re: FAQ по STM8
Сообщение от eddy
|
Мужики, как этот чертов аппаратный I2C заводить на STM8S?
|
тут боролись http://hamlab.net/mcu/stm8/i2c.html
Сообщение от eddy
|
PB4 (SCL) сделал пуш-пульным выходом, а PB5 - opendrain'ым
|
эти обе ноги - НЕ ИМЕЮТ пуш-пуль, и нуно ОБЕ подтягивать резисторами даже в режимах простого выхода, а не только I2С. И в Даташите это УКАЗАНО.
Чем я и пользовался для управления MOSFET напрямую, подключая резистор на +12В
Подключал к MK 3V SPI FLASH M25P40 и 5V DS1307.. но I2с сделал софтверный.
In the open-drain output column, "T" defines a true open-drain I/O (P-buffer, weak pull-up, and protection diode to VDD are not implemented).
Сообщение от eddy
|
Черт, это, наверное, из-за того произошло, что я не установил в единицу ODR
|
Ну это как бы логично )))
Сообщение от eddy
|
для отправки сначала выполняется ожидание освобождения линии (т.е. должно быть 1).
|
А скорее всего какой нить флажок ошибки, сигнализирует о колизии на шине...
__________________
"picavr(ГАВ)мыло.ру" USB_Analyzer, Digital_Storage_Oscilloscope "picavr.kr1.ru" заказы в Китай компонентов/изготовление: плат/ЖКИ/мембраных клавиатур/имп трансформаторов
Последний раз редактировалось picavr; 19.05.2015 в 08:53.
|
|
|
|
19.05.2015, 09:46
|
|
Почётный гражданин KAZUS.RU
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,627
Сказал спасибо: 115
Сказали Спасибо 813 раз(а) в 590 сообщении(ях)
|
Re: FAQ по STM8
Сообщение от omercury
|
Они обе opendrain...
|
Это если несколько мастеров на линии. А у меня напрямую со слейвом соединяется, т.е. только SDA надо подтягивать. Можно, конечно, обе ноги opendrain сделать.
Кстати, неудобно, что у STM8 не включаются внутренние подтяжки в режиме выхода.
Сообщение от picavr
|
тут боролись
|
Читал. Там вообще хрен знает как работает I2C: ноги сконфигурировали как плавающие входы, а в ODR таки единичку запихали =D
Сообщение от picavr
|
эти обе ноги - НЕ ИМЕЮТ пуш-пуль,
|
нет, обе умеют PP. См. даташит. Вот в 48-ногом исполнении, если бы я не на PB4/PB5, а на PE1/PE2 вешал I2C, пришлось бы действительно обе ноги подтягивать, т.к. они - true opendrain.
А вот, кстати, в migration guide четко написано про эту разницу между S105 (у которого ноги "нормальные") и S103 (у которого true opendrain).
В даташите же по поводу I2C эти сволочи вообще ни словом ни обмолвились, как ноги правильно настраивать. А еще я так и не понял, каким образом в STM8 ремаппинг выполняется: скажем, был бы у меня 48-ногий, а я захотел бы на PB4/PB5 I2C воткнуть, а не как по дефолту.
__________________
Союз Советских Социалистических Округов Северной Америки
|
|
|
|
19.05.2015, 10:48
|
|
Почётный гражданин KAZUS.RU
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,627
Сказал спасибо: 115
Сказали Спасибо 813 раз(а) в 590 сообщении(ях)
|
Re: FAQ по STM8
На всякий случай обе ноги сделал opendrain, подтянул резисторами.
И - тишина. Висит в состоянии BUSY. Судя по даташиту, выйти из этого состояния он может только если получит внешний сигнал STOP. А откуда ему взяться? Пробовал "перезагружать" интерфейс:
Код:
|
I2C_CR2 |= 0x80; I2C_CR2 &= ~0x80; |
- не помогает.
Уж не знаю, может и правда попробовать как в той заметке настроить ноги входами?
__________________
Союз Советских Социалистических Округов Северной Америки
|
|
|
|
19.05.2015, 11:00
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: FAQ по STM8
Да ладно, не мучайся.
|
|
|
|
19.05.2015, 11:52
|
|
Почётный гражданин KAZUS.RU
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,627
Сказал спасибо: 115
Сказали Спасибо 813 раз(а) в 590 сообщении(ях)
|
Re: FAQ по STM8
Вот это:
Код:
|
if ((I2C-›SR3&0x02)==1) return I2c_ERROR_BUS_BUSY;
I2C_busy(); |
работать не будет.
А зачем вот это:
Код:
|
CLK_PeripheralClockConfig(CLK_PERIPHERAL_I2C, ENABLE); |
? По умолчанию же вся периферия включена.
И не вижу настройки ног: неужто без них все работает?
Я посмотрел пример от STM, там они внутри цикла проверки BUSY еще постоянно STOP дергают.
Попробовал так же — все равно тишина. На ногах CLK и SDA как висела единица, так и висит; триггеры saleae не срабатывают.
Я несколько раз даташит пересмотрел, все равно не могу найти, где же у меня ошибка: почему возвращается BUSY.
__________________
Союз Советских Социалистических Округов Северной Америки
|
|
|
|
19.05.2015, 11:56
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: FAQ по STM8
Сообщение от eddy
|
Вот это:
Код:
|
if ((I2C-›SR3&0x02)==1) return I2c_ERROR_BUS_BUSY;
I2C_busy(); |
работать не будет.
|
Не будет. Странно, откуда это у меня? ![Обрадован](images/smilies/icon_surprised.gif)
GPIO отдельно настраиваются. Тактирование "на всякий случай". Иногда я отключаю тактирование для экономии энергии.
|
|
|
|
19.05.2015, 12:16
|
|
Заблокирован
Регистрация: 21.01.2014
Сообщений: 589
Сказал спасибо: 7
Сказали Спасибо 267 раз(а) в 206 сообщении(ях)
|
Re: FAQ по STM8
Сообщение от eddy
|
По умолчанию же вся периферия включена.
|
После сброса все клоки для периферии выключены.
Функция CLK_PeripheralClockConfig(CLK_PERIPHERAL_I2C, ENABLE) пишет единичку в I2C бит в регистр CLK_PCKENR1.
ЗЫ. Мал-мал попутал: это для STM8L всё выключено, а для STM8S как раз наоборот!
Последний раз редактировалось Yurkin2014; 19.05.2015 в 12:26.
|
|
|
|
19.05.2015, 12:20
|
|
Почётный гражданин KAZUS.RU
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,627
Сказал спасибо: 115
Сказали Спасибо 813 раз(а) в 590 сообщении(ях)
|
Re: FAQ по STM8
Кстати, глянул сейчас примеры из STM'овской SPL. Нигде не обнаружил настройки ног. Как оно у них вообще работало-то?
Ну, а насчет BUSY - я понятия не имею, почему, но у меня BUSY висит и не пропадает никуда. Хотя и SCL, и SDA в единице.
А в твоем случае нет смысла во втором while(), в который макрос I2C_busy() раскрывается: ведь если линия занята, то функция сразу же вернет I2c_ERROR_BUS_BUSY.
А вообще, этот аппаратный I2C у STM8 — какой-то ужас!
__________________
Союз Советских Социалистических Округов Северной Америки
|
|
|
|
19.05.2015, 12:21
|
|
Почётный гражданин KAZUS.RU
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,627
Сказал спасибо: 115
Сказали Спасибо 813 раз(а) в 590 сообщении(ях)
|
Re: FAQ по STM8
Сообщение от Yurkin2014
|
После сброса все клоки для периферии выключены.
|
У меня не STM8L, а STM8 S. У него вся периферия включена по умолчанию (а вот у L-серии после сброса вся периферия выключена).
__________________
Союз Советских Социалистических Округов Северной Америки
|
|
|
|
19.05.2015, 12:22
|
|
Заблокирован
Регистрация: 21.01.2014
Сообщений: 589
Сказал спасибо: 7
Сказали Спасибо 267 раз(а) в 206 сообщении(ях)
|
Re: FAQ по STM8
А, точно, Ваша правда
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 01:00.
|
|