Воскресенье, 24.09.2017, 02:49


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

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

Форма входа

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

Урок 2: Мигание светодиодом с помощью StdPeriph.
Прежде всего обратимся к описанию регистров для портов ввода вывода. Эта информация не очень нужна, если вы используете библиотеку StdPeroph. Поэтому я помещу их описание под спойлер.

Регистры портов ввода-вывода.
----------------------------------------------------------------
В этой версии микроконтроллеров регистры портов ввода-вывода несколько усложнились.
Регистр GPIOx_MODER. В этом регистре хранится информация о режиме работы порта ввода-вывода. За каждый вывод порта отвечает 2 бита.
00: Вход(Устанавливается после сброса)
01: Обычный режим выхода.
10: Режим альтернативной функции.
11: Аналоговый режим.

Регистр GPIOx_OTYPER отвечает за настройки при работе на выход. В данном регистре только один бит отвечает за один вывод.
0: Выдох с подтягиванием (Устанавливается после сброса)
1: Выход с открытым коллектором

GPIOx_OSPEEDR отвечает за скорость работы порта.
00: 2 MГц Низкая скорость
01: 25 MГц Средняя скорость
10: 50 MГц Высокая скорость
11: 100 MГц Высокая скорость при 30пФ. При 15 пФ скорость будет не выше 80 МГц.
----------------------------------------------------------------

Используя библиотеку StdPeriph, убедитесь, что у вас раскомментированы нужные файлы библиотеки. В нашем случае нам понадобятся файлы misc.h, stm32f4xx_rcc.h, stm32f4xx_gpio.h. Остальные можно закомментировать.
У отладки Stm32f4Discovery есть 4 светодиода на выводах PD12, PD13, PD14, PD15. Возьмём светодиод на PD12.
Первое, что надо делать при программировании любой периферии МК - это затактировать его. Если этого не сделать, что устройство работать не будет. Всё, что касается тактирования, описано в файле stm32f4xx_rcc.h. В этом файле находим define, который описывает бит включения тактирования GPIOD. Это RCC_AHB1Periph_GPIOD. А значит, что функция, которую надо использовать называется RCC_AHB1PeriphClockCmd. Пишем следующее:

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);

Инициализирующая структура описана в файле stm32f4xx_gpio.h.

Инициализация порта ввода вывода.
----------------------------------------------------------------
typedefstruct
{
uint16_tGPIO_Pin; /* Описывает какие выводы порта будут инициализированы. Этот параметр может принимать одно из значений описанных в структуреGPIO_pins_define */
GPIOSpeed_TypeDefGPIO_Speed; /*Устанавливаетскоростьработывывода.Этот параметр может принимать значения из структурыGPIOSpeed_TypeDef */
GPIOMode_TypeDefGPIO_Mode; /*Определяет режим работы выбранных выводов МК. Этот параметр может принимать значения из структурыGPIOMode_TypeDef */
GPIOOType_TypeDefGPIO_OType;/* Определяет режим работы выводов, если те проинициализированы как выход. Этот параметр может принимать значения из структурыGPIOOType_TypeDef*/

GPIOPuPd_TypeDefGPIO_PuPd;/* Определяет подтягивание вывода к земле или питанию. Этот параметр может принимать значения из структурыGPIOPuPd_TypeDef*/

}GPIO_InitTypeDef;

GPIO_Pin может принимать значения вида: GPIO_Pin_х, где х – номер вывода в порте.
GPIO_Speed может принимать одно из четырёх значений: GPIO_Speed_2MHz, GPIO_Speed_25MHz, GPIO_Speed_50MHz, GPIO_Speed_100MHz.
Работает только, если вывод определён как выход.

GPIO_Mode принимает следующие значения:
GPIO_Mode_IN – режимвхода.
GPIO_Mode_OUT – режимвыхода.
GPIO_Mode_AF – режим альтернативной функции.
GPIO_Mode_AN – режим аналогового входа.

GPIO_OType принимает значения:
GPIO_OType_PP – есть подтягивание.
GPIO_OType_OD – открытый коллектор.

GPIO_PuPd принимает значения:
GPIO_PuPd_NOPULL – без подтягивания.
GPIO_PuPd_UP – подтягивание к питанию.
GPIO_PuPd_DOWN – подтягивание к земле.

Теперь заполним структуру нужными нам параметрами.
GPIO_InitTypeDef GPIO_InitType;

GPIO_InitType.GPIO_Pin = GPIO_Pin_12;
GPIO_InitType.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitType.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitType.GPIO_OType = GPIO_OType_PP;
GPIO_InitType.GPIO_PuPd = GPIO_PuPd_NOPULL;

----------------------------------------------------------------

3) Теперь запишем настройки в порт:

GPIO_Init(GPIOD, &GPIO_InitType);

Тут просто: Первым пишем название порта в виде GPIOХ, где Х - номер порта. А вторым пишем указатель на структуру.

Под спойлером находится программа для мигания светодиодом.

Программа мигания светодиодом.
----------------------------------------------------------------
int main(void)
{
GPIO_InitTypeDef GPIO_InitType;

// Enable PORTB Periph clock
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);

GPIO_InitType.GPIO_Pin = GPIO_Pin_12;
GPIO_InitType.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitType.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitType.GPIO_OType = GPIO_OType_PP;
GPIO_InitType.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOD, &GPIO_InitType);

while(1)
{
GPIO_SetBits( GPIOD, GPIO_Pin_12);
Delay_ms(500);

GPIO_ResetBits( GPIOD, GPIO_Pin_12);
Delay_ms(500);
}
}
----------------------------------------------------------------

Осталось только описать функцию Delay_ms(unsigned int time);
Создадим её с помощью таймера systick. Для начала его надо проинициализировать.

SysTick_Config(SystemCoreClock /1000);//1ms

Переменная SystemCoreClock описана в файле system_stm32f4xx.c. Её значение должно быть равно реальному тактированию вашего устройства. В моём случае это 72000000 Гц. Измените на правильное. uint32_t SystemCoreClock = 72000000;

Функцию Delay_ms() перепишем следующим образом:

void Delay_ms( unsigned int Time)
{
SysTickDelay = Time;
while (SysTickDelay != 0) {};
}

Где SysTickDelay – глобальная переменная.

Теперь осталось только в функцию прерывания от SysTick прописать код:

void SysTick_Handler(void)
{
if (SysTickDelay != 0)
{
SysTickDelay--;
}
}

Категория: Уроки по программированию stm32f4xx | Добавил: Korvin (05.08.2013)
Просмотров: 3375 | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Поиск

Статистика

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

Copyright MyCorp © 2017