Изучение МК STM32
Материалы по сайтостроению
Изготовление девайсов для быта и не только
Дом рационально-умный и душевный
Вместо предисловия.
В прошлом уроке кратко была рассмотрена система тактирования STM32F4. В этом уроке напишем архисложную простую программу мигания светодиодом. Как говорится - начало всех начал в изучении программирования на МК. Кратко познакомимся с настройкой порта на выход.
Предисловие.
На плате STM32F4Discovery имеются 4 пользовательских светодиода подключенные к порту D, к пинам с 12 по 15. Для зажигания светодиода необходимо подать "1", логический высокий уровень на нужный пин. Итак приступим.
CubeMX и SW4STM32.
Откроем проект в Кубе из прошлого урока. Проведем необходимые настройки на вкладке ПинАут. Настроем пин 12 порта D на выход. Систему тактирования оставим без изменений. На вкладке Конфигурейшн произведем настройку пина: Укажем метку, настроем скорость работы порта, выбирем режим работы пина.
Проверим настройки проекта и сгенерируем код.
Перенос из Куба в Эклипс будет проще. Так как у нас уже есть проект из прошлого урока с прописанными путями и символами, то нам достаточно обновить файлы исходников и заголовков. Для этого необходимо скопировать папки Drivers, Src, Inc и проекта Куба в проект Эклипс с заменой.
В самом Эклипсе необходимо обновить содержимое проекта и переиндексировать проект.
Скомпилить проект и убедиться в отсутствие ошибок. Приступим к реализации мигания светидиода на STM32F4.
Порт D. Пин 12.
Куб сгенерировал функции инициализации порта D. В файле gpio.c можно посмотреть функцию инициализации.
void MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
/* GPIO Ports Clock Enable */
__GPIOH_CLK_ENABLE();
__GPIOD_CLK_ENABLE();
/*Configure GPIO pin : PD12 */
GPIO_InitStruct.Pin = GPIO_PIN_12;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
}
Для мигания светодиода необходимо в основном цикле "майна" провести следующую последовательность.
1. Подать на выход Высокий логический уровень - записать 1,
2. Подождать N-ое количество времени,
3. Подать Низкий логический уровень - записать 0,
4. Подождать N-ое количество времени,
5. Перейти к пункту №1.
Для начала напишем свою "бесполезную" функцию задержки, основанную на пустом циле. В это время процессор простаивает и не выполняет ничего полезного.
После компиляции и запуска убеждаемся в мигании зеленого LEDа.
Изменим самописную задержку на задержку имеющуюся у HALа. Принцип тот же, процессор простаивает, только не в бесполезном цикле, а в ожидании когда Системный таймер отсчитает необходимую задержку.
__weak void HAL_Delay(__IO uint32_t Delay)
{
uint32_t tickstart = 0;
tickstart = HAL_GetTick();
while((HAL_GetTick() - tickstart) < Delay)
{
}
}
Скомпилим и убедимся в работоспособности данного кода. Светодиод "бодро" моргает с частотой в полГерца.
Уроки по программированию STM32F4. Урок № 2. Мигание светодиодом на STM32F4. Видео.
В следующей статье продолжим тему со светодиодом, но только необходимую задержку оптимизируем использую аппаратный таймер. Заодно с ним (таймером) и познакомимся.
Проект данного урока для Эклипс - Урок №2. Мигание светодиодом на STM32F4 скачать можно от сюда: тыц для скачивания.
Update № 1. После этого урока прошу прочитать Update № 1 к Уроку № 0. Так как следующие уроки будут основыватся на проекта из данного урока.
Измененный проект по Update № 1 данного урока для Эклипс - Урок №2. Мигание светодиодом на STM32F4 скачать можно от сюда: тыц для скачивания.
З.Ы. коментарии, вопросы и предложения складываем тут
Просмотров: 29176
Update № 1. Это небольшое дополнение к Уроку № 0. Вводному. В данной статье опишится менее затратный способ по портированию проекта из STM32CubeMX в SW4STM32.
Переходим к изучению МК - STM32F4. Система тактирования.
РУБРИКИ САЙТА:
Здравствуйте друзья!
Приветствую Вас на моем канале, посвященному разработке прикладного программного обеспечению для программируемых логических контроллеров и панелей оператора.
В прошлом обзоре мы создали проект в ТИА портал версии 15.1, а также рассмотрели документацию на основе которой будет вестись разработка прикладного программного обеспечения для контроллера.