Последнее обновление:
August 28, 2017

Есть мысль... Жми, напиши!
Что имеем: Постов : 167 Авторов: 1 Категорий: 37

Программирование и отладка STM32F3 Discovery в QtCreator под Windows

Впринципе, алгоритм действий точно такой же, как и в предыдущем посте под Ubuntu

Обновил ссылку на новый ARM GCC

Здесь приведу лишь отличия по пунктам

  1. Качаем  драйвер, распаковываем и ставим. Вместо ST-Link поставим OpenOCD  , скачиваем, распаковываем в любую папку.
  2. так же
  3. Качаем GCC ARM с https://developer.arm.com/open-source/gnu-toolchain/gnu-rm/downloads (справа в списке экзешник) и ставим.  отладчик qtcreator-gdb-7-7-mingw32_nt-6-1-i686 (т.к. для Qt Creator нужно, что бы он был с поддержкой питона), распаковываем в любую папку и прописываем полный путь, имя на ваше усмотрение.
  4. Путь компилятораC:\Program Files (x86)\GNU Tools ARM Embedded\6 2017-q1-update\bin\arm-none-eabi-gcc.exe (либо в ту папку, куда поставили)
  5. При добавлении выбираем OpenOCD, запуск в режиме pipe,
    исполняемый файл: прописываете полный путь до OpenOCD.exe,
    файл конфигурации ставите <full path>\openocd-0.9.0\scripts\board\stm32f3discovery.cfg  под свою плату.
  6. Также
  7. Также

Вот как -то так =)

Если вылетает при отладке, либо при её завершении, поставьте в Qt Creator -> Инструменты -> Параметры -> Отладчик -> GDB, расширенные
галку у «Использовать асинхронный режим для работы с программой»
Если будет ошибка «Unknown remote qXfer reply: OK», то см. пункт 5.1 из статьи для Ubuntu

P.S  Вместо OpenOCD можно использовать старую добрую st-link-utility под Windows, но она старовата и, как мне кажется, тормознута.

Views :

381

Программирование и отладка STM32F3 Discovery в QtCreator под Ubuntu

Спустя три года опять решил поиграться с STM32F, но уже вплотную.

В этот раз в роли IDE и дебагера будет выступать QtCreator т.к. в новых версиях есть плагинчик для работы с голыми устройствами.

Ось — Ubuntu 16.04, под Windows тут недалеко.

1.  Поставим сам отладчик для STM т.е. gdb сервер

Для этого клонируем репозиторий и собираем ST-Link Utility

cd ~/Projects/ST-Link-Utility
git clone https://github.com/texane/stlink .
make release
sudo make install
sudo ldconfig
sudo udevadm control --reload-rules
sudo  udevadm trigger

Вот впринципе сервер скомпиллен, запускать его для вывода справки:

st-util -h

2. Включаем в QtCreator плагин Help -> About Plugins -> галка напротив BareMetal и перезапускаем QtCreator

3. Дальше необходимо поставить компилятор и отладчик для архитектуры ARM

sudo apt-get install gcc-arm-none-eabi
sudo apt-get install gdb-arm-none-eabi

4. Добавляем их в QtCreator

Preferences -> Build & Run -> Compillers -> Add -> GCC

Название на ваше усмотрение, у меня: arm-none-eabi-gcc

Путь прописываем такой: /usr/bin/arm-none-eabi-gcc

Preferences -> Build & Run -> Debuggers -> Add

Название на ваше усмотрение, у меня: arm-none-eabi-gdb 

Путь прописываем такой: /usr/bin/arm-none-eabi-gdb 

5. Создадим устройство, переходим в Preferences ->BareMetal -> Add ST-Link

название на ваше усмотрение, у меня ST-Link-Utility

режим запуска: TCP/IP

исполняемый файл: st-util

хост: localhost, порт: 4242

5.1 Нужно дать отладчику дополнительное время для ожидания подключения:

Options->Debugger->GDB->Additional Startup Commands и прописать

set remotetimeout 10

6. Теперь добавляем комплект сборки:

Preferences -> Build & Run -> Kits -> Add

Название на ваше усмотрение, у меня Qt for Bare Metal

Тип устройства: Bare Metal

Устройство: Нажимаете Manager -> Add -> Bare Metal

Название на ваше усмотрение, у меня ST-Link1

Тип сервера gdb:  ST-Link-Utility (из предыдущего шага)

Компилятор:  как задали в предыдущем шаге, у меня arm-none-eabi-gcc

Отладчик: как задали в предыдущем шаге, у меня arm-none-eabi-gdb

Профиль Qt: отсутствует

7. Так, с подготовкой закончили, создаём новый проект, импортировав его шаблон из Git репозитория File-> New -> Import -> Git.

Репозиторий с шаблоном: https://github.com/Riflio/STM32F3DiscoveryQtCreatorTemplate

Путь выбираете свой.

Смените комплект на Qt for Bare Metal и можно наконец то прожать Run, в окне вывод приложения должно появиться примерно это:

Отладка запущена
st-util 1.2.0-147-g3de5cf0
Flash page at addr: 0x08000000 erased
Flash page at addr: 0x08000800 erased
Flash page at addr: 0x08001000 erased

И светодиоды должны начать зажигаться по кругу.

Если вылетает при отладке, либо при её завершении, поставьте в Qt Creator -> Инструменты -> Параметры -> Отладчик -> GDB, расширенные
галку у «Использовать асинхронный режим для работы с программой»
Если будет ошибка «Unknown remote qXfer reply: OK«, то см. пункт 5.1

P.S. Как создавать шаблон под другие контроллеры?
Сделать его достаточно просто, потребуется CMSIS — в ней содержатся описания для доступа к регистрам периферии и STM32F30x_StdPeriph_Driver (в новых версиях переименован в HAL)
Всё это ищется в недрах сайта st.com    ldscripts были найдены в каком-то демо-проекте 😀

Вот как-то так =)

Views :

685

ldd на Андроид

После портирования проги на девайс, прога в упор не хотела видеть одну из библиотек, решил глянуть через ldd, что же ей надо, но ldd на Андроиде не оказалось =(, а просто ldd её не воспринимает.

Чтож, будем делать аналог ldd но для arm =)

Вот так:

echo 'readelf -d $1 | grep "\(NEEDED\)" | sed -r "s/.*\[(.*)\]/\1/"' | sudo tee -a /usr/local/bin/ldd-arm
sudo chmod +x /usr/local/bin/ldd-arm

Потом просто

ldd-arm mylib.so

и увидим список либ, от которых зависит наша.

Ну или через стандартную утилиту ndk-depends:

/home/pavelk/Android/android-ndk-r10e/ndk-depends mylib.so

 

Вот как-то так =)

Views :

303

STM32F3 Discovery первый проект или с чего начать? Hello World.

Статья устарела, обновление:  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»

 

Views :

10230