Перейти к содержанию

    

STM32 – вопросы – проблемы - решения.

Привет всем, столкнулся с такой проблемой в STM32F100RB, проблема решена на данный момент, но думаю будет полезно осваивающим. В проекте используются 3 канала АЦП, проводится преобразование входных сигналов с максимальной частотой - 1.2мкс по очереди и данные передаются через DMA в память, далее обработка и тому подобное, пользую IAR EW. Создал проект, в режиме дебага все отлаживается, проверил работоспособность программы, завершаю дебаг, далее вношу еще изменения в проект, пытаюсь снова войти в режим отладки и все... IAR ругается что невозможно соединиться с платой, первоначавльно думал что проц сгорел. Хотя фирмаваре внутри камня крутится и нормально работает! Зашил эту же программу в STM32VLDiscovery и ситуация полностью повторилась. Долго чесал затылок, в итоге попробовал приконнектиться к плате с помощью софтины ST-Link Utility и на тебе, микроконтроллер виден! Очистил прошивку, передернул питание, далее снова в IAR EW, проблема исчезает, но стоит 1 раз прошить и ситуация повторяется с точностью. Вдоль и поперек занимался любовью с DMA и АЦП, не помогло, но выяснил, что перед тем как нажать кнопку дебага или перепрошивки в софтине, необходимо нажать кнопку ресета на плате и вуалля, шьется как ни в чем не бывало! Далее собрал проект под uVision, там такая проблема не повторилась. Соответственно все подозрения пали на IAR EW. В итоге воспользовался техподдержкой ST, ребята 2 дня думали и написали ответ, что это косяк IAR EW. В кратце, при прошивке IAR EW сбрасывает только ядро, далее грузится в ОЗУ алгоритм загрузки кода flash, но в это время DMA передает данные с каналов АЦП в память, соответственно происходит конфликт и микроконтроллер зависает. В итоге они мне прислали исправленный файл ххх.mac, который необходимо скормить IAR EW по адресу по пути - вашадиректория\Embedded Workbench 6.0\arm\config\flashloader\ST\. Так и сделал, проблема исчезла. В общем, теперь остановка DMA происходит, файл прикрепил, необходимо его распаковать.

P.S. Всем удачи в нашем нелегком труде! В следующем релизе IAR обещали исправить эту проблему:-)

FlashSTM32F10xxx.zip

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вернувшись к проекту через год неожиданно наткнулся на проблему с драйвером STM Virtual COM Port. С тех пор OS рабочем компе сменилась с XP на Win7. Использовал демонстрационный проект Virtual_COM_Port из STM32_USB-FS-Device_Lib_V3.1.0.

Проблема в следующем: при подключении прибора к USB порту устройство STMicroelectronics Virtual COM Port появляется, но не может запуститься: Запуск этого устройства невозможен. (Код 10). Отчасти проблема решается установкой буфера приема = 64 байта (VIRTUAL_COM_PORT_DATA_SIZE), но работа порта неустойчива, прием идет со сбоями

Пробовал VCPDriver: v1.1, v1.2, v1.3

 

На XP все работало без глюков, с любым размером буфера

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Пробовал VCPDriver: v1.1, v1.2, v1.3

Интересно, чем они отличаются. Учитывая, что это и не драйвер по сути, просто inf файл. Драйвер родной виндовый usbser, который в разных версиях винды может отличаться.

Глянуть бы каким-нибудь usblyzer-ом что там происходит.

 

 

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Привет спецы, интересует STM32F2XX: интерфейс подключения камеры. Планирую заложить в новый проект. Кто нить использовал уже опытные образцы?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не пойму, нужно ли выводить ресет на разьем SWD? Или достаточно SWCLK и SWDIO ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Не пойму, нужно ли выводить ресет на разьем SWD? Или достаточно SWCLK и SWDIO ?

Достаточно, на мелких платах только их и использую.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Достаточно, на мелких платах только их и использую.

Спасибо. А на крупных платах как поступаете? Разводите JTAG?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Тоже вывожу только SWCLK и SWDIO. Выводить JTAG смысла не вижу: разве JTAG даёт какое-нибудь преимущество над SWD при отладке?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Тоже вывожу только SWCLK и SWDIO. Выводить JTAG смысла не вижу: разве JTAG даёт какое-нибудь преимущество над SWD при отладке?

Вроде скорость заливки во FLASH выше.

Я правильно понимаю, что в любой момент времени, если на пинах SWCLK и SWDIO появится определённая последовательность данных, проц перейдёт в режим отладки? Получается потенциально опасная ситуация

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Я правильно понимаю, что в любой момент времени, если на пинах SWCLK и SWDIO появится определённая последовательность данных, проц перейдёт в режим отладки? Получается потенциально опасная ситуация

Вот что сказано в руководстве по STM32:

If the debugger host wants to switch to the SW-DP, it must provide a dedicated JTAG

sequence on TMS/TCK (respectively mapped to SWDIO and SWCLK) which disables the

JTAG-DP and enables the SW-DP. This way it is possible to activate the SWDP using only

the SWCLK and SWDIO pins.

This sequence is:

1. Send more than 50 TCK cycles with TMS (SWDIO) =1

2. Send the 16-bit sequence on TMS (SWDIO) = 0111100111100111 (MSB transmitted first)

3. Send more than 50 TCK cycles with TMS (SWDIO) =1

Я так понимаю, этот танец с бубном сделан таким для того, чтобы он никак не мог произойти при нормальном использовании JTAG. Поэтому можно спать спокойно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
если на пинах SWCLK и SWDIO появится определённая последовательность данных, проц перейдёт в режим отладки? Получается потенциально опасная ситуация

Не проц перейдет в режим отладки, а JTAG переключится в режим SWD.

Резет теоретически может пригодиться на случай, если прошивка переводит мк в режим, когда отладчик не может подключиться.

Но я бы на этот случай подключал boot0 на землю через резистор, чтобы в крайнем случае можно было запустить бутлоадер и потом отладчик.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

привет всем! Хочу использовать одновременно IWDG и STOP режим. Как-то это можно обыграть? Я так понимаю, если я войду в спячку, то вачдог сбросит МК.

Изменено пользователем Ivan Kuznetzov

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ivan Kuznetzov Дауж врятли, скорее всего вместе с контроллером уснёт и вачдог.

У Renesas_a такое есть.

Изменено пользователем Murk

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Проверил: если проц перевести в STOP при включенном IWDG, то последний сбросит МК. Т.е. надо вачдог как-то обновлять во время спячки

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Кто-нибудь пробовал применить встроенный CEC интерфейс для чего-нибудь полезного? Например, в качестве дополнительного UART или I-wire (если это вообще возможно) ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Гость
Эта тема закрыта для публикации ответов.