Воскресенье, 19.11.2017, 09:33


Главная
Регистрация
Вход
Приветствую Вас Гость | RSS  
Меню сайта

Категории раздела
Уроки по программированию stm32f1xx [8]
Данный раздел не имеет отношения к WoW. :-) Он создан для написания статей по программированию stm32f1xx, как памятка, чтоб не забывать что и где писать.
Уроки по программированию stm32f4xx [13]

Форма входа

Главная » Статьи » Уроки по программированию stm32fxxx » Уроки по программированию stm32f1xx

Урок 2: Помигаем светодиодом с STM32Discovery.
Чтоб заставить светиться диод нам надо на определённую ножку микроконтроллера подать либо 1 либо 0 в зависимости от подключения диода.
Т.е. задача сводится к обучению настройки портов ввода-вывода микроконтроллера.
Схема одного вывода МК представлена на рис 1.


Рис 1.

Что нужно сделать в теории?
1) Включить порт.
2) Настроить его на выход.
3) Настроить параметры выхода.
4) Устанавливать попеременно то 1 то 0 на нужной ножке МК.

1) В ARM STM32 по-умолчанию практически на всей периферии выключено тактирование. В том числе и на портах ввода-вывода. Для включения тактов на нужный нам порт используется регистр RCC_APB2ENR, отвечающий в том числе и за тактирование портов ввода-вывода.
Нам нужно подать такты на порт С. Для этого напишем следующую строку:

RCC->APB2ENR |= RCC_APB2ENR_IOPCEN;

2) Теперь настроим его на выход. За режимы работы портов отвечают регистры GPIOx_CRL и GPIOx_CRH. Где x - название порта. Например название регистра для порта С выглядит так GPIOС_CRH.
Общий вид приведён на рисунке 1.


Рис 1.

MODEy - где y номер вывода в порте. Отвечает за направление и скорость работы.
00 - Режим входа.
01 - Режим выхода с максимальной скоростью 10МГЦ
10 - Режим выхода с максимальной скоростью 2МГЦ
11 - Режим выхода с максимальной скоростью 50МГЦ

CNFy - режим работы порта в зависимости от направления.
Режим входа:
00 - Аналоговый вход
01 - Вход без подтяжки
10 - Вход с подтяжкой
11 -
Режим выхода:
00 - Обычный режим. Push-pull
01 - Обычный режим. Открытый коллектор
10 - Альтернативный режим. Push-pull
11 - Альтернативный режим. Открытый коллектор

Альтернативные режимы нужны для работы периферийных устройств. В данном уроке они рассматриваться не будут.
Push-Pull отличается от открытого коллектора тем, что в режиме Push-Pull на ножке МК всегда либо ноль, либо 1 (напряжение питания). При открытом коллекторе вход либо подключен к земле либо висит в воздухе, ни к чему не подключенный.

Вход без подтяжки делает ногу входом с Hi-z состоянием, это означает что сопротивление входа велико и любая электрическая наводка (помеха) может вызвать появление на таком входе единицу или ноль, причем сделать это не предсказуемо. Во избежание этого нужно использовать подтяжку, она позволяет установить на входе какое либо устойчивое состояние которое не будет зависеть от помех. Подтяжка представляет собой резистор большого сопротивления подключенный одним концом к земле или к плюсу питания, а другим концом ко входу. Например если включена подтяжка к плюсу питания, то когда нога контроллера ни куда не припаяна на ней всегда логическая единица. Если мы припаяем кнопку между этой ножкой и землёй, то всякий раз при нажатии кнопки на ноге будет появляться логический ноль. Если бы подтяжка была выключена, то в момент нажатия кнопки на ноге так же появлялся бы ноль, но при отпущенной кнопке нога могла бы легко поймать любую наводку и вызвать появление логической единицы на ноге. В результате, микроконтроллер бы думал что кто-то хаотично жмет на кнопку.

В итоге получаем следующие строки:

RCC->APB2ENR |= RCC_APB2ENR_IOPCEN;//Затактировали порт
GPIOC->CRH &= ~GPIO_CRH_CNF9;//определили режим работы.
GPIOC->CRH |= GPIO_CRH_MODE9_0;//определили направление.

Чтобы зажечь светодиод надо прописать 1 в соответствующий бит регистра GPIOC_BSRR.



При записи 1 в соответствующие биты BSR регистра на выводе МК появляется единица. Если записать 1 в BR, то значение вывода сбросится в 0.

Зная это, напишем программу:

GPIOC->BSRR =GPIO_BSRR_BS9;        //Установили на выводе 1
Delay(1000);
GPIOC->BSRR =GPIO_BSRR_BR9;        // Установили 0.
Delay(1000);

Осталось только определить функцию delay();

Её можно написать например так:
void Delay(uint32_t a)
{
    uint32_t i;
    for (i=0; i<a; i++) {};
}

Вот мы и написали мигание светодиодом.

Пример программы, написанной по этому уроку можно найти тут. Только надо переписать адреса файлов на свои.

Библиотеки можно скачать с раздела Каталог файлов
Категория: Уроки по программированию stm32f1xx | Добавил: Korvin (26.09.2011)
Просмотров: 7829 | Рейтинг: 5.0/1
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Поиск

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

Copyright MyCorp © 2017