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

 
 
3 страниц V  < 1 2 3 >  
Reply to this topicStart new topic
> Микроконтроллер STM32F407VD, Проблемы с прошивкой
smk
сообщение Apr 12 2014, 02:27
Сообщение #16


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Еще на житаге некоторые резисторы по 10к лишние.


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
Haamu
сообщение Apr 16 2014, 08:03
Сообщение #17


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

Группа: Участник
Сообщений: 90
Регистрация: 12-12-13
Пользователь №: 79 587



Перепаяли контроллер, проблема с USB осталась. Но нашлась одна особенность. Если запустить программу в режиме отладки, без всяких брейкпоинтов, ситуация не меняется. Но! После выхода из отладки комп начинает видить плату как COM-порт, собственно как и должен и всё работает. После перезапуска платы, снова перестает определяться. Где искать проблемму?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Apr 16 2014, 08:41
Сообщение #18


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Можно предположить, что при запуске отладки ваша среда совершает некие действия (настройку тактирования, отключение периферии или что-то еще), которые не дают вашей программе работать как задумано, ибо писавший программу программист полагался на значения периферийных регистров по умолчанию. При выходе из отладки отладчик на прощанье сбрасывает процессор и он начинает выполнять программу заново, но уже со сброшенной периферией. Более точно трудно сказать - вы не признались, какую среду разработки используете, а с телепатией у нас напряженка.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Haamu
сообщение Apr 16 2014, 08:53
Сообщение #19


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

Группа: Участник
Сообщений: 90
Регистрация: 12-12-13
Пользователь №: 79 587



Среда CoIDE. Программатор/отладчик ST-Link V2, расположенный на плате STM32F4Discovery.
Обнаружил еще одну особенность. Дело даже не в отладке. Отладчик отключен, USB подключен. Включаю питание платы, USB не определяется. Очень кратковременно, буквально в одно касание, замыкаю ресет на землю и после этого комп начинает видить плату, можно втыкать - вытыкать USB, всё работает, до выключения питания платы. Попробовал выпаять конденсатор С596, тот что на ресете, ситуация не изменилась.

Разобрался. Оказалось, что не успевал завестись внешний кварц. Увеличил HSE_STARTUP_TIMEOUT и всё заработало. А кварц не успевал стартовать, потому что емкости на нем слишком большие висели.
Но все-же для меня осталось загадкой, зачем контроллер пытается V-BUS к земле притянуть?

Сообщение отредактировал Haamu - Apr 16 2014, 10:55
Go to the top of the page
 
+Quote Post
Eminem
сообщение Apr 18 2014, 09:50
Сообщение #20


Участник
*

Группа: Участник
Сообщений: 52
Регистрация: 13-02-12
Пользователь №: 70 236



Haamu
А в чем Вы схемы рисуете?
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Apr 19 2014, 14:27
Сообщение #21


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Цитата
Но все-же для меня осталось загадкой, зачем контроллер пытается V-BUS к земле притянуть?

может чтобы определить есть внешние питание == подключение или нет? Ибо устройства с автономным питанием должны контролировать подключение через мониторинг VBUS, а не линии данных.
Go to the top of the page
 
+Quote Post
Haamu
сообщение Apr 21 2014, 14:17
Сообщение #22


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

Группа: Участник
Сообщений: 90
Регистрация: 12-12-13
Пользователь №: 79 587



Цитата(Eminem @ Apr 18 2014, 13:50) *
А в чем Вы схемы рисуете?

Я не рисую, я программист. А вообще вроде в Альтиуме. Но конкретно эта похоже еще в Пеинте подтерта.

Цитата(Golikov A. @ Apr 19 2014, 18:27) *
может чтобы определить есть внешние питание == подключение или нет? Ибо устройства с автономным питанием должны контролировать подключение через мониторинг VBUS, а не линии данных.

Похоже что так. Просто ввела в заблуждение инициализация этой ноги:
Код
  GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_10;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
  GPIO_Init(GPIOA, &GPIO_InitStructure);  
  GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_OTG_FS);
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Apr 21 2014, 17:49
Сообщение #23


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



я в этой инициализации ваще теряюсь) но вроде как к земле ее не тянули... а в альтернативных функциях все само работает, могли прочие поля структуры от копи паста остаться...

блин неужели так ноги инициализировать удобнее чем через 3-4 понятные строки?
выбор функции
выбор подтяжки (если надо)
направление
начальное значение?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Apr 21 2014, 21:21
Сообщение #24


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Haamu @ Apr 21 2014, 17:17) *
Просто ввела в заблуждение инициализация этой ноги:
Я не разбирался с системой USB этого контроллера, но строка GPIO_InitStructure.GPIO_OType = GPIO_OType_OD; как бы подсказывает, что этот вывод настраиваивается совсем не на ввод. В задачнике спрашивается: зачем этой ноге быть выходом с открытым коллектором? Если вы сможете это обосновать, вы наверняка поймете кто и зачем тянет ее к земле. Если же обосновать не сможете - вероятно придете к выводу, что тут и кроется ошибка.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Haamu
сообщение Apr 22 2014, 05:32
Сообщение #25


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

Группа: Участник
Сообщений: 90
Регистрация: 12-12-13
Пользователь №: 79 587



Прошу прощения, не тот кусок инициализации выложил, это от ноги ID. Инициализация V-Bus отличается лишь тем, что там не открытый коллектор, а push-pull, но сути это не меняет. Перерыл весь USB-стек и не увидел нигде, чтобы V-Bus явно подтягивалась к земле, кроме работы в режиме хоста, где она отвечает за подачу питания на подключенное устройство. Следовательно, подтягивать ее к земле в режиме девайса может только альтернативная функция.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Apr 22 2014, 05:49
Сообщение #26


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



А она в альтернативную функцию настроена, или для STM это ничерта не значит?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Apr 22 2014, 07:37
Сообщение #27


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Haamu @ Apr 22 2014, 08:32) *
отличается лишь тем, что там не открытый коллектор, а push-pull, но сути это не меняет.
То есть все равно выход? Вероятно вам все же стоит почитать описание этой ноги и работы с ней в руководстве пользователя. Поверьте, в примерах из интернета могут быть ошибки. Даже если эти примеры распространяет производитель контроллера.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Haamu
сообщение Apr 22 2014, 13:28
Сообщение #28


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

Группа: Участник
Сообщений: 90
Регистрация: 12-12-13
Пользователь №: 79 587



Да, эта нога настроена на работу альтернативной функции, соответственно и управляется она этой самой альтернативной функцией.
Кстати, на другой плате с аналогичной схемой подключения USB, эта нога ведет себя точно так-же.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Apr 22 2014, 13:47
Сообщение #29


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



VBUS, как я предполагаю, нужна для включения подтягивающего резистора на D+ (или D- для Low speed). Естественно, она должна быть выходом, OD или PP - неважно.
Надо посмотреть по схеме, какой полярностью включается этот подтягивающий резистор. Там, наверное, и транзистор есть. А то и два. sm.gif
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Apr 23 2014, 07:15
Сообщение #30


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(ViKo @ Apr 22 2014, 16:47) *
VBUS, как я предполагаю, нужна для включения подтягивающего резистора на D+ (или D- для Low speed).
Драссте. Ну откройте же описание. VBus - вход во всех режимах работы USB. Сигнал VBUS не входит в группу альтернативных функций (Alternative function) соответствующего разряда порта. Он является дополнительной функцией (Additional function) и включается настройками USB-контроллера, а не порта. И когда вы включаете альтернативную функцию на этой ноге вы подключаете к ней выход какой-то другой периферии.

Блин, да ну вас нафиг - три дня мусолить тему, которая в даташите ищется за две минуты. Причем почитать документацию автору темы предлагалось уже давно.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post

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

 


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


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