Сообщения

Сообщения за август, 2018

STM32. Часть 4. Задержки, таймеры, системный таймер SysTick

Задержки в STM32. Задержки можно реализовывать с помощью пустого цикла и с помощью прерываний. При организации задержки с помощью пустого цикла МК ничего не делает некоторое количество тактов. При организации задержки с помощью таймеров повышается точность. Таймер при этом настраивается в режиме одного импульса, устанавливается предделитель и число, до которого следует считать. Затем проверяется установка флага. Для организации периодичности выполнения задач имеет смысл настраивать таймеры по переполнению в обычном режиме (не в режиме 1 импульса), чтобы прерывание вызывалось с периодичностью каждые n тактов (мкс, мс, с). Как вариант реализации периодичности выполнения команд имеет смысл рассматривать системный таймер SysTick, функция инициализации и настройки которого имеется в самой CMSIS (stm32f10x.h). Программная задержка. while(time) time--; Задержка на таймере. Условимся использовать для задержек на таймере таймер TIM7 (когда свободен SysTick, то его)     ...

STM32. Прерывания NVIC

Прерывания в STM32. Прерывания описаны в стартап файле (startup_*.s) и stm32f10x.h ( IRQn_Type). Управляет прерываниями модуль NVIC. Настройка прерываний: Настроить и разрешить необходимые прерывания периферии.  Разрешить глобальные прерывания. Описать обработчик прерывания. Рассмотрим внешние прерывания. За внешние прерывания отвечает модуль EXTI (EXTernal Interrupts). Особенностью внешних прерываний STM32 является то, что их можно повесить на любую ножку, но всего можно настроить 16 прерываний, т.е. столько же, сколько линий у порта. Прерывания настраиваются на линию, а не порт, поэтому когда возникает прерывание, необходимо вручную проверять, с какого порта. Настраиваем прерывание: Подаем тактирование на порт и на альтернативную функцию. RCC->APB2ENR |= RCC_APB2ENR_IOPAEN | RCC_APB2ENR_AFIOEN; GPIOA->CRL &= ~GPIO_CRL_MODE0; // Настраиваем на ввод Ножка на кнопке подтянута к земле, поэтому CNF можно не трогать. AFIO->EXTICR[0] |= AFIO_EXTICR1_EX...

STM32. GPIO. Порты ввода-вывода

Изображение
Порты ввода-вывода STM32 (GPIO) 7.1.4 Alternate functions (AF) 7.1.7 Input configuration 7.1.8 Output configuration 7.1.9 Alternate function configuration 7.1.10 Analog configuration 7.1.11 GPIO configurations for device peripherals 7.2.3 Port input data register (GPIOx_IDR) (x=A..G) 7.2.4 Port output data register (GPIOx_ODR) (x=A..G) 7.2.5 Port bit set/reset register (GPIOx_BSRR) (x=A..G) 7.2.6 Port bit reset register (GPIOx_BRR) (x=A..G) 7.4 AFIO registers Практическая часть. Создаем проект как в предыдущей части или используем уже готовый. Создаем исходники и заголовочные файлы main (основной код, цикл), delays (файл с задержками, будет пополняться), stm32vldiscovery (диоды, кнопки и тд). Заголовочные файлы должны иметь вид: #ifndef MAIN_H_ #define MAIN_H_ // some text here #endif и оканчиваться пустой строкой. В примере будем как всегда и во все времена мигать диодом. Для этого надо настроить ножки PC8, PC9 на вывод и создать функцию задержки ...

STM32. Создание проекта в Keil.

Изображение
Keil, IAR, Coocox... IAR, с одной стороны, хорош, но Кейл понравился больше, возможно, интуитивно понятнее, интерфейс удобнее, в общем, просто понравился больше и точка, ну и начал STM32 с него. IAR оставлю для STM8. Для проектов будет использоваться Keil uVision5. Для создания проекта в Keil: Выбираем Project -> New uVision Project.  Указываем каталог для проекта и имя проекта. Выбираем камень (для stm32vldiscovery - STM32F100RB). Выбираем необходимые компоненты (как на рисунке)ПКМ. ПКМ (Target 1 ->) Source Group 1, Add New Item to... Добавляем исходники и заголовочные файлы main.h, main.c. Настраиваем проект. Жмем ALT+F7. Ставим частоту кварца на вкладке Target, в Output галочку напротив генерации HEX файла, на вкладке Debug выбираем использовать ST-Link Debugger. Остальные настройки по желанию. Использование SPL потребует дополнительно прописать define на вкладке C/C++ "USE_STDPERIPH_DRIVER,STM32F10X_MD_VL" (или другой, в зависимости от используем...

Коротко о блоге

Блог является своего рода черновиком, блокнотом для заметок, но с открытым доступом. Материалы носят учебно-ознакомительно-шпаргалочный характер, поэтому, если вдруг кто-то каким-то чудесным образом наткнется на этот блог и найдет полезную для себя информацию - пользуйтесь, будут вопросы - задавайте, постараюсь ответить. Большая часть материала посвящена микроконтроллерам, в особенности, Cortex-M (STM32) и STM8. Возможно, будут попадаться материалы по другим темам, например, Python, или совсем отвлеченные от электроники и программирования. Досконального дотошного разбора материала нет, не планируется и, скорее всего, не будет планироваться, т.к. есть даташиты, есть куча сайтов и блогов с подробным разбором, я же буду выкладывать то, что посчитаю полезным и практически применимым в минимальном объеме, но при этом достаточном для понимания и отладки, так, например, инициализация и работа с периферией вроде GPIO без новомодных SPL и HAL, а напрямую обращаясь к регистрам.