STM32F103C8 Blink CubeMx Keil

Опубликовано stm32 - ср, 03/20/2019 - 12:43

Плата на микроконтроллере STM32F103C8, познаем Keil uVision5, включаем светодиод.

Кому будет полезна эта статья ?

Тому у кого есть желание начать использовать STM микроконтроллеры в своих любительский схемах, желающих  постоянно развиваться и учиться ... 

Разнообразие китайского ширпотреба электронных изделий впечатляет своим многообразием и ценовой политикой. И микроконтроллеры не исключение. Конечно, увидев разнообразие схемотехнических решений -  рука так и тянется купить, что-то подобное и приспособить для нужных целей. Про эту плату очень много сказано и написано в интернете и как только случай представился (я стараюсь заказывать товары из Китая на определенную сумму и желательно у одного продавца за раз) я добавил эту плату к основному заказу и получив ее через месяц - также успешно положил на полку до лучших времен. Это называется - главное, что она есть .. Пролежав несколько лет на полке (годы ее ни как не испортили) и как только появилось немного свободного времени я ее вытащил на рабочий стол и начал изучать. Открыв интернет в котором очень много чего есть, я исписал несколько страниц текста в тетрадке и понял, что запутался и плату проще положить плату обратно т.к. время потраченное на подобные изучения ужасно велико, а возможности платы очень скромные.  Эта плата легко подходит для решения простых задач. Новичкам для понимания как работают интерфейсы этой микросхемы самое то для изучения. И конечно, дело не в плате, а в том микроконтроллере который в ней установлен. Самая простая по возможностям ( смотря конечно с чем сравнивать) микросхема из семейства микроконтроллеров которые выпускает фирма STMicroelectronics и вдобавок ARM 32-bit Cortex™-M3 CPU. Для любительских схем (при изготовлении в домашних условиях печатных плат) она подходит .. но с оговоркой, что есть нормальный микроскоп и паяльная станция и опыт в создании печатных плат в "домашних условиях" не начального уровня. Расстояние между ножками микросхемы - это самое неприятное, но эти ножки выведены на пины со стандартным шагом и соответственно эту плату можно использовать целиком вставляя ее в переходник и соответственно впаивая и разводя переходник уже на нормальной плате. Берем разъем как на фото ниже и реализуем то, что задумали. 

1142

Это даже эффективно если нужно поменять прошивку - имеем в запасе (я всегда беру по два экземпляра)  две одинаковые платы и меняем их местами когда уверены в модернизированной программе (не пошла программа меняем обратно плату) и не таскаемся с проводами если это у знакомого на даче ... Сильных нагрузок с выходов нет - поэтому все входные и соответственно выходные цепи делаем на плате переходника.    

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

Внешний вид платы представлен ниже.   

Вид сверху

1110

Вид снизу

1144

Документация на микроконтроллер (не плату!!) STM32F103C8 или с сайта www.st.com - ссылка.

Начнем с микросхемы в нашем корпусе из выше представленной документации. 

345

Что видим на плате :

Сама микросхема  микроконтроллера

115

1. Порты ввода вывода микросхемы   - РА, PB

На плате выведено (ножки микроконтроллера + ножки питания G - GND, 3.3 - 3.3 V)

1113

111

2. Порты подключения кварцевых резонаторов 

Основной кварцевый резонатор PD0 и PD1 на 8 МГц (8 000 000 Гц) + резонатор на 32 768 Гц  - PC14 и PC15

116      и  1117

4.  BOOT - по какому условию запускам выбираем перемычками .

113

5. Индикация (светодиоды) - PWR - светодиод наличия питания + светодиод подключенный к ножке PC13 (этот светодиод будем включать и выключать)

118  119

6. Кнопка сброса микроконтроллера

114

7. Разъем для программирования микроконтроллера

1112

8. Преобразователь напряжения 5V - > 3.3V (при подключении к USB именно этот преобразователь питает всю плату напряжением 3.3 V)

11144

Пока все .. этого вполне достаточно для того чтобы начать - включить светодиод и убедиться, что схема работает.

Первая программа для платы на STM32F103C8 

Чем будем программировать? Это один из ключевых моментов после того как определено, что микроконтроллерам на рабочем столе быть !!

Программные средства ...

Я не буду расписывать преимущества IDE  (англ. Integrated Development Environment) - программных средств которые есть на сегодняшний момент в мире для программирования STM контроллеров. На эту тему много, что написано и выбирать придется самостоятельно.

Я остановился на среде известной фирмы Keil – Keil uVision5. 

ke44 

Платная (и достаточно дорогая) программа которая позволяет делать с микроконтроллером все. Просто все. Мне Keil uVision5 (именно 5 не 4 не 3) понравился удобным редактором. И в случае того, что она позволяет делать код до 32 кБ бесплатно - с ней можно работать.  По большому принципу главное это понять принцип программирования и последовательность действий, а синтаксис при переходе с одной IDE на другую освоить можно. 

Еще одно очень удобное средство для подготовки к разработки в IDE это фирменное программное обеспечение от фирмы ST - STM32CubeMX.  Удобный инструмент для подготовки начального кода для IDE среды. Keil uVisionвходит в список тех программ для которых делается этот начальный код. На момент написания статьи версия 5.0.1 

q12

Удобная. Больше сказать нечего.

Итак определяются два пути написания программы первой программы 

1.  Используем только Keil uVision

2. Используем STM32CubeM для генерации начального кода + Keil uVision5. 

Начнем с пути 1.

С программным обеспечением определились - теперь надо определиться как будем записывать программу в память микроконтроллера.

Аппаратные средства ...

Задаем вопрос интернету и получаем ряд ответов на вопрос чем можно запрограммировать (прошить) микроконтроллеры фирмы ST  и в том числе такую плату как у нас :

1. Через встроенный USB - требуется загрузчик заранее зашитый в память микроконтроллера (обычно установлен при продаже платы)

2. USART (Universal Synchronous/Asynchronous Receiver/Transmitter) - необходим переходник USB->Usart 

3. Разъем на плате - > требуется программатор который при использовании Keil uVisionзапрограммирует и позволит отладить программу в микроконтроллере. 

В принципе пункты 1 и 2 удобные, но имеют для меня один ключевой недостаток - отсутствие отладки программы. Для того чтобы поморгать светодиодом этого конечно достаточно.

Я выбрал пункт 3.

Программатор.

1. Оригинальный от фирмы  Keil uVisionне вариант т.к. если брать программатор то надо брать и программу. Для любительских целей это слишком. Поэтому остается несколько путей

1. Китайский клон.

2. Самодельный вариант. 

3. Плата со встроенным программатором. 

Пункт 2 - много на просторах интернета вариантов, но сильно усложняет задачу т.к. придется делать еще и плату под программатор, корпус, разъем, микросхема, обвязка ... и не вариант, что заработает ..

Пункт 3 - вариант не плохой но тоже но - надо найти и купить (заказать) плату, и желательно ее потом  применить где-то. 

Пункт 1 - заказать китайский клон - но есть вероятность что новая версия Keil uVisionоткажется с ней работать.

В итоге я конечно выбрал самый дешевый и простой Пункт 1. Нашел продавца на али и заказал вот это "чудо".

Сделал фото по контрастнее чтобы была видна маркировка разъема

1145

Ну и комплект проводов

1121

И так по приходу всего необходимого начинаем.

1. Скачиваем и устанавливаем Keil uVisionс официального сайта.

441

После установки Keil uVision5 в Windows 10 необходимо установить необходимые Paсk  именно для линейки контроллеров в которую входит чип STM32F103C8T6.

442

Обновляться будет первый раз долго. В итоге должно быть ONLINE и 100%.

443

Нажимаем ОК и получаем окно выбора и ищем STMicroelectronics

4444

В правом окне видим необходимые библиотеки для работы не только с чипом STM32F103C8T6 но и всей линейки STM32F103xxx

У меня установлено две линейки 103 и 401 – ниже то что должно быть установлено (Install) и что установлено (Up to date) и если что-то не хватает нажимаем соответственно Install.

 Мои pack ниже..

445

После установки Pack переходим не посредственно к работе в среде Keil uVision5.

Запуск

keil

Начальная страница

447

Создаем тестовый проект на основе выше приведенной платы.

Project - > Create New Project

448

Создаем новую папку для проекта

449

Задаем название

4450

Не задавая название файла входим в созданную папку и вводим название проекта Example_1

4451

Нажимаем сохранить. После сохранения – на этапе загрузки проекта увидим следующее окно в котором необходимо установить параметры контроллера Target 1

4452

Двигаясь по “дереву” выбираем наш тип микроконтроллера.

4453

Нажимаем ОK и переходим в следующее окно.

4454

В этом окне необходимо добавить в наш проект установленные библиотеки (они из Pack).  Для нашего примера (работа с  портами GPIO) добавим библиотеки :

4455

Нажимаем OK и выходим в основное окно редактора  Keil uVision5 где видим :

4456

Что начать программировать дальше предлагаю немного поправить вид нашего проекта.

Переименуем Source Group 1 в User – для этого подсветим название и нажмем мышкой на  начало слова Source введем Userи нажмем ENTER

4457

Следующим шагом добавим папки для удобства.

Выберем название Target 1 (подсветим его) нажмем левую клавишу мыши и в открытом окне выберем пункт Add Group.

4458

Добавиться папка New Group. Которую мы тоже переименуем. Выделяем -> Нажимает правую клавишу мыши на первой букве N и меняем название папки на PL.

4459

Получаем структуру.

4460

В полученную структуру добавляем основной файл проекта под названием main.c для этого выделяем папку User жмем левую клавишу и в появившемся окне Выбираем Add New Item Group User

4461

После выбора открывается окно добавления файлов где мы выбираем тип С File (.с) вводим название файла main в строке Name и нажимаем Add.

4462

После нажатия видим в  папке User наш созданный main.c.

4463

Файл создан. Теперь необходимо добавить библиотеки в папку Pl.

Для этого идем на страницу компании ST

В эксплорере вводим строку www.ST.com

Выходим на https://www.st.com/content/st_com/en.html

В окне слева видим и соответственно выбираем пункт Microcontrollers & Microprocessors

4464

Попадаем в следующее окно (уменьшил немного для понимания)

4465

В графическом представлении выбираем наш тип STM32F1

4466

Попадаем в окно

4467

Где в таблице выбираем наш микроконтроллер

4468

Выбираем его и попадаем на страницу серии STM32F103

4469

Выбираем наш тип STM32F103C8 и выходим на страницу нашего чипа

4470

На это странице есть много информации как с ним работать.

Но нам необходимо забрать в наш проект стандартные библиотеки поэтому двигаемся по странице к документу

STSW-STM32054 – STMF10F10x standart peripheral library

4471

Выбираем библиотеку и попадаем на страницу загрузки

4472

Где предлагается мигрировать на CUBE и в конце страницы (именно в конце) в таблице видим GET SOFTWARE

4473

Выбираем мышкой Get Software и получаем соглашение

4474

Жмем ACCEPT

В новом окне или если зарегистрирован входим или заполняем три строчки и ставим “галку”.

Email должен быть реальным т.к. на него придет письмо

4475

Заполняем и после заполнения -> Download

После нажатия все вернется в первое окно и дальше ждем письма следующего содержания

4476

В котором присутствует кнопка Download Now жмем ее прямо в письме и получаем загрузку файла и соответствующие библиотеки. Я пользуюсь Яндекс поэтому у меня это выглядит так.

4477

Скачанный файл en-stsw-stm32054.zip желательно переложить в  папку с документацией. У меня такая папка находиться в папке с проектами.

4478

Заходим в DOC и распаковываем папку в получаем папку STM32F10x_StdPeriph_Lib_V3.5.0.

Заходим в эту папку и двигаясь по папкам внутри попадаем в

4479

Дальше необходимо снять ограничение файлов на чтение. Для этого входим в папку inc

4480

Нажимаем выделить все и нажимаем правую клавишу мыши. В открывшимся меню выбираем свойства

4481

В появившемся окне

4482

Снимаем галку с атрибута Только чтение.

И жмем OK.

Тоже самое мы делаем с папкой SRC!!!!

После снятия ограничения на чтение с папок INC и SRC идем в папку с проектом и создаем в нем папку Pl.

4484

В созданную папку Pl копируем папки INC и SRC.

4485

 

Также в эту папку необходимо копировать еще два файла -> stm32f10x.h и stm32f10x_conf.h

Файл  stm32f10x.h копируем из скаченной библиотеки и меня он по адресу

….\Proj_keil_2019\Doc\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x

441466

Не забываем после копирования из скаченной библиотеки снимать разрешение только на чтение

4486

Файл stm32f10x_conf.h копируем из

……\Proj_keil_2019\Doc\STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Examples\ADC\3ADCs_DMA

4487

И не забываем снимать ограничение на чтение

4488

В итоге наша папка Pl имеет вид

4489

Библиотеки скопированы. Осталось их прописать в проект.

Открываем Keil uVision5. Ждем когда проект загрузиться. Выбираем User -> Add Existing Files to Group “User”

4490

В появившемся окне

4491

Добавляем два файла stm32f10x.h и stm32f10x_conf.h, а также содержимое папок INC и SRC

Начнем stm32f10x_conf.h -> Add

4492

stm32f10x.h -> Add

 

Папка INC -> Add

4493

Папка SRC -> Add

4494

В результате папка User  получает вид

4495

ледующим шагом нужно прописать все папки с библиотеками.

Для этого открываем вкладку Project и выбираем Options for Target “Target 1”

4496

В открывшимся окне получаем доступ к параметрам проекта

4497

Начинам править параметры

Меняем частоту Xtal(MHz) с 12.0 -> 8.0

4498

Создаем hex файл

4499

Во вкладке С/CC++ добавляем пути к нашим папкам в которых находятся наши библиотеки

44100

Для этого выбираем

44101

Нажимаем    44102

В окне выбираем New (insert)

44103

 И начинаем добавлять папки. Для добавления нового пути каждый раз нажимаем New.

44104

После добавления путей к папкам получаем заполненную таблицу44105

Жмем OK и после заполнения получаем вид

44106

В итоге выходим и получаем 

44107

Выбираем вкладку "Debug"

44108

Изменяем программатор

С          44109

На     44110

Нажимаем       44111

и получаем окно настроек программатор ST-LINK/V2

Тут одно… Но если программатор определился нормально (т.е был установлен драйвер) то тогда окно будет иметь вид

с Serial Number и настройками.  Если Окно пустое смотрите ниже.

Пока все нормально видим (клон определился) и главное определилась наша плата в окне SW Device

44112

Далее выбираем вкладку Flash Download

44113

И устанавливаем    44114 Это установка необходима для того чтобы после программирования чипа проходил автоматический ресет микроконтроллера .

Получаем вид.

44134

После этого OK для запоминания изменения параметров.

Это пока Все!!

Далее:

Eсли программатор не определился ...

Если Окно программатора пустое..... 

Если программатор не установлен (или установлен не правильно) то вид окна следующий

44116

то делаем:

Убеждаемся, что устройство работает.

Если устройство не определяется и не светиться – вероятно всего, что оно не исправно.

Если светодиод светиться 

44117

идем в настройки компьютера и открываем Диспетчер устройств и смотрим наличие драйвера

44118

Вот как должно быть вот так   44119

Если устройства с надписью драйвер не установлен и горит желтый треугольник то необходимо поставит драйвера.

Что можно сделать в этом случае.

  1. Поиск в интернете.
  2. Поставить программу или драйвера от ST для работы с фирменным программатором. В этом случае  драйвер установиться вместе с программой автоматически.

   Если есть желание проверить пункт 2 выполняем следующую последовательность

   Идем на сайт ST.сом по адресу  - ссылка  спускаемся вниз страницы

44120

и скачиваем программу для фирменных программаторов фирмы ST… 

Или драйвер отдельно 

44121

Но рекомендую скачать программу ..

Программа скачивается так же как и выше указанные библиотеки.

Дальше устанавливаем. Сначала установиться программа. После того как установиться программа будет предложено установить драйвер для программатора.

Далее запуск программы

44122

Если все нормально то при попытке обращения будет следующий вид.

44123

Я обновил свой программатор через год после покупки на последнюю версию см. выше.

Если по каким-то причинам это не работает - выход один скорее всего нужно покупать новый.

 

Перейдем дальше ...

Убедившись, что программатор установился правильно перейдем в Keil uVision5 для написания короткой программы включения светодиода.

44124

Добавляем текст следующего содержания в файл main.c

 

#include "stm32f10x.h"                  // Device header

int main(void)

{

                RCC->APB2ENR |= RCC_APB2ENR_IOPCEN;

                GPIOC->CRH &= GPIO_CRH_CNF13;

                GPIOC->CRH |= GPIO_CRH_MODE13_1;

                while(1)

                               {

                               GPIOC->BSRR = GPIO_BSRR_BR13; // _BR13 - включает светодиод,                                                                                                                                       //   _BS13 -  выключает светодиод

                              }

}

ПРОБЕЛ - после последней кавычки обязателен...

Основной файл main.c будет иметь вид

44125

Далее нам надо поправить stm32f10x.h по наш микроконтроллер.

Делаем это следующим образов - > в окне редактора Keil uVision5 подводим курсор к названию файла жмем правую клавишу мыши и появившимся окне -> выбираем - > Open document “ stm32f10x.h и в соседней вкладки появляется нужный нам файл

44126

Открывается выбранный нами файл 

44127

Двигаясь по файлу необходимо поправить следующие пункты:

Тип микроконтроллера

STM32F103C8T –

44128

Убираем комментарии со строки

44129

Почему этот тип – см. документацию 44131

44132

Идем дальше по открытому файлу 

Раскомментируем строки

44135

Меняем частоту

С 25 000 000 Гц

44136

На 8 000 000 Гц (как на плате)

44137

На этом моменте прекращаем редактировать файл и сохраняем его. 

Можно попробовать собрать программу. Это происходит при нажатии клавиши F7 или кнопкой как на картинке ниже: 

44140

Итак минимум выполнили и можно перейти к программированию микроконтроллера

Плата приходит из Китая зашитая для загрузки программы с порта MICROUSB. Его использовать можно, но не интересно. Я убрал возможность работать с загрузчика USB (см. перемычки на плате)  и стер чип. Теперь это пустая железка при включение которой к порту USB ни чего не происходит.  Для того чтобы изучить работу чипа я подключил правую сторону с разъемом к программатору.

Питание всей схемы от 3.3v от программатора

Разъем программирования если смотреть на фото сверху вниз:

 

 

44141

Готовая сборка будет иметь вид

1146

Подключаем к компьютеру - должен загореться светодиод PWR

Запускаем Keil uVision5 с нашим проектом  и стираем микроконтроллер

44144

44145

 

При прошивке должен загореться порт PC13.

553

Ура!!! Теперь мы можем (пока правда каждый раз стирая и записывая микроконтроллер) управлять светодиодом установленным на плате.

 

 

Яндекс.Метрика