Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: STM32F373 - проблемы с прошивкой
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
styuf
Добрый день, товарищи!

Возникла у меня такая проблема: появилась необходимость запрограммировать STM32F373 в наборе с разной периферией. В качестве программатара использую stm32l-discovery. В качестве среды - keil 5. Проект собрал, в качестве тестовой програмки решил помигать светодиодом на плате (PA1). Получился вот такой код:

CODE
#include "stm32f37x.h"

int i=0;

int main(void)
{
GPIO_InitTypeDef GPIO_IS;
/* GPIOD Periph clock enable */
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
GPIO_IS.GPIO_Pin = GPIO_Pin_All;
GPIO_IS.GPIO_Mode = GPIO_Mode_OUT;
GPIO_IS.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_IS.GPIO_OType = GPIO_OType_PP;
GPIO_IS.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOA, &GPIO_IS);

while(1)
{
GPIO_Write(GPIOA, 0xFF);
while(i<100000) i++;
i=0;
GPIO_Write(GPIOA, 0xFF);
while(i<100000) i++;
i=0;
}
}
#include "stm32f37x.h"

Сразу оговорюсь, не осознал прблему и затер старый код, так что возможно использовался порт B. Сам код эффекта не имеет (ибо при переходе по внутренним while-ам состояние не меняется).
Далее, я попытался прошиться из под keil через SW. Плата увиделась, прошивка прошла. А тут и началась беда. больше плата не распознавалась, понять почему, а тем более исправить, я не смог.

Попробовал стандартуную утилиту к ST-LINK - эффект тот-же: скорее всего исключил проблему с keil.
Попробовал вернуть программатар на МК discovery - работает: вроде как исключил проблемы с программатором.
Не пробовал: подключить кроме ног SWDIO и SWCLK еще ногу ресета. Завтра попробую, но очент=ь сложно - она никак не разведена на плате(

В голове созрел такой вариант: раз ноги SWDIO и SWCLK сопряжены с шиной порта A, я снял с них функцию отладочных входов/выходов.

Больше вариантов я не придумал, разве что МК погорел (чур меня).

Надеюсь на вашу мудрость и понимание вороса help.gif .
amiller
Вообще то я не силен в CMSIS, не приходилось использовать.
Но вроде как инициализируете порт F, а пишите в А, нет?
styuf
Поправил! Спасибо, что указали на ошибку. Как я уже сказал, код я старый затер, но точно помню, что все порты были в соответствии.
amiller
Тогда и далее в цикле:
Вы в обоих случаях пишите 0xFF, что не приводит к изменению состояния выходов.
Похоже код не имеет отношения к проблеме, если она вообще существует...
styuf
Код действительно не имеет смысла, о чем я и говорил в топике. Он был создан с единственной целью - прошить что-то в МК. опять же с другой стороны данный код не должен мешать последующей прошивке. Но проблема на лицо: первый раз проект залился в МК, после чего МК перестал определяться средствами прошивки и отладки.

И понимаю ваш скепсис по поводу проблемы. Проблема не с кодом, который не претендует на что-то правильное и работающее. Проблема вот с чем: мог ли я програмно обрезать себе функцию отладки и прошивки через порт SW, и если да, то как это исправить.
amiller
Значит я неправильно прочитал Ваше письмо.
Видимо проблема в том, что Вы задействовали _все_ выводы порта А, в том числе и интерфейса SWD.
Хотя чтобы отменить функционал SWD, надо вроде Remap ног делать.
Тем не менее ST-LINK Utility умеет прошивать в разных режимах.
Вероятно Вам поможет опция "Under Reset", или что-то в этом духе.
Чтобы прошивка ничего не успела сделать с ногами.
styuf
Попробовал сейчас снизить частоту для ST-LINK до 100 кГц. Не подключился. Перепробовал все комбинации режимов и ресетов - тоже самое.

Не пробовал еще подключить кроме ног SWDIO и SWCLK еще ногу ресета. Завтра попробую, но очень сложно - она никак не разведена на плате(
styuf
Проблема решилась добавкой ресета к SWD шине. Как правильно говорил amiller, если перезагрузить МК, то порт А не успеет проинициализироваться и прошиться удастся.
Думаю добавить теперь в код задержку перед инициализацией ног в несколько секунд, на всякий пожарный, что бы успевать прошиться, если что-то пойдет не так.
Сергей Борщ
QUOTE (styuf @ Jan 5 2017, 07:53) *
Думаю добавить теперь в код задержку перед инициализацией ног в несколько секунд, на всякий пожарный, что бы успевать прошиться, если что-то пойдет не так.
Вы просто когда будете перенастраивать порт А, настраивайте PA14, PA15 в режим SWD. Или просто не трогайте, если ваша библиотека такое позволяет.
Aleksandr Baranov
Цитата(styuf @ Jan 5 2017, 00:53) *
Думаю добавить теперь в код задержку перед инициализацией ног в несколько секунд, на всякий пожарный, что бы успевать прошиться, если что-то пойдет не так.


А почему нельзя жить дальше с добавленным ресетом, не думая ни о каких портах?
styuf
Цитата(Aleksandr Baranov @ Jan 6 2017, 00:48) *
А почему нельзя жить дальше с добавленным ресетом, не думая ни о каких портах?


Проблема вот в чем: плата уже используется по целевому назначению, никто переразводить её не будет ради добавления шины ресет от МК до порта SWD. А с напаянным к ножке МК проводком плату ни заказчику не покажешь, не на испытания не поставишь. Во и приходится изгаляться(
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.