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

 
 
> I2C на плате STM32F4Discovery, не проходит запись в CS43L22
billidean
сообщение Feb 6 2018, 14:37
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 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]-для короткого!!!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 13)
HardEgor
сообщение Feb 6 2018, 15:31
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 223
Регистрация: 3-03-06
Из: Tomsk
Пользователь №: 14 925



Теоретически он не может повиснуть, должен вернуть ошибку timeout.
А timeout работает через прерывания systick, он у вас включен и настроен?

Или в отладчике пошагово посмотрите где повис.
Go to the top of the page
 
+Quote Post
0men
сообщение Feb 6 2018, 15:38
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 84
Регистрация: 7-05-05
Пользователь №: 4 819



содержимое MX_I2C1_Init покажите и перед while(1) напишите
__enable_interrupt();


Сообщение отредактировал 0men - Feb 6 2018, 15:45
Go to the top of the page
 
+Quote Post
Arlleex
сообщение Feb 6 2018, 16:01
Сообщение #4


Местный
***

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



Цитата(0men @ Feb 6 2018, 19:38) *
содержимое MX_I2C1_Init покажите и перед while(1) напишите
__enable_interrupt();


По-умолчанию, после старта MCU прерывания разрешены, поэтому нет необходимости разрешать их.
Go to the top of the page
 
+Quote Post
0men
сообщение Feb 6 2018, 16:06
Сообщение #5


Частый гость
**

Группа: Участник
Сообщений: 84
Регистрация: 7-05-05
Пользователь №: 4 819



что то мне подсказывает, что просто не включен клок... __I2C1_CLK_ENABLE();
Go to the top of the page
 
+Quote Post
Arlleex
сообщение Feb 6 2018, 16:11
Сообщение #6


Местный
***

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



А вообще рекомендую потратить часок на изучение I2C целевого STM32 и написать свои функции чтения/записи (попутно обработку ошибок реализовать, в частности, зависание шины).
Наблюдаю тенденцию каждого третьего вопроса как раз про эти ваши HAL-ы. Создается впечатление, что это г*вно изобретение ленивых людей похуже индусских драйверов на встроенное железо... biggrin.gif

Сообщение отредактировал Arlleex - Feb 6 2018, 16:12
Go to the top of the page
 
+Quote Post
billidean
сообщение Feb 6 2018, 18:18
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 247
Регистрация: 4-10-10
Из: г. Екатеринбург
Пользователь №: 59 925



Спасибо всем, текущая проблема решена...
Не увидел сначала на схеме, что на Reset по умолчанию подан ноль. Подцепил порт PD4, подал на него 1 - и все заработало.
Но это я только начал с этим разбираться, возможно дальше еще на что-нибудь "наступлю" biggrin.gif ...тогда продолжу эту тему..
Go to the top of the page
 
+Quote Post
sadat
сообщение Feb 8 2018, 15:01
Сообщение #8


Частый гость
**

Группа: Свой
Сообщений: 117
Регистрация: 6-07-05
Из: Белгород
Пользователь №: 6 575



Выше неправильный вывод - просто HAL очень удобная отмазка - " а у меня не работает". Не спорю, есть "тонкие места", да и самому приходилось патчить код - но вот так вот клеймить фекалиями не стоит.
Go to the top of the page
 
+Quote Post
op3op3
сообщение Feb 9 2018, 02:23
Сообщение #9


Участник
*

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



Цитата(Arlleex @ Feb 6 2018, 23:11) *
А вообще рекомендую потратить часок на изучение I2C целевого STM32 и написать свои функции чтения/записи (попутно обработку ошибок реализовать, в частности, зависание шины).
Наблюдаю тенденцию каждого третьего вопроса как раз про эти ваши HAL-ы. Создается впечатление, что это г*вно изобретение ленивых людей похуже индусских драйверов на встроенное железо... biggrin.gif

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
Go to the top of the page
 
+Quote Post
Arlleex
сообщение Feb 9 2018, 05:05
Сообщение #10


Местный
***

Группа: Участник
Сообщений: 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... Тенденция лепить говно везде, я смотрю, очевидно набирает обороты.
В общем, с Вами мне все понятно, обсуждать тут и нечего. Всего Вам наилучшего laughing.gif
Go to the top of the page
 
+Quote Post
0men
сообщение Feb 9 2018, 12:59
Сообщение #11


Частый гость
**

Группа: Участник
Сообщений: 84
Регистрация: 7-05-05
Пользователь №: 4 819



Цитата(Arlleex @ Feb 9 2018, 08:05) *
Я бы посмотрел, как Вы "HAL stm-овский проект, который активно развивается и его вылизывают на сотнях, тысячах проектов..." на самолетный блок поставили бы, и если ни дай бог оно откажет или вывалится в HardFault... Тенденция лепить говно везде, я смотрю, очевидно набирает обороты.
В общем, с Вами мне все понятно, обсуждать тут и нечего. Всего Вам наилучшего laughing.gif


Не везде требуется самолетная надежность. Я вот использую HAL, максимальный уровень оптимизации, сотни проборов, годы эксплуатации, сбоев нет. Все зависит от задачи и от кривизны рук.
Go to the top of the page
 
+Quote Post
pitt
сообщение Feb 9 2018, 17:05
Сообщение #12


Местный
***

Группа: Участник
Сообщений: 328
Регистрация: 1-06-06
Из: USA
Пользователь №: 17 672



Цитата(0men @ Feb 9 2018, 07:59) *
Не везде требуется самолетная надежность. Я вот использую HAL, максимальный уровень оптимизации, сотни проборов, годы эксплуатации, сбоев нет. Все зависит от задачи и от кривизны рук.

Про кривизну: Вы утверждаете, что минус на минус дает плюс?


--------------------
Прокричал немой глухому:"...Спасибо за внимание!"
http://www.youtube.com/watch?v=3Nnj4ky4Z_g
Go to the top of the page
 
+Quote Post
Pat
сообщение Feb 9 2018, 17:36
Сообщение #13


Местный
***

Группа: Свой
Сообщений: 421
Регистрация: 27-05-05
Из: Энергодар
Пользователь №: 5 480



Цитата(pitt @ Feb 9 2018, 19:05) *
Про кривизну: Вы утверждаете, что минус на минус дает плюс?


Некоторые до сих пор на ассемблере пишут и ничего.
Тут вопрос скорее всего религиозный который возникал не раз.
Типа ASM vs C
C vs C++
RTOS vs plain C

Дело в том кто с чего начал свое обучение.
Перейти на новые инструменты не просто.

Сам никогда Cube не пользовался, но в свете системных администраторов Ардуино HAL не такое и зло.

Автору топика хочу посоветовать купить (если нет) логический анализатор типа китайский клон Saleae.
Стоит копейки, но жизнь облегчает в разы.
Когда настраиваю перефирею сразу подключаю его на порты микроконтроллера и все становится ясно.
Go to the top of the page
 
+Quote Post
картошка
сообщение Feb 20 2018, 14:30
Сообщение #14


Участник
*

Группа: Участник
Сообщений: 65
Регистрация: 28-12-05
Из: Odessa
Пользователь №: 12 673



Цитата(op3op3 @ Feb 9 2018, 05:23) *
HAL stm-овский проект, который активно развивается и его вылизывают на сотнях, тысячах проектов. а ваши самопальные библиотеки, заточенные под ваши личные проекты, используете только вы и сколько там косяков вам еще предстоит узнать. RTOS, файловую систему, .... вы видимо тоже свои пишете, по ночам, в свободное от основной работы время..

Косяки не пишу уже лет так 15, из 20 ... к примеру.

Кто его развивает ? Специалисты ?! Кто будет вылаживать нормальный код, труд обкатанный годами во всеобщее пользование ?, это мягко говоря - антисоциально по отношению к проффесионалам.
Для всех этих hardware опен сорсе - есть много общего: очень сложно выкорчевать, нереально дописать, присел - раб (трать время = деньги) - так как читать не умеешь документацию.
Из всех неудобных мест по применению "универсального" кода - микроконтроллеры занимают первое место, так как постоянно приходится иметь дело с компромиссами (размер + скорость + оптимальная архитектура задачи + оптимальная работа с периферией). Применение языковых подходов для оптимизации кода, требует знания возможности и методов адресации процессорного ядра применяемого микроконтроллера. Всё это лучшее в существующей реализации кхала - отсутствует. А когда она будет допилена - то превратится в обычный код разработчика, с которым спорите по целесобразности применения кхала. Имел в виду разработчика со стажем, а не студента мечтателя.

1. Выгода применения аппаратной системы прерывания CORTEX - убита в корне. (ленивой программной реализацией - откатили до уровня 7TDMI).
2. Килобайты кода к контексте прерываний. (благо дело можно настроить приоритеты и разрешить вложенные, но это уже извращения на ровном месте).
3. Включаются прерывания, которые не разрешал. Корявая обработка. (неожиданные отработки прерываний, которые принципиально по архитектуре задачи не планировал и не разрешал)
4. Разработчики теряются и неправильно реализуют состояния программных статусов. (непонятный блуд с программными флагами и состояниями, невозможность гибкости в плане быстрого реагирования )
5. Неумение работать даже с банальным UART, документацию не читают !!! (I2C)
6. Доведение до ума требует гарантированного выкорчевывания - 98 % кода, с куда более большими затратами по вниманию и времени.

Любое из этого для меня лично критически - не приемлемо.

STDLIB на stm32f7 - уже не поддерживается - жаль.

Сообщение отредактировал картошка - Feb 21 2018, 08:18
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 7th July 2025 - 18:17
Рейтинг@Mail.ru


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