|
0 / 0 / 0
Регистрация: 07.10.2011
Сообщений: 108
|
||||||||||||||||
stm32f4+stmpe811. чтение 4 байт по i2c17.09.2017, 13:44. Показов 14731. Ответов 18
Метки нет (Все метки)
Чип stm32f429. Реализовал чтение 1 и 2 байт по y2s, смотрю лог. анализатором - все норм. При чтении 4 байт мастер для 4 байта формирует ACK, из-за этого stmpe811 подвисает.
Делаю все по datasheet, смотрел исходники HAL, там сделано также: 1 байт - жду флага RXNE, читаю байт 2 байт - жду флаг BTF, после его взведения выключаю ACK и читаю байт 3,4 байта - жду флаг BTF, формирую сигнал СТОП, два раза читаю регистр данных, чтобы вытащить 3 и 4 байты флаг STOP после всего этого безобразия взведен, что говорит об ошибке таймаута формирования сигнала СТОП (я предполагаю, что это slave держит линию данных, т.к. не было NACK) Подскажите, что делаю не так? инициализация GPIO
0
|
||||||||||||||||
| 17.09.2017, 13:44 | |
|
Ответы с готовыми решениями:
18
Запись и чтение с помощью I2C на STM32F4 Чтение неск.байт по I2C Не работает i2c stm32f4 |
|
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 382
|
|
| 17.09.2017, 14:00 | |
|
Наоборот, чтобы прекратить обмен, последний принятый байт нужно "неподтверждать" (NACK, нет бита подтверждения). Это из самого протокола I2C
<Изображение удалено>
0
|
|
|
0 / 0 / 0
Регистрация: 07.10.2011
Сообщений: 108
|
||||||
| 17.09.2017, 14:02 | ||||||
|
это я понимаю, но мастер не отрабатывает отключение бита ACK в случае приема 4 байт
0
|
||||||
|
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 382
|
|
| 17.09.2017, 14:13 | |
|
__TS_I2C->CR1 &= ~I2C_CR1_ACK; - переместите эту строчку на одну выше, до цикла while
0
|
|
|
0 / 0 / 0
Регистрация: 07.10.2011
Сообщений: 108
|
||
| 17.09.2017, 14:22 | ||
|
А так получается слишком рано, да и в datasheet написано
0
|
||
|
0 / 0 / 0
Регистрация: 07.10.2011
Сообщений: 108
|
||||||
| 17.09.2017, 15:05 | ||||||
|
Попробовал так
0
|
||||||
|
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 382
|
||||||
| 17.09.2017, 18:59 | ||||||
|
Вот так,4 байта по шагам:
Бит BTF ждать не нужно, он выставится, если байт еще не был прочита из DR, а уже принят еще один байт во внутренний сдвиговый регистр (причем, принят с ACK! тоесть типа "давай шли исчо!"). Тогда приём остановится и линия будет удерживаться в ожидании (растяжение клока). Дождавшись бита BTF, мы читаем DR, и после этого в него переносится то, что было во внутреннем сдвиговом регистре, а сдвиговый регистр в это время снова начтет заполняться принимаемым байтом (ведь предыдущий то был подтвержден!). Получаем фактическое запаздывание на один байт.
0
|
||||||
|
0 / 0 / 0
Регистрация: 07.10.2011
Сообщений: 108
|
||||||
| 18.09.2017, 11:29 | ||||||
|
Я сам делал примерно также, только еще BTF использовал
Переделал все на RXNE, код сильно упростился. (спасибо за подсказку) Вот моя функция чтения данных из STMPE811 void STMPE811_symple_read(uint8_t slave_addr, uint8_t reg_addr, uint8_t* pData, uint8_t data_sz)
0
|
||||||
|
1 / 1 / 0
Регистрация: 05.10.2017
Сообщений: 2,048
|
|||||||||||||||||||||
| 18.09.2017, 15:41 | |||||||||||||||||||||
|
I2C3Routines.h
Библиотека выше слегка сыровата, не дописана (нет обработки, когда адрес регистра в режиме запись/чтение более 1 байта, только для одного I2C). Пока только для F4, проверял на STM32F439BI, c параллельной загрузкой проца по Ethernet, GUI и прочими тяжеловесными штуками, ошибок нет. Гонял от 100 кгц до 400 кгц. Использует FriiRTOS и вывод в дебаг, и то и то можно выкинуть. Использовать функции следующим образом: Чтение из часов DS3231
0
|
|||||||||||||||||||||
|
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 382
|
||
| 18.09.2017, 16:27 | ||
Вапщет, оно как-то всё покороче да попросче пишецца, в принцепе та.
0
|
||
|
1 / 1 / 0
Регистрация: 05.10.2017
Сообщений: 2,048
|
|
| 18.09.2017, 16:33 | |
|
Инициализация стерпит, там нет ничего критичного. При чтении/записи только регистры. Если у вас получилось проще, было бы интересно глянуть.
0
|
|
|
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 382
|
|
| 18.09.2017, 17:04 | |
|
Окей, буду дома - выложу
0
|
|
|
1 / 1 / 0
Регистрация: 06.12.2016
Сообщений: 3,946
|
||
| 18.09.2017, 18:32 | ||
0
|
||
|
0 / 0 / 0
Регистрация: 07.10.2011
Сообщений: 108
|
|
| 18.09.2017, 19:16 | |
|
У меня другой вопрос
Записываю в регистр TSC_CTRL (0x40 ), потом читаю. Значение регистра не меняется. Кто-нибудь сталкивался с этим? Пробовал и с нулевым битом EN и с единичным - результат одинаковый Делаю как написано в datasheet: сначала сброс (тактирование TS и ADC при этом отключится), потом настройка режима работы
0
|
|
|
0 / 0 / 0
Регистрация: 07.10.2011
Сообщений: 108
|
||
| 18.09.2017, 19:32 | ||
Все равно ерунда какая-то получается Может кто поделиться рабочим кодом настройки и чтения данных с stmpe811?
0
|
||
|
1 / 1 / 0
Регистрация: 05.10.2017
Сообщений: 2,048
|
||
| 18.09.2017, 20:02 | ||
0
|
||
|
1 / 1 / 0
Регистрация: 06.12.2016
Сообщений: 3,946
|
|
| 18.09.2017, 22:17 | |
|
Hotd, вливайся дополнишь.
Однако, целью ресурса является даже не научить работать с периферией, скорей попытка заставить думать и начать изучать документацию и начать работать с документацией. Попытка показать , что думать это действенней чем юзать г.либы...
0
|
|
|
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 382
|
||
| 18.09.2017, 22:33 | ||
Там вначале вообще надо всё включить, в регистре управления SYS_CTRL2. По умолчанию отключено.
0
|
||
|
0 / 0 / 0
Регистрация: 07.10.2011
Сообщений: 108
|
||
| 18.09.2017, 23:34 | ||
А в даташите только про клок тачскрина написано в длинной последовательности настройки. В даташите в явном виде не написано, что ацп нужно включить, чтобы тачскрин работал. Я по логике то догадываюсь, но каждый раз гадать..
0
|
||
| 18.09.2017, 23:34 | |
|
Помогаю со студенческими работами здесь
19
STM32F4 .Работа I2C i2c 24lc256+stm32f4 STM32f4 I2C частота данных STM32F4 i2c eeprom 24hxx STM32F4 I2C DMA CMSIS Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&d=1772460536
Одним из. . .
|
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
|
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
|
|
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|