STM32L–Линии ввода-вывода + базовый проект

15 Августа 2011 К комментариям

В первую очередь при работе с новым микроконтроллером мне необходима его связь с “внешним миром”, самое простое средство – линии ввода-вывода. Ранее в обзоре я писал об изменениях в данном модуле относительно старого семейства STM32F1хх, поэтому использовать описанные ранее макросы для работы с линиями ввода-вывода не получиться, они требуют доработки.

Линии ввода-вывода

Рассмотрим структурную схему стандартной линии ввода-вывода:

image

Первоначально взглянув на структурную схему, мне показалось что нет ни каких изменений относительно STM32F1хх, но это не верно. Основное изменение это перенос резисторов подтяжки (Pull up, Pull down) из входного драйвера во “внешнюю” цепь, для сравнения структурная схема STM32F1хх:

image

В связи с чем появились дополнительные возможности конфигурирования линии ввода-вывода:

image

Самая интересное, на мой взгляд, возможность задавать режим работы линии ввода-вывода при альтернативной функции.

Перейдем к блоку альтернативных функций.

Из-за увеличения количества альтернативных функций на одну линии разработчики решили ввести мультиплексор переключений (не знаю как правильно назвать).

Фактически выход каждой линии ввода-вывода может быть подключён к определенной альтернативной функции (модулю).

Для управления мультиплексорами на каждый порт дополнительно ввели два регистра (AFRL, AFRH) и по четыре бита на каждую линии ввода-вывода, определив тем самым количество комбинаций (16):

image

image

Что бы было более понятно приведу начало таблицы распределений альтернативных функций для микроконтроллера STM32L152RB (полное описание в справочном листке):

image

Например линия ввода-вывода PA1 имеет возможность подключения к пяти альтернативным функциям (на рисунке выше я их отметил синим). Если необходимо подключить линию PA1 ко второму каналу таймера 2, достаточно установить AFRL1[3:0]=1 в регистре AFRL.

Основываясь на документации я написал новые макросы для работы с линиями ввода-вывода.

Макросы для работы с линиями ввода-вывода

Для начала работы с линией необходимо сделать объявление, например настройки для управления светодиодом установленным на плате:

#define LED_GREEN	B, 7, HIGH, MODE_OUTPUT_PUSH_PULL, SPEED_400KHZ, AF_NO
  • В - литера порта
  • 7 – номер линии
  • HIGH – активный уровень
  • MODE_OUTPUT_PUSH_PULL – режим работы
  • SPEED_400KHZ – максимальная частота переключения
  • AF_NO – альтернативная функция

Далее перед использованием разрешить тактирование и сконфигурировать линию:

RCC->AHBENR |= RCC_AHBENR_GPIOBEN;

PIN_CONFIGURATION(LED_GREEN);

Пример: меняем состояние на линии:

while (1)
{
	PIN_ON(LED_GREEN);
	PIN_OFF(LED_GREEN);
}

Первый проект

Данный пункт я описывал ранее в серии статей о STM32F1.

За одним исключением, файл начальной инициализации взял готовый от производителя (не стал переписывать на Си).

Простой пример, изменяется состояние светодиодов при нажатии на кнопку пользователя:

//------------------------------------------------------------------------------
void main(void)
{
	mcu_rcc_init();

	PIN_CONFIGURATION(PIN_TEST);
	PIN_CONFIGURATION(LED_GREEN);
	PIN_CONFIGURATION(LED_BLUE);
	PIN_CONFIGURATION(USER_BUTTON);

	//
	PIN_ON(LED_GREEN);

	while (1)
	{
		if (PIN_SIGNAL(USER_BUTTON))
		{
			PIN_ON(LED_GREEN);
			PIN_OFF(LED_BLUE);
		}
		else
		{
			PIN_OFF(LED_GREEN);
			PIN_ON(LED_BLUE);
		}
	}
}

Полный проект доступен в исходниках:

http://dev.ziblog.ru/stm32l-discovery-demo/downloads

ветка demo-001

Документация на микроконтроллер:

DS6876: Справочный листок (Основные характеристики микроконтроллера)

RM0038: STM32L151xx and STM32L152xx advanced ARM-based 32-bit MCUs (Руководство пользователя)

STM32L151xx and STM32L152xx ultralow power limitations (Известные на данный момент ошибки)

Полный комплект документации доступен на сайте производителя: перейти.

Документация по плате:

UM1079: STM32L-DISCOVERY (Руководство пользователя)

Board schematics for STM32L-DISCOVERY board (Принципиальная схема)

О различиях между L1, F1 и F2 можно прочитать в документе:

AN3364: Migration and compatibility guidelines for STM32 microcontroller applications.



comments powered by Disqus