billidean 0 6 февраля, 2018 Опубликовано 6 февраля, 2018 (изменено) · Жалоба Добрый день. Изучаю работу с STM32F407 с применением HAL-библиотек. Завис на изучении I2C. Пробую вести обмен с микросхемой CS43L22, которая стоит на плате. По схеме на плату вижу подключение ног I2C этой микросхемы к пинам PB6(SCL) и PB9(SDA) Также по схеме вижу их подтяжку к питанию через 4,7 кОм В STM32CubeMX создал проект и настроил эти пины STM-ки на интерфейс I2C настроил скорость и параметры пинов (скорость обмена сделал маленькую - 10кГц, но пробовал и 100кГц) В даташите на CS43L22 нашел циклограмму чтения и пытаюсь вычитать ИД микросхемы, т.е. регистр с адресом 0х01 int main(void) { /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); /* Configure the system clock */ SystemClock_Config(); /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_TIM6_Init(); MX_I2C1_Init(); LCD_init(); LCD_clear(); HAL_TIM_Base_Start(&htim6); HAL_TIM_Base_Start_IT(&htim6); while (1) { LCD_clear(); LCD_Cursor(0, 0); LCD_write_String("BEGIN"); HAL_Delay(1000); LCD_clear(); LCD_Cursor(0, 0); aTxBuffer[0] = 0x01; LCD_clear(); LCD_Cursor(0, 0); LCD_write_String("Wait ready..."); while( HAL_I2C_GetState(&hi2c1) != HAL_I2C_STATE_READY ) { LCD_clear(); LCD_Cursor(0, 0); LCD_write_String("Not ready..."); } HAL_Delay(1000); LCD_clear(); LCD_Cursor(0, 0); LCD_write_String("Wait write..."); while(HAL_I2C_Master_Transmit(&hi2c1, (uint16_t)0x94, aTxBuffer, (uint16_t)1, (uint32_t) 1000) != HAL_OK) { if(HAL_I2C_GetError(&hi2c1) != HAL_I2C_ERROR_AF) { LCD_clear(); LCD_Cursor(0, 0); // позиция курсора начинается с 0 LCD_write_String("Buffer ERROR!"); } } while( HAL_I2C_GetState(&hi2c1) != HAL_I2C_STATE_READY ) { LCD_clear(); LCD_Cursor(0, 0); LCD_write_String("..CONTINUE.."); } LCD_clear(); LCD_Cursor(0, 0); LCD_write_String("Write OK!"); I2C_ReadBuffer(&hi2c1, (uint16_t)0x94, (uint16_t)1); HAL_Delay(1000); } } Т.е. я сначала записываю адрес этого регистра 0х01 (использую стандартную ф-цию HAL_I2C_Master_Transmit), затем собираюсь читать (уже использую свою ф-цию I2C_ReadBuffer)...но до чтения прога не доходит, зависает в цикле while(HAL_I2C_Master_Transmit(&hi2c1, (uint16_t)0x94, aTxBuffer, (uint16_t)1, (uint32_t) 1000) != HAL_OK). Адрес микросхемы 0х94 - по даташиту. Находил несколько статей по работе именно с этой микросхемой на этой плате, код примерно такой же. Смотрел видео-пример по работе с часами реального времени, там код вообще совпадает. Если кто работал с этой микросхемой, подскажите плз, где я мог накосячить? Код минимальный. Изменено 7 февраля, 2018 пользователем IgorKossak [codebox] для длинного кода. [code]-для короткого!!! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
HardEgor 79 6 февраля, 2018 Опубликовано 6 февраля, 2018 · Жалоба Теоретически он не может повиснуть, должен вернуть ошибку timeout. А timeout работает через прерывания systick, он у вас включен и настроен? Или в отладчике пошагово посмотрите где повис. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
0men 2 6 февраля, 2018 Опубликовано 6 февраля, 2018 (изменено) · Жалоба содержимое MX_I2C1_Init покажите и перед while(1) напишите __enable_interrupt(); Изменено 6 февраля, 2018 пользователем 0men Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 178 6 февраля, 2018 Опубликовано 6 февраля, 2018 · Жалоба содержимое MX_I2C1_Init покажите и перед while(1) напишите __enable_interrupt(); По-умолчанию, после старта MCU прерывания разрешены, поэтому нет необходимости разрешать их. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
0men 2 6 февраля, 2018 Опубликовано 6 февраля, 2018 · Жалоба что то мне подсказывает, что просто не включен клок... __I2C1_CLK_ENABLE(); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 178 6 февраля, 2018 Опубликовано 6 февраля, 2018 (изменено) · Жалоба А вообще рекомендую потратить часок на изучение I2C целевого STM32 и написать свои функции чтения/записи (попутно обработку ошибок реализовать, в частности, зависание шины). Наблюдаю тенденцию каждого третьего вопроса как раз про эти ваши HAL-ы. Создается впечатление, что это г*вно изобретение ленивых людей похуже индусских драйверов на встроенное железо... Изменено 6 февраля, 2018 пользователем Arlleex Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
billidean 0 6 февраля, 2018 Опубликовано 6 февраля, 2018 · Жалоба Спасибо всем, текущая проблема решена... Не увидел сначала на схеме, что на Reset по умолчанию подан ноль. Подцепил порт PD4, подал на него 1 - и все заработало. Но это я только начал с этим разбираться, возможно дальше еще на что-нибудь "наступлю" ...тогда продолжу эту тему.. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sadat 0 8 февраля, 2018 Опубликовано 8 февраля, 2018 · Жалоба Выше неправильный вывод - просто HAL очень удобная отмазка - " а у меня не работает". Не спорю, есть "тонкие места", да и самому приходилось патчить код - но вот так вот клеймить фекалиями не стоит. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
op3op3 0 9 февраля, 2018 Опубликовано 9 февраля, 2018 (изменено) · Жалоба А вообще рекомендую потратить часок на изучение I2C целевого STM32 и написать свои функции чтения/записи (попутно обработку ошибок реализовать, в частности, зависание шины). Наблюдаю тенденцию каждого третьего вопроса как раз про эти ваши HAL-ы. Создается впечатление, что это г*вно изобретение ленивых людей похуже индусских драйверов на встроенное железо... HAL stm-овский проект, который активно развивается и его вылизывают на сотнях, тысячах проектов. а ваши самопальные библиотеки, заточенные под ваши личные проекты, используете только вы и сколько там косяков вам еще предстоит узнать. RTOS, файловую систему, .... вы видимо тоже свои пишете, по ночам, в свободное от основной работы время.. billidean, в репозитории куба есть готовый драйвер CS43L22, можно в нем глянуть как реализовано смотрите куда в кубе у вас настроено сохранение Help > Updater Settings > Firmware Repository драйвер ~/STM32Cube/Repository/STM32Cube_FW_F4_V1.19.0/Drivers/BSP/Components/cs43l22/ готовые рабочие проекты с примерами использования этого драйвера ~/STM32Cube/Repository/STM32Cube_FW_F4_V1.19.0/Projects/STM32F401-Discovery/Examples/BSP/readme.txt ~/STM32Cube/Repository/STM32Cube_FW_F4_V1.19.0/Projects/STM32F411E-Discovery/Examples/BSP/readme.txt Изменено 9 февраля, 2018 пользователем op3op3 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 178 9 февраля, 2018 Опубликовано 9 февраля, 2018 · Жалоба HAL stm-овский проект, который активно развивается и его вылизывают на сотнях, тысячах проектов. а ваши самопальные библиотеки, заточенные под ваши личные проекты, используете только вы и сколько там косяков вам еще предстоит узнать. RTOS, файловую систему, .... вы видимо тоже свои пишете, по ночам, в свободное от основной работы время.. billidean, в репозитории куба есть готовый драйвер CS43L22, можно в нем глянуть как реализовано смотрите куда в кубе у вас настроено сохранение Help > Updater Settings > Firmware Repository драйвер ~/STM32Cube/Repository/STM32Cube_FW_F4_V1.19.0/Drivers/BSP/Components/cs43l22/ готовые рабочие проекты с примерами использования этого драйвера ~/STM32Cube/Repository/STM32Cube_FW_F4_V1.19.0/Projects/STM32F401-Discovery/Examples/BSP/readme.txt ~/STM32Cube/Repository/STM32Cube_FW_F4_V1.19.0/Projects/STM32F411E-Discovery/Examples/BSP/readme.txt Я бы посмотрел, как Вы "HAL stm-овский проект, который активно развивается и его вылизывают на сотнях, тысячах проектов..." на самолетный блок поставили бы, и если ни дай бог оно откажет или вывалится в HardFault... Тенденция лепить говно везде, я смотрю, очевидно набирает обороты. В общем, с Вами мне все понятно, обсуждать тут и нечего. Всего Вам наилучшего :laughing: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
0men 2 9 февраля, 2018 Опубликовано 9 февраля, 2018 · Жалоба Я бы посмотрел, как Вы "HAL stm-овский проект, который активно развивается и его вылизывают на сотнях, тысячах проектов..." на самолетный блок поставили бы, и если ни дай бог оно откажет или вывалится в HardFault... Тенденция лепить говно везде, я смотрю, очевидно набирает обороты. В общем, с Вами мне все понятно, обсуждать тут и нечего. Всего Вам наилучшего :laughing: Не везде требуется самолетная надежность. Я вот использую HAL, максимальный уровень оптимизации, сотни проборов, годы эксплуатации, сбоев нет. Все зависит от задачи и от кривизны рук. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
let's see 0 9 февраля, 2018 Опубликовано 9 февраля, 2018 · Жалоба Не везде требуется самолетная надежность. Я вот использую HAL, максимальный уровень оптимизации, сотни проборов, годы эксплуатации, сбоев нет. Все зависит от задачи и от кривизны рук. Про кривизну: Вы утверждаете, что минус на минус дает плюс? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Pat 0 9 февраля, 2018 Опубликовано 9 февраля, 2018 · Жалоба Про кривизну: Вы утверждаете, что минус на минус дает плюс? Некоторые до сих пор на ассемблере пишут и ничего. Тут вопрос скорее всего религиозный который возникал не раз. Типа ASM vs C C vs C++ RTOS vs plain C Дело в том кто с чего начал свое обучение. Перейти на новые инструменты не просто. Сам никогда Cube не пользовался, но в свете системных администраторов Ардуино HAL не такое и зло. Автору топика хочу посоветовать купить (если нет) логический анализатор типа китайский клон Saleae. Стоит копейки, но жизнь облегчает в разы. Когда настраиваю перефирею сразу подключаю его на порты микроконтроллера и все становится ясно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Hiehachi 0 20 февраля, 2018 Опубликовано 20 февраля, 2018 (изменено) · Жалоба HAL stm-овский проект, который активно развивается и его вылизывают на сотнях, тысячах проектов. а ваши самопальные библиотеки, заточенные под ваши личные проекты, используете только вы и сколько там косяков вам еще предстоит узнать. RTOS, файловую систему, .... вы видимо тоже свои пишете, по ночам, в свободное от основной работы время.. Косяки не пишу уже лет так 15, из 20 ... к примеру. Кто его развивает ? Специалисты ?! Кто будет вылаживать нормальный код, труд обкатанный годами во всеобщее пользование ?, это мягко говоря - антисоциально по отношению к проффесионалам. Для всех этих hardware опен сорсе - есть много общего: очень сложно выкорчевать, нереально дописать, присел - раб (трать время = деньги) - так как читать не умеешь документацию. Из всех неудобных мест по применению "универсального" кода - микроконтроллеры занимают первое место, так как постоянно приходится иметь дело с компромиссами (размер + скорость + оптимальная архитектура задачи + оптимальная работа с периферией). Применение языковых подходов для оптимизации кода, требует знания возможности и методов адресации процессорного ядра применяемого микроконтроллера. Всё это лучшее в существующей реализации кхала - отсутствует. А когда она будет допилена - то превратится в обычный код разработчика, с которым спорите по целесобразности применения кхала. Имел в виду разработчика со стажем, а не студента мечтателя. 1. Выгода применения аппаратной системы прерывания CORTEX - убита в корне. (ленивой программной реализацией - откатили до уровня 7TDMI). 2. Килобайты кода к контексте прерываний. (благо дело можно настроить приоритеты и разрешить вложенные, но это уже извращения на ровном месте). 3. Включаются прерывания, которые не разрешал. Корявая обработка. (неожиданные отработки прерываний, которые принципиально по архитектуре задачи не планировал и не разрешал) 4. Разработчики теряются и неправильно реализуют состояния программных статусов. (непонятный блуд с программными флагами и состояниями, невозможность гибкости в плане быстрого реагирования ) 5. Неумение работать даже с банальным UART, документацию не читают !!! (I2C) 6. Доведение до ума требует гарантированного выкорчевывания - 98 % кода, с куда более большими затратами по вниманию и времени. Любое из этого для меня лично критически - не приемлемо. STDLIB на stm32f7 - уже не поддерживается - жаль. Изменено 21 февраля, 2018 пользователем картошка Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться