Статья устарела, обновление:  http://pavelk.ru/stm32f3-discovery

Пришла долгожданная STM32F3 Discovery. До этого моргал только светодиодами на Arduino =)

Так как я полностью новичёк в программировании ARMов, начну, пожалуй, с выбора IDE, и запуском первого проекта.

Выбор IDE был не долгий, выбрал Keil. Так как в остальных (CoIde, Code::Blocks) небыло поддержки чипа STM32F303VC.

Брал сами знаете где. После установки предложит выбор пакетов — выбирайте для STM32F3xx  как то так назывался.

Теперь нужны либы:

CMSIS  —   в ней содержатся описания для доступа к регистрам периферии и   STM32F30x_StdPeriph_Driver

Распаковываем архивы в удобное место.

Цепляем плату к компу (На плате usb шник в разьём USB ST-LINK). Комп должен установить драйвера.

Проверить нужно в диспетчере устройств, если не поставились автоматом, то из установочной директории Keilа запускаем \Keil\ARM\STLink\USBDriver\ST-dpinst_amd64.exe

Ну и жмём обновить драйвера. Должен подхватить автоматом. P.S. Windows 8 x64 — всё ок.

После установки драйвера и подключения платы, светодиод COM должен постоянно гореть.  Если нет — проблемы с подключением/с драйвером.

 

Дальше создаём новый проект и настраиваем:

  1. Project -> new uVision project
  2. В открывшемся окне выбираем наш проц
  3. В открывшемся окне в списке отмечаем Device -> Startup
  4. Слева в менеджере на проекте  клацаем контекстную менюшку и выбираем Options for Target ….
  5. Дальше на вкладке Debug  выбираем ST-Link Debugger, клацаем рядом кнопку  Settings,
  6. в открывшемся окне выбираем вкладку Debug, находим Port  ставим  SW
  7. открываем вкладку Flash Download, нужно задать тип памяти,  жмём Add, я выбрал STM32F3xx Flash.   Жмём Add.
  8. Жмём Ok и переходим на вкладку Utilities, снимаем галку «Use debug driver» и выбираем снова ST-Link Debugger и настраиваем как на предыдущем шаге
  9. Переходим на вкладку С/С++ и в поле define  вписываем «USE_STDPERIPH_DRIVER,STM32F30X«,   без этого проект не соберётся.
  10. Дальше  на этой же вкладке  жмём на кнопку справа от поля Include Paths  и добавляем пути по которым искать заголовочники либ
    1. путьУстановкиStdPeriph_Driver\STM32F30x_StdPeriph_Driver\inc
    2. путьУстановкиStdPeriph_Driver\STM32F30x_StdPeriph_Driver\src
    3. путьУстановкиCMSIS\Device\ST\STM32F30x\Include
    4. путьУстановкиCMSIS\Device\ST\STM32F30x\Source
  11. Добавим файлы  в проект, в менеджере проекта выбираете группу «Source Group 1» и в  контекстной менюшке выбираете: «Add new item to group …»
  12. Первым делом нужно добавить заголовочный файл с названием stm32f30x_conf.h (Иначе Keil будет ругаться при сборке) и в Location укажите папку conf и добавьте эту папку так же как на предыдущем шаге в Include Paths
  13. Ну а дальше добавляем файл исходников, называем main.cpp
  14. На этом настройки проекта закончены

Настало время немножко покодить, в main.c

//-- подключаем необходимые заголовочники
#include "stm32f30x_conf.h"
#include "stm32f30x_gpio.c"
#include "stm32f30x_rcc.c"
#include "stm32f30x.h"

GPIO_InitTypeDef gpio; //-- храним настройки портов

//-- реализуем функцию задержки
void delay(long ms)
{
	for(long i=0; i<ms; i++) __NOP();
}
 
//-- настраиваем порты
void initAll()
{
    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOE, ENABLE);
 
    gpio.GPIO_Mode = GPIO_Mode_OUT;
    gpio.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15 ;
    GPIO_Init(GPIOE, &gpio);
}

int main()
{
	initAll();
	int pins[8] = {GPIO_Pin_8, GPIO_Pin_9, GPIO_Pin_10, GPIO_Pin_11, GPIO_Pin_12, GPIO_Pin_13, GPIO_Pin_14, GPIO_Pin_15 };
		
	int i = 0;
	while(1){	
		
		if (i>=8) {
			i=0;
			GPIO_ResetBits(GPIOE, pins[7]);
		}
		
		if (i>0) {
			GPIO_ResetBits(GPIOE, pins[i-1]);
		}
		
		GPIO_SetBits(GPIOE, pins[i]);
		delay(60000);
		
		i++;		
		
	}
}

Пересобираем проект:  Project -> Build target  и заливаем на плату: Flash -> Download

Жмём на плате кнопку RESET и смотрим на бегающие по кругу огоньки.

Этот пост решает проблемы:

  • Error: Flash Download failed — \Keil\ARM\STLink\ST-LINKIII-KEIL.dll
  • Error:  Flash download failed «CORTEX-M4»