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 лет назад

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

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

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

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

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

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

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

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

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

Haamu
Haamu
9 лет назад

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

Alexander
Alexander
8 лет назад

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

Это она?

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

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

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