LINUX.ORG.RU

Makefile для STM32

 , , ,


0

2

Давно не тыкал STM32, а сейчас появилась потребность.
Есть:

Когда последний раз писал под STM32, использовал плагин для Eclipse, сейчас не хочу заморачиваться с IDE, хочу писать код в простом текстовом редакторе и использовать простой скрипт для сборки.
Копнул antares, но как-то это слишком сложно, я хочу простой мейкфайл. Все примеры, которые гуглятся, довольно старые. Например, почти везде используются заголовочные файлы stm32f10x.h и stm32f10x_conf.h, которых нет в STM32Cube.
Подскажите, может, кто-то уже написал такой мейкфайл? Желательно, чтобы в нём использовался именно stlink от texane для прошивки и определения типа чипа.

★★★★★

Я свой CMakeLists.txt написал, чтобы собирать, правда он в довольно мусорном состоянии. Ничего сложного: компилишь, потом линкуешь со специальным linker script.

Смотри что нашел, думаю, и мне пригодится: http://we.easyelectronics.ru/STM32/ispolzuem-cmake-i-gcc-dlya-programmirovani...

aspotashev ★★★
()
Ответ на: комментарий от aspotashev

О, это мой прожектик. Инфа в посте немного устаревшая, на https://github.com/ObKo/stm32-cmake актуальная. Тоже много чего надо бы допилить... Летом как раз перевел скрипты на использование STM32Cube.

P.S. Оказывается, QtCreator прекрасно подходит в качестве IDE для МК

Kosyak ★★★★
()
Ответ на: комментарий от Kosyak

Вообще, я не хотел CMake, но попробую обязательно.

CYB3R ★★★★★
() автор топика
Ответ на: комментарий от Kosyak

Что-то ничего у меня не выходит.

x@x:~/…/stm32-blinky/build$ cmake -DSTM32_CHIP=STM32F103C8T6 -DCMAKE_TOOLCHAIN_FILE=/home/x/…/cmake/gcc_stm32.cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_MODULE_PATH=/home/x/…/cmake/ -DSTM32Cube_DIR=/home/x/Документы/st/stm32cubef1/STM32Cube_FW_F1_V1.2.0/ -DSTM32_FLASH_SIZE=64K -DSTM32_RAM_SIZE=20K ..
-- No TOOLCHAIN_PREFIX specified, using default: /usr
-- No TARGET_TRIPLET specified, using default: arm-none-eabi
-- No STM32_FAMILY specified, trying to get it from STM32_CHIP
-- Selected STM32 family: F1
-- STM32F103C8T6 is 103xB device
-- No linker script specified, generating default
-- STM32F103C8T6 has 64KiB of flash memory and 20KiB of RAM
-- Configuring done
-- Generating done
-- Build files have been written to: /home/x/…/stm32-blinky/build
x@x:~/…/stm32-blinky/build$ make
Scanning dependencies of target stm32-blinky
[  8%] Building C object CMakeFiles/stm32-blinky.dir/main.c.obj
/home/x/…/stm32-blinky/main.c: In function 'initTimers':
/home/x/…/stm32-blinky/main.c:44:5: warning: implicit declaration of function '__HAL_RCC_TIM8_CLK_ENABLE' [-Wimplicit-function-declaration]
     __TIM8_CLK_ENABLE();
     ^
/home/x/…/stm32-blinky/main.c:45:27: error: 'TIM8' undeclared (first use in this function)
     TIM_Handle.Instance = TIM8;
                           ^
/home/x/…/stm32-blinky/main.c:45:27: note: each undeclared identifier is reported only once for each function it appears in
CMakeFiles/stm32-blinky.dir/build.make:54: ошибка выполнения рецепта для цели «CMakeFiles/stm32-blinky.dir/main.c.obj»
make[2]: *** [CMakeFiles/stm32-blinky.dir/main.c.obj] Ошибка 1
CMakeFiles/Makefile2:60: ошибка выполнения рецепта для цели «CMakeFiles/stm32-blinky.dir/all»
make[1]: *** [CMakeFiles/stm32-blinky.dir/all] Ошибка 2
Makefile:75: ошибка выполнения рецепта для цели «all»
make: *** [all] Ошибка 2
x@x:~/…/stm32-blinky/build$ 
Где должен быть дефайн для этого TIM8?
Не нашёл никаких переменных, указывающих плотность и частоту чипа. Или они уже не нужны?
Содержимое директории packages кажется дико устаревшим, раз все сборочные скрипты теперь используют STM32Cube.

CYB3R ★★★★★
() автор топика

В примерах с OpenCM3 идет Makefile, точнее цепочка Makefile.include'ов. Код для USB с OpenCM3 на порядок проще, чем со старой StdPeriph_driver/USB_fs_driver ящитаю.
Там же, в Makefile.include, задается тип программатора. Вот так оно у меня сделано: https://www.dropbox.com/s/1hd4004vqwg626r/libopencm3_prj.tar.bz2?dl=0

Rupricht ★★
()
Ответ на: комментарий от CYB3R

Где должен быть дефайн для этого TIM8?

Пример Blinky для F1 написан для какой-то из дискавери (STM32VLDISCOVERY кажется), у того чипа есть TIM8, у STM32F103C8 его просто нет.

Не нашёл никаких переменных, указывающих плотность и частоту чипа. Или они уже не нужны?

Вот тут беда, в STM32Cube больше нет автоматической настройки частоты при старте, все нужно делать ручками. (в примере blinky это есть)

Содержимое директории packages кажется дико устаревшим, раз все сборочные скрипты теперь используют STM32Cube.

Это кто-то давно пытался сделать пакеты для убунты и дебиана. Я совсем забыл про это. Там совсем неактуальная инфа.

Kosyak ★★★★
()

Как вообще этот новый HAL в кубе? Такой же быдлокод, как и SPL? Имеет ли смысл юзать куб иначе, чем GUI-пиноконфигурилку?

anonymous
()
Ответ на: комментарий от Kosyak

Спасибо, собралось. Сделал так:

--- a/stm32-blinky/main.c
+++ b/stm32-blinky/main.c
@@ -15,11 +15,11 @@ void initGPIO()
     GPIO_Config.Speed = GPIO_SPEED_HIGH;
 
 #if defined STM32F1
-    __GPIOC_CLK_ENABLE();
+    __GPIOA_CLK_ENABLE();
     __AFIO_CLK_ENABLE();
 
-    GPIO_Config.Pin = GPIO_PIN_8;
-    HAL_GPIO_Init(GPIOC, &GPIO_Config);
+    GPIO_Config.Pin = GPIO_PIN_1;
+    HAL_GPIO_Init(GPIOA, &GPIO_Config);
 #elif defined STM32F2
     __GPIOD_CLK_ENABLE();
 
@@ -41,8 +41,8 @@ void initTimers()
 
     // 10 kHz timer.
 #if defined STM32F1
-    __TIM8_CLK_ENABLE();
-    TIM_Handle.Instance = TIM8;
+    __TIM4_CLK_ENABLE();
+    TIM_Handle.Instance = TIM4;
     TIM_Handle.Init.Prescaler = (uint16_t)(HAL_RCC_GetPCLK2Freq() / 10000) - 1;
 #elif defined STM32F2
     __TIM4_CLK_ENABLE();
На PA1 у меня висит светодиод.
Только теперь светодиод постоянно горит. Где-то я пропустил какую-то инициализацию.

CYB3R ★★★★★
() автор топика
Ответ на: комментарий от CYB3R

В этом примере светодиодом мигает таймер в режиме PWM. PA1 = второй выход таймера TIM2 (TIM2_CH2). Поэтому нужно TIM8 заменить на TIM2 и TIM_CHANNEL_3 на TIM_CHANNEL_2

P.S. Ну и до кучи HAL_RCC_GetPCLK2Freq() -> HAL_RCC_GetPCLK1Freq(), потому что TIM2 висит на APB1 а не APB2.

Kosyak ★★★★
()
Ответ на: комментарий от Kosyak

Спасибо, заработало!
Куча нюансов, всё-таки, это не ардуина.

CYB3R ★★★★★
() автор топика
Ответ на: комментарий от Eddy_Em

Очень лаконично. Мне нравится.
Только зачем у тебя директория «ld» столько раз продублирована?

CYB3R ★★★★★
() автор топика
Ответ на: комментарий от CYB3R

Потому что «в куче» они у меня только на гитхабе лежат, а так все в разнобой. Вот для STM8 у меня чуть поорганизованней (правда, как назвал я заголовочный файл stm8l.h, так и нифига не правил имя)

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от CYB3R

Забульбень тоже на гитхабе репу. Мож помож. У меня вот сейчас есть желание написать для нокиевского экранчика шняжку. А потом и для обычной TуFTы.

Eddy_Em ☆☆☆☆☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.