Почему после сброса программы пропадают?
Я покупаю плату stm32, как показано на рисунке ниже, подключаю Boot0 к 3.3 и использую последовательный порт для загрузки программы.
Я использую библиотеку https://github.com/rogerclarkmelbourne/Arduino_STM32
Вторая и третья картинка — моя программа. После загрузки программы светодиод на плате светится и серийник нормальный, но после того, как нажимаю RESET на плате, он не светится. Похоже, программа пропала.
Почему это так? А как запустить программу после нажатия ресета?
@lanse7pty, 👍0
2 ответа
Лучший ответ:
Подключая BOOT0
к 3,3 В, вы сообщаете чипу Когда я делаю сброс по какой-либо причине, вы должны войти в загрузчик.
Итак, делаешь сброс, и оно попадает в загрузчик. Затем вы загружаете свой скетч.
В этот момент программное обеспечение сообщает загрузчику: «Хорошо, все готово. Запустите программу». И это так.
Пока вы не перезагрузитесь. И поскольку вы просите его войти в загрузчик с помощью BOOT0, он покорно делает это, ожидая загрузки новой программы.
Старая программа все еще там, но вы просто не даете ее запустить, так как настаиваете, чтобы чип попадал в загрузчик при сбросе.
Чтобы запустить вашу программу, а не загрузчик, необходимо отключить BOOT0, чтобы он не входил в загрузчик.
Вам нужно только подключить BOOT0, если вы хотите поместить туда новую программу.
Из http://wiki.stm32duino.com/index.php?title=Bootloader< /п>
Активация загрузчика осуществляется путем принудительного нажатия двух загрузочных контактов (и затем перезагрузите MCU). Многие платы имеют один или несколько загрузочных контактов. отображаются в виде перемычек или кнопок.
Обычная загрузка (для пользовательской прошивки, которая может быть дополнительным загрузчиком):
- Низкий уровень загрузки
- Низкий уровень загрузки 1
Разрешить загрузку прошивки через USART1:
- Boot0 ВЫСОКИЙ
- Низкий уровень загрузки 1
После загрузки нового программного обеспечения через последовательный порт переместите Boot0
обратно в GND
, чтобы MCU загружал загруженную вами прошивку, а не внутренний последовательный загрузчик.
- C++ против языка Arduino?
- avrdude ser_open() can't set com-state
- Как читать и записывать EEPROM в ESP8266
- Float печатается только 2 десятичных знака после запятой
- устаревшее преобразование из строковой константы в 'char*'
- Запрограммировать ATMega328P и использовать его без платы Arduino.
- Разница между print() и println()
- Как исправить: Invalid conversion from 'const char*' to 'char*' [-fpermissive]