Решено: STM32F103C не сохраняет программу, загружается ли он в ОЗУ

гравер
Пн 27 марта 2017 г. 1:41
Не уверен, был ли это лучшим форумом для моего вопроса; Может быть, "библиотеки и оборудование" были бы лучше?
(Синяя таблетка, IDE 1.8.0, Windows 7 OS) Я не мог найти ничего в часто задаваемых вопросах или форуме, которые, кажется, решают это. Вот как это началось...
Я вкладывал последние штрихи на свой код. После загрузки я отключаю сериал с TTL и подключаю плату к высокой текущей плате драйвера, измените две программные шунты/ремешки/шорты, чтобы Boot0 и Boot1 были низкими. Код обычно работает, когда он будет включен. Он перестал сохранять код. Поэтому я использовал другой компьютер, и код был сохранен, и все работали хорошо. После еще 3 циклов компиляции и загрузки, он начал делать то же самое. После удаления питания, Shunt Set Boot0 до минимума, STM32 был мертв. Я предполагаю, что код загружается в оперативную память, а затем запускается оттуда. Но я никогда ничего не менял в своей IDE; Все, что я изменил, это код в моей программе.
Я помню, что некоторые в моем STM32 путешествуют, я прочитал что -то о высоком Boot1 (логично 1) загрузит код, а затем запускается с оперативной памяти. Не мог найти это в моем ноутбуке, хотя. Я пробовал 4 других синих таблеток (купленных в разное время), но они не сохраняют код. Какой вид исключает позицию Boot1. Все синие таблетки работали правильно раньше.
Я попробовал версию 1.8.2, а потом это даже не скомпилировалось, но это был я. Я не запускал менеджер доски для загрузки плат STM32. (Роджер Кларк....Просто чтобы вы знаете, некоторые из нас читают часто задаваемые вопросы. ;) ) У кого -нибудь есть идеи, что случилось? Не уверен, что это связано, но моя установка использовала «портатив» 1.8.0. IDE. У меня были IDE и папка для моих программ в моей «Drop Box», которая позволила мне работать на любом из моих 3 компьютеров. С тех пор я пробовал все 4 компьютера в доме, все Win 7 Home Premium 64bit 64bit. UCS просто не сохраняет код. ??

гравер
Пн 27 марта 2017 г. 1:48
Мне придется посмотреть, будет ли прикрепление батареи к VBAT сохранить код. Не лучшее решение, но это может провести меня до тех пор, пока я не смогу решить проблему. Видел что -то об этом в «Re: Guide:« Я новичок здесь - какая доска мне стоит купить?"

гравер
Пн 27 марта 2017 г., 3:27
Я еще не исправил проблему, но у меня есть......Я нашел достаточно информации, чтобы подключить свой ST-Link V2. Я могу скачать свой код через ST-Link, и он сохраняет код. Однако....Я не уверен, как получить выход из серийного.печать. Даже использование USB -серийного модуля, который появляется (в моей системе как COM59) Ничто не отображается на мониторе. Мне придется подумать/найти еще немного. ST-Link, кажется, работает достаточно хорошо. Теперь просто нужно выяснить, как использовать его в полной мере для отладки.

Стивестронг
Пн 27 марта 2017 г. 8:29
Серийная карта зависит от метода загрузки следующим образом:

[*] Bootloader & ST-Link:
Serial = Usbeserial
Serial1 = usart1
Serial2 = usart2
Serial3 = usart3
[*] Сериал:
Serial = USART1
Serial1 = usart2
Serial2 = usart3

Видеть http: // www.STM32duino.com/viewtopic.PHP ... 462#P25373.

Эдогальдо
Пн 27 марта 2017 г. 8:47 утра
Еще один совет: даже если вы загружаете с Serial, Framework STM32Duino предполагает, что у вас установлен загрузочный загрузчик, на самом деле он компилирует и загружает эскиз для адреса 0x08002000.
Если у вас нет загрузчика, то в следующем перезапуске MCU ничего не найдет на 0x08000000 и, следовательно, не запустит ваш эскиз..


Извините, я дважды проверил и с помощью последовательной загрузки код скомпилирован для адреса по телефону 0x08000000, поэтому, пожалуйста, игнорируйте то, что я написал..

гравер
Пн 27 марта 2017 г. 15:13
@edogaldo Спасибо, что нашли время ответить. Для меня код компилируется для 0x08000000 как для серийного, так и для ST-Link.
Изменение сериала. для серийного1. позаботился о мониторе. Это небольшая боль, чтобы переключаться между Com1 (ST-Link) и COM59 (серийный монитор), но она работает. Спасибо за помощь!
Поскольку удобно использовать 4-булавский заголовок в конце синей таблетки, я, вероятно, буду использовать ST Link для программирования. Мне придется сделать поиск, чтобы увидеть, что я могу сделать со ST-Link. Прошло много времени с тех пор, как я использовал лед. С тех пор, как я начал использовать Arduino, у меня не было ничего для отладки, кроме серийного монитора.
Поскольку я могу в конечном итоге использовать как «USB-сериал», так и «ST-Link» для программирования, я собираюсь настроить свой код как код как
#define Serial Serial1. // или сериал.
Сериал.Печать станет серийным.Печать, которая станет последовательной.Печать или сериал1.Печать на основе оператора #Define. Таким образом, я могу изменить код, изменив сериал #Define на сериал. или serial1. Или есть лучший способ сделать это?

гравер
Пн 27 марта 2017 г. 15:19
Я использую загрузчик, который появился на синей таблетке. Будет ли STM32duino-Bootloader от https: // github.com/rogerclarkmelbourne/ ... загрузчик Исправьте проблему, которая была у меня при загрузке кода через USB на сериал?

гравер
Пн 27 марта 2017 г. 16:11
Ну, после игры с #define PRINT_INFO #define SERIAL Serial //or Serial1 if using the st-link

гравер
Вт 28 марта 2017 г. 1:32 утра
Ну, это вернулось к тому, что делал раньше. Он загружается в оперативную память и уходит после велосипедного мощности или нажатия сброса. То же самое с использованием ST-Link или USB для серийного TTL. Я готов кричать!

гравер
Вт 28 марта 2017 г. 2:16 утра
Настроен для загрузки ST-Link. ST-Link на com1
Это код, который я использовал для тестирования на штифты PWM. Под кодом вывод компиляции.
Я потратил более 30 часов на это. Я готов бросить все STM32 в мусор.
Я не вижу ничего, что красное флаг!
#define MAX_LEVEL 65535 //+++++++++++++++++++++++++++++++++++++++++++++++++setup++++++++++++++++++++++++++++++ void setup() { for(int i=0;i<=31;i++) { pinMode(i,PWM); pwmWrite(i,0); } }//------------------end of setup-------------- //+++++++++++++++++++++++++++++++++++++++++++++++ main loop() +++++++++++++++++++++++++++++ void loop() { for(int index=0;index<=31;index++) { for(int level=0;level<=MAX_LEVEL;level += 50) { pwmWrite(index, level); delay(1); }//end of increase level for(int level = MAX_LEVEL; level >= 0;level -= 50) { pwmWrite(index, level); delay(1); }//end of decrease level pwmWrite(index, 0); }//end of index loop }//------------------------------------end of main loop ----------------------------------------------

Стивестронг
Вт 28 марта 2017 г. 8:54 утра
Grassm написал: //+++++++++++++++++++++++++++++++++++++++++++++++++setup++++++++++++++++++++++++++++++ void setup() { for(int i=0;i<=31;i++) { pinMode(i,PWM); pwmWrite(i,0); } }//------------------end of setup--------------

гравер
Вт 28 марта 2017 г. 16:46
Привет, Стив,
Тогда как последовательно переходить через булавки?

Эдогальдо
Вт 28 марта 2017 г. 16:52
Grassm написал:Привет, Стив,
Тогда как последовательно переходить через булавки?

гравер
Вторник 28 марта 2017 г. 18:08
Привет, Стив,
Я никогда не помню ничего об этом массиве. Это не значит, что я никогда не видел этого; Я просто не помню этого. В 66 лет я забыл быстрее, чем могу научиться.

Я изменил свой код и добился некоторого прогресса. То, как я обращался/настраивал выводы, вызывало проблемы.
Похоже, я могу обратиться к булавкам по имени целочисленного целого числа в цифровом режиме, и все в порядке, но не нравится при выполнении ШИМ.

У меня есть некоторое тестирование, и если все это соберется, я опубликую то, что найду.
еще раз спасибо. Я действительно могу тебе! : oops:

гравер
Вт 28 марта 2017 г., 21:52
@edogaldo и stevestestrong не понимали, что вы оба помогли с названием PIN -кода. Спасибо вам обоим.
После того, как я полностью протестирован, я помежу это как решенное и приведя к результатам. : D

гравер
Ср 29 марта 2017 г., 4:07
Большое спасибо Эдогальдо и Стивесструнгу за их помощь.
Решено:
Я обращался к булавкам, используя массив, который содержал номер PIN -кода в том порядке, в котором я их хотел. Я бы сделал бы pwmwrite (1, значение). // A8, A11, B1, B0, A7, A6, A3, A2, A1, A0, B6, B7 int ledPin[] = { 8, 11, 17, 16, 7, 6, 3, 2, 1, 0, 22, 23 }; //organize all PWM pins best layout order.

гравер
Пт 31 марта 2017 г. 2:56 утра
Ну, может быть, я говорил слишком рано. Я использовал аналоговую запись (Boardpwmpins [index], значение). Когда я переоделся на PWMWrite (Boudpwmpins [index], значение); Код пропустит первый и последний пин -код доски.CCP объявил массив. После некоторого царапины головы, резервного копирования до последнего знания хорошей кодовой версии и изменяя небольшие детали за раз, оказывается, что если я использую аналоговую запись (boardpwmpins [index], значение), тогда он больше не пропускает 1 -е и последнее штифт массива. Когда я говорю, Skip, я имею в виду, что UC обрабатывает оператор, но подключенный к ним пин/светодиод не отвечает. Я проверял это несколько раз. Моя Сент-Линк перестала работать :зло: Итак, я вернулся к использованию USB для серийного TTL. Используя серийный монитор (который испортит контакты A9 и A10), я распечатал номер индекса в Bordpwmpin [] и значение из массива. Эти печатные выходы всегда были правильными и всегда одинаковыми.
Итак, я не уверен, что происходит, но это кажется ошибкой. Может быть, мой код. Программа (Hate the Word Sketch) имеет основную вкладку (с основной циклом и настройкой) вместе с 12 другими вкладками для разных последовательностей. Я не использую .c или что -нибудь, так что это становится .Ино.
На фоне: прошло много времени с тех пор, как я запрограммировал в Turbo C (1996), и я не смог получить .c или .Расширения файлов CCP для работы. У меня было обучение по программированию, но это был Гулд Сел в 1988 году. У меня тоже был Паскаль. Никогда не имел повесы. Большая часть остальной части моего программирования была в ASM86. Если кто -то хочет посмотреть на мой код, я могу застегнуть каталог и отправить его. Или я мог бы вырезать и вставить все это в кодовые кронштейны.
Я пошел с STM32, потому что мне нужно было больше штифтов ШИМ, чем Nano или Mini предоставляют.
Программа предназначена для большой световой планки для парада. Так что это не важно. Только последовательность Рыцаря -Райдера нуждалась в ШИМ для зацепленных светодиодов.

Стивестронг
Пт 31 марта 2017 г. 7:20 утра
Вы можете опубликовать код на GitHub, чтобы он был записан для бесконечности 8-)
Затем мы можем посмотреть на это.

Эдогальдо
Пт 31 марта 2017 г. 10:50 утра
Grassm написал:Ну, может быть, я говорил слишком рано. Я использовал аналоговую запись (Boardpwmpins [index], значение). Когда я переоделся на PWMWrite (Boudpwmpins [index], значение); [...]

гравер
SAT 01 апреля 2017 12:26
@ Эдогальдо да, я знаю об этих двух различиях. Я все еще буду играть с этим; Мне не нравится не понимать, что происходит. Вот почему я так люблю сборку; Я могу контролировать почти все! Я сделал инициализированные выводы, прежде чем использовать заявления PWMWrite (,). Если я не использую оператор Analogwrite (,) на всех контактах хотя бы один раз, некоторые из них не работают так, как они должны, когда я использую Pwmwrite (). Как я уже сказал. У меня есть Segger J-Link. Теперь мне действительно нужно в этом.

@stevestrong: я никогда не писал на Github, но я посмотрю на него. Это не значит, что кто -то собирается заработать деньги из этого кода. Позвольте мне просмотреть код еще пару раз, а потом я посмотрю, что я должен сделать, чтобы опубликовать его.

Еще раз спасибо вам обоим за вашу помощь. Нет ничего хуже, чем быть в одиночестве с проблемой.
Ваше здоровье!

гравер
SAT 01 апреля 2017 г. 3:14
ОК, Стив, я думаю, что у меня есть правильно настроить на GitHub. https: // github.com/Grassm/светодиодный свет-шпилочный сериал
Первый раз, чтобы я сделал что -то не так; дайте мне знать. Видео тоже работает.
еще раз спасибо!

ZMEMW16
SAT 01 апреля 2017 3:22
Я надеюсь, что у вас была защита глаз на : D

гравер
SAT 01 апреля 2017 3:34
zmemw16 я не смотрю прямо на это! :)

ZMEMW16
SAT 01 апреля 2017 3:41
Это было достаточно плохо для камеры, я тоже мигал, а также несколько точек
: D

Эдогальдо
SAT 01 апреля 2017 г., 6:20 утра
Grassm написал:ОК, Стив, я думаю, что у меня есть правильно настроить на GitHub. https: // github.com/Grassm/светодиодный свет-шпилочный сериал
Первый раз, чтобы я сделал что -то не так; дайте мне знать. Видео тоже работает.
еще раз спасибо!

Стивестронг
SAT 01 апреля 2017 г. 9:26 утра
Правильная последовательность инициализации штифта должна выглядеть так (как также упомянул Эдогальдо): for (index =FIRST_LED; index<= LAST_LED; index++) { pinMode(boardPWMPins[index], PWM ); pwmWrite(boardPWMPins[index],0); }

гравер
SAT 01 апреля 2017 14:12
Эдольдаго и Стивестронг:
Я всегда поражаюсь, как я могу посмотреть на что -то по крайней мере 100 раз и не видеть это!
Я вернулся к тому, когда я конвертировал из аналога в pwmwrite, и это было все время.for (inDex =FIRST_LED; inDex<= LAST_LED; inDex++) { pinMode(inDex, PWM ); pwmWrite(boardPWMPins[inDex],0); #ifdef PRINT_INFO SERIAL.println( boardPWMPins[inDex] ); #endif }

гравер
SAT 01 апреля 2017 14:25
Стив,
Я все еще смущен вашим комментарием: Стивестронг написал:
Тем не менее, индексация массива по -прежнему опасна, потому что Last_Led может быть (случайно) выше, чем SizeOf (BORDPWMPINS []).
Как бы вы закодировали петлю для индекса var? Я не спорю с тобой; Я серьезно хочу учиться! Я хорошо знаю, я тоже не самый острый в сарае! Какой лучший способ сделать эту инициализацию PIN -кода?
...и не уверен в правильном способе использования форума »Цитата."Мне пришлось вручную поместить тест в цитату, но оно заканчивается в реальной цитате. Ваш появляется на линии с большой кавычками.

Стивестронг
SAT 01 апреля 2017 14:34
- Как процитировать? Нажмите знака кавычки, который вы хотите цитировать (вверху справа).
Или введите:
[quote="stevestrong"] bla bla [/quote]

гравер
SAT 01 апреля 2017 г. 15:01
Ааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааа! Старый размер. Очевидно, что я не использую достаточно. : oops: и имеет смысл. По моему мнению (где я довольно часто ошибаюсь), моя мысль заключалась в том, что «чужой код не может знать, сколько светодиодов или элементов в моем массиве. И, если они изменят свой код, делая его меньше, чем мне нужно, это сломает мой код. Ну, это сломает мой код в любом случае. Итак, да, я вижу вашу точку зрения и согласен. Sizeof () - это способ сделать это.
Теперь, если бы мне понадобилось только 10 из 12 булавок, было бы лучше кодировать это как for (index=0; index<=sizeof(boardPWMPins[])/sizeof(uint8_t)); index++) { if( index > sizeof(boardPWMPins[]) Serial.println( "index exceeds array size") else { pinMode(boardPWMPins[index], PWM ); pwmWrite(boardPWMPins[index],0); } }

Стивестронг
SAT 01 апреля 2017 г., 8:40 вечера
Если индекс вашего условия всегда будет меньше, чем размер.

Arduino Ide

Arduino Studio