Top.Mail.Ru

Быстрый старт с отладочной платой Mini STM32.

Не уверен, что это официальное название этой платы, в общем вот она на фото )

Итак, в этой статье мы создадим небольшой проект, просто для ознакомления с Mini STM32. Пока не будем использовать дисплей, USB и другие возможности этой платы, а поиграемся, как принято, с диодами. Прошивать контроллер я буду при помощи встроенного в STM32 Discovery ST-Link программатора, о чем, если вдруг кому понадобится, написано тут. Кстати, микроконтроллер на моей Mini STM32 – STM32F103VET6. Но нам то все равно, что прошивать, главное как и чем.

Время традиционной вставки: поскольку компания STMicroelectronics прекратила поддержку библиотеки SPL, которая использовалась в этом курсе, я создал новый, посвященный работе уже с новыми инструментами, так что буду рад видеть вас там - STM32CubeMx. Кроме того, вот глобальная рубрика по STM32.

Ну что же, можно приступать. На плате прямо-таки манят 4 расположенных рядом синих светодиода. Давайте-ка сделаем что-то вроде "бегущего огня" - сначала горит первый диод, потом второй и так далее до бесконечности. Для первого знакомства с платой в самый раз. Создаем новый проект, не забыв указать в настройках контроллер, который мы будем использовать. В файле stm32f10x.h раскомментируем строку

#define STM32F10X_HD // (для контроллера STM32F103VET6)

Если этого не сделать, то программа прошьется, но работать не будет. Либо можно прописать #define STM32F10X_HD в настройках проекта, кому как удобнее.

#if !defined (STM32F10X_LD) && !defined (STM32F10X_LD_VL) && !defined (STM32F10X_MD) && !defined (STM32F10X_MD_VL) && !defined (STM32F10X_HD) && !defined (STM32F10X_XL) && !defined (STM32F10X_CL)
	/* #define STM32F10X_LD */            /* STM32F10X_LD: STM32 Low density devices */
	/* #define STM32F10X_LD_VL */         /* STM32F10X_LD_VL: STM32 Low density Value Line devices */
	/* #define STM32F10X_MD */            /* STM32F10X_MD: STM32 Medium density devices */
	/* #define STM32F10X_MD_VL */         /* STM32F10X_MD_VL: STM32 Medium density Value Line devices */
	#define STM32F10X_HD                  /* STM32F10X_HD: STM32 High density devices */
	/*#define STM32F10X_XL */             /* STM32F10X_XL: STM32 XL-density devices */
	/* #define STM32F10X_CL */            /* STM32F10X_CL: STM32 Connectivity line devices */
#endif

Ну все, подготовка завершена, теперь напишем собственно код программы:

/***************************************************************************************/
#include "stm32f10x.h" 
#include "stm32f10x_rcc.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_conf.h"


/***************************************************************************************/
GPIO_InitTypeDef port;


/***************************************************************************************/

Из SPL тащим файлы для работы с портами и тактированием. Дальше инициализация:

/***************************************************************************************/
void initialization()
{
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
	port.GPIO_Mode = GPIO_Mode_Out_PP;
	port.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;
	port.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOC, &port);
	port.GPIO_Mode = GPIO_Mode_Out_PP;
	port.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_13;
	port.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOD, &port);
}


/***************************************************************************************/

Четыре диода – четыре пина настроенных на выход. Чтобы понять, какие именно выводы и какого порта нужны, лезем в документацию на плату Mini STM32, а точнее, нам нужна схема. Вместе с платой прислали диск для нее, на нем-то все и находится. Итак, ищем на схеме светодиоды:

Mini STM32 Leds

Сразу видно, куда и что подключать. Диоды на выводах – PC6, PC7, PD6, PD13. Их и инициализируем.Нам еще понадобится функция, реализующая задержку. Пусть будет так:

// Для того, чтобы не нагружать пример здесь задержка сделана просто циклом,
// но в "боевых" проектах, конечно же, всегда нужно использовать для этого таймеры
/***************************************************************************************/
void delay(uint32_t duration)
{
	uint32_t i;
	for(i = 0; i < duration; i++)
	{
		__NOP();
	}
}


/***************************************************************************************/

Все готово, кроме функции main(). Вот ее полный код:

/***************************************************************************************/
int main()
{
	initialization();
	while(1)
	{
		GPIO_SetBits(GPIOC, GPIO_Pin_6);
		delay(0xFFFFF);
		
		GPIO_ResetBits(GPIOC, GPIO_Pin_6);
		GPIO_SetBits(GPIOC, GPIO_Pin_7);
		delay(0xFFFFF);
		
		GPIO_ResetBits(GPIOC, GPIO_Pin_7);
		GPIO_SetBits(GPIOD, GPIO_Pin_13);
		delay(0xFFFFF);
		
		GPIO_ResetBits(GPIOD, GPIO_Pin_13);
		GPIO_SetBits(GPIOD, GPIO_Pin_6);
		delay(0xFFFFF);
		
		GPIO_ResetBits(GPIOD, GPIO_Pin_6);
		delay(0xFFFFF);
	}
}


/***************************************************************************************/

Вызываем функцию инициализации, а в вечном цикле играемся со светодиодами. Зажигаем первый, ждем, гасим первый, зажигаем второй, ждем... И так далее.

Компилируем программу и прошиваем контроллер. В результате видим, как поочередно загораются диоды. Вот в принципе и все, первые шаги в освоении отладочной платы сделаны, а остальное впереди.

Подписаться
Уведомить о
guest

18 комментариев
Старые
Новые
Межтекстовые Отзывы
Посмотреть все комментарии
Георгий
11 лет назад

Здравствуйте. А можно где-нибудь содержимое диска глянуть? Мне плата тоже пришла, но без диска. Заранее спасибо.

Георгий
11 лет назад

Огромное спасибо!

Валерий
Валерий
9 лет назад

А можно ещё раз загрузить!

Валерий
Валерий
9 лет назад

Извините, удалось скачать!

Валерий
Валерий
9 лет назад

Спасибо, там пришлось скачать программу загрузки для доступа, ну немного хлопотно, но справился, не давая подсунуть мне НЕНУЖНОЕ!

Валерий
Валерий
9 лет назад

У меня такая плата - она мне очень нравиться по цене\качеству. Ваши примеры ВЕСЬМА УДАЧНЫЕ и надеюсь ещё задать умный вопрос... :-))

Haamu
Haamu
8 лет назад

Подскажите, пожалуйста, как точно называется эта плата и название производителя. А в идеале можно даже ссылку, где документацию на нее глянуть.

Alexander
Alexander
8 лет назад

А вот эта довольно похоже:
http://s.aliexpress.com/BZFj2MvE

Это она?

Сабыр
Сабыр
8 лет назад

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

18
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x