Купил я на свою голову CH32 цена и возможности привлекли внимание. Оказалось все не так просто и красиво. Информации по поводу прошивки было крайне мало, пришлось копать самому. Чтобы никто больше не мучался я написал эту статью.
Подключаться будем по USB кабелю. Сначала я пробовал подключиться с помощью программатора - безуспешно. Я не сразу выяснил что можно "из коробки" использовать USB для прошивки (чтение даташита очень полезное дело). У STM вроде-бы так нельзя.
Для начала скачаем все необходимое, я создал и опубликовал архив для удобства. Скачайте и распакуйте.
Ссылка 1:
https://disk.yandex.ru/d/RKA8zXdEkSCv6A
Ссылка 2:
https://drive.google.com/file/d/1erWcOw_NYM3EHPQEtyengysvFszeBlfv/view?usp=sharing
Если у вас нет Arduino IDE, скачайте. Я использовал версию 1.8.19
Для начала установим официальную утилиту для прошивки. В распакованном архиве в папке WeActStudio… перейдем в Tools ( WeActStudio.BluePill-Plus-CH32-master\WeActStudio.BluePill-Plus-CH32-master\Tools ), затем установим WCHISPTool. Данная папка была скачана с Github ( https://github.com/WeActStudio/WeActStudio.BluePill-Plus-CH32.git )
После установки и входа в утилиту нажимаем на вторую вкладку (надписей почему-то нет, спасибо разработчикам).
Теперь переключим джампер boot0. USB кабель подключим к нижнему разъему на плате.
При заданных настройках программа должна обнаружить плату. Можете нажать Search для поиска. Настройки выставьте во всех полях, как на картинке ниже.
В области Download Config рекомендуется установить параметры как у меня. Далее в Download file выберем .bin файл из нашего архива. Не забудьте поставить галочку. В bin файле специальный загрузчик для плат STM, я выяснил, что он работает и для CH32.
Инфа была найдена тут: https://microkontroller.ru/stm32-projects/programmirovanie-stm32-blue-pill-cherez-usb-port-s-pomoshhyu-arduino-ide/
После чего пробуем прошить. Кнопка загрузки показана красной стрелкой. Справа на картинке и в программе есть лог. Несмотря на одну красную строчку, все прошилось успешно.
Возможно, если переносить код в bin, его можно загружать на плату из данной среды. Но моя попытка сделать это с помощью Arduino IDE не была успешной.
Далее отключаем плату от ПК. Переводим перемычку boot0 в первоначальное положение. Подключаем USB именно к верхнему разъему. Светодиод PC13, при подключении USB стал недолго, но часто мигать.
Мы успешно установили другой загрузчик. Установим драйвера для его корректной работы.
В том же архиве переходим в CH32F103_files\Arduino_STM32-master\Arduino_STM32-master\drivers\win. Откроем по очереди оба файла.
Будет открываться командная строка, процесс может оказаться не быстрым. В конце каждой установки появиться надпись: «Нажмите любую клавишу для продолжения», при нажатии любой клавиши окно закроется, установка завершится.
Далее зайдем в диспетчер устройств для проверки. Возможно потребуется переподключить плату. Среди всех устройств наша плата должна отображаться примерно так:
Если название совпадает (ваш COM может отличаться - это норма), то все сделано верно.
Далее подготовим среду Arduino IDE к работе с платой.
Откройте Arduino IDE и перейдите в настройки. В поле дополнительных ссылок введите следующее:
http://dan.drown.org/stm32duino/package_STM32duino_index.json
Нажмите ОК. Должно получиться как на картинке ниже.
Далее зайдем в Менеджер плат.
В открывшемся окне введем в поиск stm32f1. Установим результат поиска (у меня уже скачан). Далее может потребоваться закрыть и заново открыть среду, чтобы изменения вступили в силу, у меня все и так заработало.
После успешной установки среди плат должно появиться семейство STM. Выберем параметры, как на картинах ниже.
Выбранный порт должен иметь в названии Maple Mini. У меня это COM8.
Если все получилось, напишем программу для теста. Для этого стандартный Blink был переделан. Номер пина на котором «висит» светодиод – PC13, он также обозначен и на самой плате. Попытка написать просто «13» ни к чему хорошему не привела.
Далее представлен код тестовой программы.
Для копирования(если лень писать):
void setup() {
pinMode(PC13, OUTPUT);
}
void loop() {
digitalWrite(PC13, HIGH);
delay(1000);
digitalWrite(PC13, LOW);
delay(1000);
}
После написания кода нажмем на стандартную кнопку загрузки. Переставлять джампер boot уже не требуется. Можете пока забыть о нем.
Сообщения загрузки показаны на картинке ниже.
После загрузки светодиод успешно замигал.
Надеюсь статья была полезной. Я долго мучался с этой платой, мог что-то упустить и забыть при написании статьи. Изначальный алгоритм действий забыл уж точно. Многое делалось методом тыка. Просьба не кидать помидоры если что-то пошло не так.
Видео на канале:
Прошу отписаться в комментариях, если у вас все получилось.