Создадим программу для мигания звезды из двадцати светодиодов, управляемых микроконтроллером STM32. Смоделируем работу программы в Proteus. Для разработки кода программы будем использовать среду программирования STM32CubeIDE.
Начнем с создания в Proteus проекта Star_Proteus и создания в рамках этого проекта электрической схемы. Для этого вытаскиваем на рабочее поле микроконтроллер STM32F103C6, двадцать желтых светодиода и землю.
![](https://simpleprogramming.ru/wp-content/uploads/2023/08/ris.1-1-1024x835.png)
Собираем схему, как показано на рис. 1. Чтобы не загромождать схему соединительными проводниками, подсоединяем к каждому светодиоду два контакта. Чтобы вытащить контакт на рабочее поле, необходимо щелкнуть по кнопке Subcircuit Mode (обозначена овалом 1 на рис. 1), затем щелкнуть по строке DEFAULT (обозначена овалом 2 на рис. 1) и затем щелкнуть левой кнопкой мыши на рабочем поле. Размножим контакты и подсоединим их к светодиодам. Нижний контакт будет подсоединен к земле, а верхний контакт к выводу микроконтроллера. Чтобы поставить в соответствие контактам светодиодов контакты микроконтроллера, нужно присвоить им одинаковые метки. Чтобы присвоить метку контакту, надо щелкнуть по кнопке Wire Label Mode (отмечена овалом 3 на рис. 1) и затем щелкнуть по кружочку контакта. В появившемся окошке (рис. 2) в строке String задать номер контакта.
![](https://simpleprogramming.ru/wp-content/uploads/2023/08/ris.2-1.png)
Верхним контактам светодиодов задаем номера от 1 до 20, а всем нижним контактам задаем одинаковый номер 21. У микроконтроллера будут задействованы контакты с PA1 по PA15 и с PB0 по PB4 (всего 20 контактов), которым присваиваем номера с 1 по 20, а контакт 21 будет соответствовать земле, показанной слева от микроконтроллера (рис. 1).
Далее необходимо указать параметры светодиодов. Для этого надо дважды щелкнуть по светодиоду и в появившемся окне (рис. 3) в строке Model Type указать Digital, в строке Forward Voltage указать 1.2V, в строке Full drive current указать 10mA. Эту процедуру нужно проделать для всех светодиодов.
![](https://simpleprogramming.ru/wp-content/uploads/2023/08/ris.3-1.png)
Указанные параметры означают, что задан ток через светодиод 10 mA, напряжение на светодиоде 1.2 В. Теперь можно вычислить величину сопротивления резистора в цепи светодиода: R = (3.3 – 1.2) / 0.01 = 210 Ом. Это значение надо указать в свойствах резистора. Оставить у резистора значение ANALOG в строке Model Type.
Далее необходимо задать конфигурацию силовых цепей. Выбираем в меню: Design > Configure Power Rails. Появляется окно, показанное на рис. 4.
![](https://simpleprogramming.ru/wp-content/uploads/2023/08/ris.2.png)
В поле Name щелкаем по стрелочке справа и устанавливаем значение VCC/VDD. В поле Voltage устанавливаем значение +3.3. Обозначения VDDA и VSSA переносим из левой части окна в правую, щелкая по кнопке Add. Окончательно окно принимает вид, показанный на рис. 5. Щелкаем по кнопке OK.
![](https://simpleprogramming.ru/wp-content/uploads/2023/08/ris.3.png)
На этом подготовка программы Proteus к моделированию закончена. (Примечание. Построение электрических схем с микроконтроллерами в программе Proteus подробно изложено в учебном пособии “Программирование микроконтроллеров”.)
Переходим к работе с программой STM32CubeIDE. Запускаем программу STM32CubeIDE. Создаем новый проект: File > New > STM32 Project. В появившемся окне выбираем микроконтроллер STM32F103C6 (рис. 6).
![](https://simpleprogramming.ru/wp-content/uploads/2023/08/ris.4.png)
Нажимаем Next. В появившемся окне (рис. 7) задаем название проекта (назовем проект Star) и указываем расположение проекта.
![](https://simpleprogramming.ru/wp-content/uploads/2023/08/ris.7-1.png)
Нажимаем Finish. Появляется окно со схемой микроконтроллера (рис. 8). В окне на рис. 1 мы подсоединили светодиоды к выводам PA1… PA15 и PB0…PB4, поэтому на схеме микроконтроллера надо задать работу соответствующих выводов на выход. Для этого сначала щелкаем левой кнопкой мыши по выводам и выбираем GPIO Output, затем щелкаем правой кнопкой мыши по этим же выводам, выбираем выпадающую строку Enter User Label и присваиваем имена выводам: Led1 … Led20, как показано на рис. 8.
![](https://simpleprogramming.ru/wp-content/uploads/2023/08/ris.8-1.png)
Далее необходимо определить опции, приводящие к генерированию hex-файла (Star.hex) при создании кода программы. Для этого в меню выбираем: Project > Properties и в выпадающем окне (рис. 9) щелкаем по строке C/C++ Build и затем по строке Settings (отмечено овалами).
![](https://simpleprogramming.ru/wp-content/uploads/2023/08/ris.7.png)
В появившемся окне (рис. 10) щелкаем по строке MCU Post build outputs (отмечена овалом).
![](https://simpleprogramming.ru/wp-content/uploads/2023/08/ris.8.png)
Появляется новое окно (рис. 11), в котором проставляем галочки около двух верхних строчек:
Convert to binary file (-O binary)
Convert to Intel Hex file (-O ihex)
(выделены овалом на рис. 11). Жмем внизу Apply and Close.
![](https://simpleprogramming.ru/wp-content/uploads/2023/08/ris.9.png)
Далее необходимо сгенерировать файл 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.
![](https://simpleprogramming.ru/wp-content/uploads/2023/08/ris.12-1024x801.png)
После успешной компиляции необходимо загрузить файл Star.hex в Proteus. Переходим в программу Proteus и щелкаем по изображению микроконтроллера. В открывшемся окне находим строку Program File и щелкаем правее этой строки по значку полураскрытой папки. Открывается проводник Windows, в котором последовательно открывая папки проекта Star, находим файл Star.hex и щелкаем по нему (файл находится в папке Debug). Файл при этом загружается в Proteus. Далее в Proteus можно запустить моделирование задачи.
Заказать рекламное оформление сцены можно здесь.