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