|
I2C на плате STM32F4Discovery, не проходит запись в CS43L22 |
|
|
|
Feb 6 2018, 14:37
|
Местный
  
Группа: Свой
Сообщений: 247
Регистрация: 4-10-10
Из: г. Екатеринбург
Пользователь №: 59 925

|
Добрый день. Изучаю работу с STM32F407 с применением HAL-библиотек. Завис на изучении I2C. Пробую вести обмен с микросхемой CS43L22, которая стоит на плате. По схеме на плату вижу подключение ног I2C этой микросхемы к пинам PB6(SCL) и PB9(SDA)
Также по схеме вижу их подтяжку к питанию через 4,7 кОм  В STM32CubeMX создал проект и настроил эти пины STM-ки на интерфейс I2C
настроил скорость и параметры пинов (скорость обмена сделал маленькую - 10кГц, но пробовал и 100кГц)
В даташите на CS43L22 нашел циклограмму чтения
и пытаюсь вычитать ИД микросхемы, т.е. регистр с адресом 0х01 CODE 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 - по даташиту. Находил несколько статей по работе именно с этой микросхемой на этой плате, код примерно такой же. Смотрел видео-пример по работе с часами реального времени, там код вообще совпадает. Если кто работал с этой микросхемой, подскажите плз, где я мог накосячить? Код минимальный.
Сообщение отредактировал IgorKossak - Feb 7 2018, 14:15
Причина редактирования: [codebox] для длинного кода. [code]-для короткого!!!
|
|
|
|
|
 |
Ответов
|
Feb 9 2018, 02:23
|
Участник

Группа: Участник
Сообщений: 64
Регистрация: 20-12-16
Пользователь №: 94 698

|
Цитата(Arlleex @ Feb 6 2018, 23:11)  А вообще рекомендую потратить часок на изучение 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
Сообщение отредактировал op3op3 - Feb 9 2018, 02:24
|
|
|
|
|
Feb 9 2018, 05:05
|

Местный
  
Группа: Участник
Сообщений: 492
Регистрация: 12-11-11
Пользователь №: 68 264

|
Цитата(op3op3 @ Feb 9 2018, 06:23)  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... Тенденция лепить говно везде, я смотрю, очевидно набирает обороты. В общем, с Вами мне все понятно, обсуждать тут и нечего. Всего Вам наилучшего
|
|
|
|
|
Feb 9 2018, 12:59
|
Частый гость
 
Группа: Участник
Сообщений: 84
Регистрация: 7-05-05
Пользователь №: 4 819

|
Цитата(Arlleex @ Feb 9 2018, 08:05)  Я бы посмотрел, как Вы "HAL stm-овский проект, который активно развивается и его вылизывают на сотнях, тысячах проектов..." на самолетный блок поставили бы, и если ни дай бог оно откажет или вывалится в HardFault... Тенденция лепить говно везде, я смотрю, очевидно набирает обороты. В общем, с Вами мне все понятно, обсуждать тут и нечего. Всего Вам наилучшего  Не везде требуется самолетная надежность. Я вот использую HAL, максимальный уровень оптимизации, сотни проборов, годы эксплуатации, сбоев нет. Все зависит от задачи и от кривизны рук.
|
|
|
|
|
Feb 9 2018, 17:05
|
Местный
  
Группа: Участник
Сообщений: 328
Регистрация: 1-06-06
Из: USA
Пользователь №: 17 672

|
Цитата(0men @ Feb 9 2018, 07:59)  Не везде требуется самолетная надежность. Я вот использую HAL, максимальный уровень оптимизации, сотни проборов, годы эксплуатации, сбоев нет. Все зависит от задачи и от кривизны рук. Про кривизну: Вы утверждаете, что минус на минус дает плюс?
--------------------
|
|
|
|
Сообщений в этой теме
billidean I2C на плате STM32F4Discovery Feb 6 2018, 14:37 HardEgor Теоретически он не может повиснуть, должен вернуть... Feb 6 2018, 15:31 0men содержимое MX_I2C1_Init покажите и перед while(1)... Feb 6 2018, 15:38 Arlleex Цитата(0men @ Feb 6 2018, 19:38) содержим... Feb 6 2018, 16:01 0men что то мне подсказывает, что просто не включен кло... Feb 6 2018, 16:06     Pat Цитата(pitt @ Feb 9 2018, 19:05) Про крив... Feb 9 2018, 17:36  картошка Цитата(op3op3 @ Feb 9 2018, 05:23) HAL st... Feb 20 2018, 14:30 billidean Спасибо всем, текущая проблема решена...
Не увидел... Feb 6 2018, 18:18 sadat Выше неправильный вывод - просто HAL очень удобная... Feb 8 2018, 15:01
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|