ST2. Управление режимами мигания светодиодов с помощью микроконтроллера STM32. Моделирование в Proteus

Создадим программу для мигания звезды из двадцати светодиодов, управляемых микроконтроллером STM32. Смоделируем работу программы в Proteus. Для разработки кода программы будем использовать среду программирования STM32CubeIDE.
Начнем с создания в Proteus проекта Star_Proteus и создания в рамках этого проекта электрической схемы. Для этого вытаскиваем на рабочее поле микроконтроллер STM32F103C6, двадцать желтых светодиода и землю.

Рис. 1. Электрическая схема в Proteus

Собираем схему, как показано на рис. 1. Чтобы не загромождать схему соединительными проводниками, подсоединяем к каждому светодиоду два контакта. Чтобы вытащить контакт на рабочее поле, необходимо щелкнуть по кнопке Subcircuit Mode (обозначена овалом 1 на рис. 1), затем щелкнуть по строке DEFAULT (обозначена овалом 2 на рис. 1) и затем щелкнуть левой кнопкой мыши на рабочем поле. Размножим контакты и подсоединим их к светодиодам. Нижний контакт будет подсоединен к земле, а верхний контакт к выводу микроконтроллера. Чтобы поставить в соответствие контактам светодиодов контакты микроконтроллера, нужно присвоить им одинаковые метки. Чтобы присвоить метку контакту, надо щелкнуть по кнопке Wire Label Mode (отмечена овалом 3 на рис. 1) и затем щелкнуть по кружочку контакта. В появившемся окошке (рис. 2) в строке String задать номер контакта.

Рис. 2. Присвоение меток контактам

Верхним контактам светодиодов задаем номера от 1 до 20, а всем нижним контактам задаем одинаковый номер 21. У микроконтроллера будут задействованы контакты с PA1 по PA15 и с PB0 по PB4 (всего 20 контактов), которым присваиваем номера с 1 по 20, а контакт 21 будет соответствовать земле, показанной слева от микроконтроллера (рис. 1).
Далее необходимо указать параметры светодиодов. Для этого надо дважды щелкнуть по светодиоду и в появившемся окне (рис. 3) в строке Model Type указать Digital, в строке Forward Voltage указать 1.2V, в строке Full drive current указать 10mA. Эту процедуру нужно проделать для всех светодиодов.

Рис. 3. Параметры светодиода

Указанные параметры означают, что задан ток через светодиод 10 mA, напряжение на светодиоде 1.2 В. Теперь можно вычислить величину сопротивления резистора в цепи светодиода: R = (3.3 – 1.2) / 0.01 = 210 Ом. Это значение надо указать в свойствах резистора. Оставить у резистора значение ANALOG в строке Model Type.
Далее необходимо задать конфигурацию силовых цепей. Выбираем в меню: Design > Configure Power Rails. Появляется окно, показанное на рис. 4.

Рис. 4. Окно “Конфигурация силовых цепей”

В поле Name щелкаем по стрелочке справа и устанавливаем значение VCC/VDD. В поле Voltage устанавливаем значение +3.3. Обозначения VDDA и VSSA переносим из левой части окна в правую, щелкая по кнопке Add. Окончательно окно принимает вид, показанный на рис. 5. Щелкаем по кнопке OK.

Рис. 5. Окончательный вид окна “Конфигурация силовых цепей”

На этом подготовка программы Proteus к моделированию закончена. (Примечание. Построение электрических схем с микроконтроллерами в программе Proteus подробно изложено в учебном пособии “Программирование микроконтроллеров”.)
Переходим к работе с программой STM32CubeIDE. Запускаем программу STM32CubeIDE. Создаем новый проект: File > New > STM32 Project. В появившемся окне выбираем микроконтроллер STM32F103C6 (рис. 6).

Рис. 6. Выбор модели микроконтроллера

Нажимаем Next. В появившемся окне (рис. 7) задаем название проекта (назовем проект Star) и указываем расположение проекта.

Рис. 7. Название и расположение проекта

Нажимаем Finish. Появляется окно со схемой микроконтроллера (рис. 8). В окне на рис. 1 мы подсоединили светодиоды к выводам PA1… PA15 и PB0…PB4, поэтому на схеме микроконтроллера надо задать работу соответствующих выводов на выход. Для этого сначала щелкаем левой кнопкой мыши по выводам и выбираем GPIO Output, затем щелкаем правой кнопкой мыши по этим же выводам, выбираем выпадающую строку Enter User Label и присваиваем имена выводам: Led1 … Led20, как показано на рис. 8.

Рис. 8. Конфигурирование выводов микроконтроллера

Далее необходимо определить опции, приводящие к генерированию hex-файла (Star.hex) при создании кода программы. Для этого в меню выбираем: Project > Properties и в выпадающем окне (рис. 9) щелкаем по строке C/C++ Build и затем по строке Settings (отмечено овалами).

Рис. 9. Подготовительные операции для генерирования hex-файла

В появившемся окне (рис. 10) щелкаем по строке MCU Post build outputs (отмечена овалом).

Рис. 10. Подготовительные операции для генерирования hex-файла

Появляется новое окно (рис. 11), в котором проставляем галочки около двух верхних строчек:
Convert to binary file (-O binary)
Convert to Intel Hex file (-O ihex)

(выделены овалом на рис. 11). Жмем внизу Apply and Close.

Рис. 11. Подготовительные операции для генерирования hex-файла

Далее необходимо сгенерировать файл main.c. Для этого надо щелкнуть по кнопке Device Configuration Tool Code Generation в панели инструментов либо выбрать File > Save.
После этого в дереве проектов (слева) щелкаем по файлу main.c и открываем его. Прокручиваем файл и в цикле while(1) находим строку:
/* USER CODE BEGIN 3 */
После этой строки вставляем наш код:

HAL_GPIO_WritePin(GPIOA, Led1_Pin|Led5_Pin|Led9_Pin|Led13_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOB, Led17_Pin, GPIO_PIN_SET);
HAL_Delay(500);
HAL_GPIO_WritePin(GPIOA, Led2_Pin|Led4_Pin|Led6_Pin|Led8_Pin|Led10_Pin|Led12_Pin|Led14_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOB, Led16_Pin|Led18_Pin|Led20_Pin, GPIO_PIN_SET);
HAL_Delay(500);
HAL_GPIO_WritePin(GPIOA, Led3_Pin|Led7_Pin|Led11_Pin|Led15_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOB, Led19_Pin, GPIO_PIN_SET);
HAL_Delay(500);
HAL_GPIO_WritePin(GPIOA, Led1_Pin|Led2_Pin|Led3_Pin|Led4_Pin|Led5_Pin|Led6_Pin|Led7_Pin|Led8_Pin
|Led9_Pin|Led10_Pin|Led11_Pin|Led12_Pin|Led13_Pin|Led14_Pin|Led15_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOB, Led16_Pin|Led17_Pin|Led18_Pin|Led19_Pin|Led20_Pin, GPIO_PIN_RESET);
HAL_Delay(500);

Расположение нашего кода в файле main.c и успешная компиляция его показаны на рис. 12.

Рис. 12. Успешная компиляция программы
Рис. 13. Моделирование в Proteus работы программы

После успешной компиляции необходимо загрузить файл Star.hex в Proteus. Переходим в программу Proteus и щелкаем по изображению микроконтроллера. В открывшемся окне находим строку Program File и щелкаем правее этой строки по значку полураскрытой папки. Открывается проводник Windows, в котором последовательно открывая папки проекта Star, находим файл Star.hex и щелкаем по нему (файл находится в папке Debug). Файл при этом загружается в Proteus. Далее в Proteus можно запустить моделирование задачи.
Заказать рекламное оформление сцены можно здесь.