STM32 новичку в ARM что к чему

Кто любит RISC в жизни, заходим, не стесняемся.
uk8amk
Поставщик валерьянки для Кота
Сообщения: 2222
Зарегистрирован: Вт ноя 27, 2007 11:32:06
Откуда: Tashkent

Re: STM32 новичку в ARM что к чему

Сообщение uk8amk »

Обязательно ли делать void initAll()?


Делать... описывать, вызывать?
Можно отказаться от инициализации периферии, но тогда будет вещь в себе.

а потом объявляем порт,


Порт не объявляется, это всего-лишь ячейка памяти в адресном пространстве.
Все декларации прописаны в файле типа stm32f10x.h.
Данный кусок кода лишь вызывает подпрограмму, которая копирует туда данные из структуры.

А вообще, стоит ли использовать SPL?


Где-то на форуме неоднократно поднимался этот вопрос. Насколько помню, к единому мнению так и не пришли.

Как заставить КЕЙЛ показывать мне состояние переменных


Включить окошки Call Stack Window, Watch windows, Memory windows. Но при высокой оптимизации кода там может быть бардак.
Аватара пользователя
isx
Поставщик валерьянки для Кота
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

Re: STM32 новичку в ARM что к чему

Сообщение isx »

uk8amk писал(а):отказаться от инициализации периферии

Инициализацию провести, но не в void initAll(), а просто после иклудов или объявления переменных...
uk8amk писал(а):орт не объявляется, это всего-лишь ячейка памяти в адресном пространстве.

Просто мы там указываем пин, а к какому порту не указываем. Как он догадывается-то?
uk8amk писал(а):Где-то на форуме неоднократно поднимался этот вопрос.

SPL это для лентяев или реально полезно? Просто в АВР я не использовал библиотеки, а предпочитал сам писать весь код (так исправить/поправить проще и для понимания полезно :) )
Аватара пользователя
menzoda
Вымогатель припоя
Сообщения: 535
Зарегистрирован: Вт авг 28, 2012 22:21:33

Re: STM32 новичку в ARM что к чему

Сообщение menzoda »

isx писал(а):так исправить/поправить проще и для понимания полезно

Раз тебе проще и полезней, то делай как раньше! А спрашивать не надо, а то опять спор начнется. Если интересно можешь почитать тему viewtopic.php?f=17&t=99140, в ней вроде и был тот холивар на несколько десятков страниц.
titoFF
Встал на лапы
Сообщения: 100
Зарегистрирован: Пт авг 02, 2013 07:20:04

Re: STM32 новичку в ARM что к чему

Сообщение titoFF »

Привет ARMщики! Встречайте новичка с новыми глупыми вопросами. Написал (хотя нет, скопипастил) я свою первую прошивку, залил её. Светодиодики весело мигают и всё бы ничего, но после отключения питания и подаче его вновь ничего не горит. STM32F4Discovery, пишу в кокосе, программировал им и ST- Link.
uk8amk
Поставщик валерьянки для Кота
Сообщения: 2222
Зарегистрирован: Вт ноя 27, 2007 11:32:06
Откуда: Tashkent

Re: STM32 новичку в ARM что к чему

Сообщение uk8amk »

Просто мы там указываем пин, а к какому порту не указываем. Как он догадывается-то?


Да?

А вот ваш код:

Код: Выделить всё

GPIO_Init(GPIOB, &port);


Смотрим в CMSIS:

Код: Выделить всё

#define GPIOB               ((GPIO_TypeDef *) GPIOB_BASE)


Ну и дальше распутывая дефайны добираемся до таблички адресов периферии из юзермарнуала. Так что функции остается только скопировать туда нужные настройки. Никакой мистики.
svs39
Встал на лапы
Сообщения: 95
Зарегистрирован: Вс авг 22, 2010 09:23:08

Re: STM32 новичку в ARM что к чему

Сообщение svs39 »

isx писал(а): SPL это для лентяев или реально полезно? Просто в АВР я не использовал библиотеки, а предпочитал сам писать весь код (так исправить/поправить проще и для понимания полезно :) )

а на стм32 программировали?
Аватара пользователя
isx
Поставщик валерьянки для Кота
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

Re: STM32 новичку в ARM что к чему

Сообщение isx »

uk8amk писал(а):А вот ваш код:

ТОесть, то что он стоит в конце описания работы пина - это норма?
Начал разбирать работу с регистрами минуя SPL. Нашёл в мануале главу AHB peripheral clock enable register (RCC_AHBENR) . Там 32 бита. Как записать в них значения? В АВР, например, при назначении пинам порта функций входа/выхода достаточно было написать DDRD = 0b01101010 (к примеру), а как быть тут?

svs39 писал(а):а на стм32 программировали?

Только начинаю, поэтому такие глупые вопросы :)
Аватара пользователя
menzoda
Вымогатель припоя
Сообщения: 535
Зарегистрирован: Вт авг 28, 2012 22:21:33

Re: STM32 новичку в ARM что к чему

Сообщение menzoda »

isx писал(а):Там 32 бита. Как записать в них значения?

Просто. Через оператор присваивания "=", используя десятичный, восьмеричный, или шестнадцатеричный целочисленный литерал ( в С нету двоичных литералов). А вообще странный вопрос. Тут дело не в незнании ARM и в частности STM32, а в неуверенном владении самим языком. Рекомендую почитать какую-нибудь книжку по С.
Аватара пользователя
isx
Поставщик валерьянки для Кота
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

Re: STM32 новичку в ARM что к чему

Сообщение isx »

Я не много не об этом... :)
К примеру, в коде мне надо включить тактирование портаD (это 20-й бит). По умолчанию уже включены 2-й и 4-й биты, поэтому значение регистра должно быть 0x0010 0014.
Пробовал так:

Код: Выделить всё

RCC_AHBENR = 0x00100014;

но кейл ругается на RCC_AHBENR, типо error: #77-D: this declaration has no storage class or type specifier
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: STM32 новичку в ARM что к чему

Сообщение oleg110592 »

а так:

Код: Выделить всё

RCC->AHBENR = 0x00100014;
Аватара пользователя
isx
Поставщик валерьянки для Кота
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

Re: STM32 новичку в ARM что к чему

Сообщение isx »

Вот ВЕСЬ код программы (а то может я в принципе всё не так делаю):

Код: Выделить всё

#include "stm32f0xx.h"
RCC->AHBENR = 0x00100014;
int main()
{
    while(1);
}

Ошибки:
Build target 'STM'
compiling test.c...
Source_Files\test.c(2): error: #18: expected a ")"
RCC->AHBENR = 0x00100014;
Source_Files\test.c(2): error: #79: expected a type specifier
RCC->AHBENR = 0x00100014;
Source_Files\test.c(2): error: #101: "RCC_TypeDef" has already been declared in the current scope
RCC->AHBENR = 0x00100014;
Source_Files\test.c(2): error: #141-D: unnamed prototyped parameters not allowed when body is present
RCC->AHBENR = 0x00100014;
Source_Files\test.c(2): error: #130: expected a "{"
RCC->AHBENR = 0x00100014;
Source_Files\test.c: 0 warnings, 5 errors
".\f030.axf" - 5 Error(s), 0 Warning(s).
Target not created
Аватара пользователя
kisssko
Открыл глаза
Сообщения: 52
Зарегистрирован: Пт янв 10, 2014 02:05:13
Откуда: Воронеж

Re: STM32 новичку в ARM что к чему

Сообщение kisssko »

isx писал(а):Вот ВЕСЬ код программы (а то может я в принципе всё не так делаю):

Код: Выделить всё

#include "stm32f0xx.h"
RCC->AHBENR = 0x00100014;
int main()
{
    while(1);
}


Тут ВСЁ не так! Та строчка должна внутри main() быть, как минимум.
Аватара пользователя
isx
Поставщик валерьянки для Кота
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

Re: STM32 новичку в ARM что к чему

Сообщение isx »

kisssko писал(а):Та строчка должна внутри main() быть

Блин, точно... Спасибо за поправку)
И ещё вопрос... Как я понял CMSIS библиотеку использовать обязательно. Как её вообще правильно использовать в проекте без SPL(ато все примеры именно с ней идут)?
Аватара пользователя
menzoda
Вымогатель припоя
Сообщения: 535
Зарегистрирован: Вт авг 28, 2012 22:21:33

Re: STM32 новичку в ARM что к чему

Сообщение menzoda »

isx писал(а):Как я понял CMSIS библиотеку использовать обязательно.

Нет.

Я бы посоветовал для начала сделать мигание светодиодом полностью самому. Полностью - это значит полностью: никаких SPL, CMSIS, готовых startup.s и stm32f0xx.h, а так же визардов для настройки компоновщика (только с помощью своего скрипта). Только даташит, только хардкор. Это будет очень хорошим опытом и позволит тебе понять как все устроено. Куча вопросов отпадут сами собой.
HHIMERA
Друг Кота
Сообщения: 4583
Зарегистрирован: Вс дек 05, 2010 06:10:34
Откуда: ЮВ

Re: STM32 новичку в ARM что к чему

Сообщение HHIMERA »

menzoda писал(а):Я бы посоветовал для начала сделать мигание светодиодом полностью самому. Полностью - это значит полностью: никаких SPL, CMSIS, готовых startup.s и stm32f0xx.h, а так же визардов для настройки компоновщика (только с помощью своего скрипта).

:facepalm:
Хочется посмотреть... 8)
Только даташит, только хардкор.

Сразу... в HEX'е... :)))
"Я не даю готовых решений, я заставляю думать!"(С)
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: STM32 новичку в ARM что к чему

Сообщение oleg110592 »

между си и HEXом есть еще вариант мучений на ассемблере: http://stm32asm.ru/periph_gpio_init.html :)
Аватара пользователя
menzoda
Вымогатель припоя
Сообщения: 535
Зарегистрирован: Вт авг 28, 2012 22:21:33

Re: STM32 новичку в ARM что к чему

Сообщение menzoda »

HHIMERA писал(а):Сразу... в HEX'е...

Привычка передергивать характеризует собеседника с плохой стороны. Не надо. Да, давно хотел сказать, слова в предложении обычно разделяются пробелами, предложения имеют обыкновение разделяться точками, а многоточие обозначает незаконченную мысль или паузу. Слишком много незаконченных мыслей и пауз. Соберись, обдумай все, потом пиши членораздельное предложение, читать же невозможно.

Теперь собственно по делу. Ерничать не нужно, все, что я перечислил не является чем-то необычным и сложным, представляя собой рутинные элементы разработки ПО, по крайней мере для программиста. Тебя же не удивляет, что приходится инициализировать периферию? Так почему написание простенького скрипта для настройки линкера вызвало такое негодование? Очень полезно знать как все устроено под капотом среды разработки, сразу бы отпали вопросы по типу "как записать число в регистр", "что делать, если нету файла с определениями регистров периферии", "обязательно ли использовать CMSIS", "ой что-то со startup.s" и остальные 90% задаваемых тут.
Аватара пользователя
isx
Поставщик валерьянки для Кота
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

Re: STM32 новичку в ARM что к чему

Сообщение isx »

Ну так я и пытаюсь оградить себя от влияния библиотек.. Мне проще провести инициализацию выставив биты, чем искать строку в чьих то библиотеках...
Так, получается вышеупомянутый код будет работать и без CMSIS и без СТАРТАП-а?
Это хорошо, значит можно плюнуть на них и нырять в мануал :)
HHIMERA
Друг Кота
Сообщения: 4583
Зарегистрирован: Вс дек 05, 2010 06:10:34
Откуда: ЮВ

Re: STM32 новичку в ARM что к чему

Сообщение HHIMERA »

menzoda писал(а):Привычка передергивать характеризует собеседника с плохой стороны.

Привычка выдавать бред на гора и проповедовать его как истину вообще является предметом рассмотрения данного проявления светилами психиатрии. Какое ещё "написание простенького скрипта для настройки линкера", может и линкер самому написать? А чего стесняться, для новичка самое оно! Даже в случае с АСМом, что, тупо адреса писать на бумажке чтобы потом ими блистать в командах?
И потом, а чего так нервничать, покажите пример!
Хочется посмотреть... 8)
"Я не даю готовых решений, я заставляю думать!"(С)
HHIMERA
Друг Кота
Сообщения: 4583
Зарегистрирован: Вс дек 05, 2010 06:10:34
Откуда: ЮВ

Re: STM32 новичку в ARM что к чему

Сообщение HHIMERA »

isx писал(а): Так, получается вышеупомянутый код будет работать и без CMSIS и без СТАРТАП-а?
Это хорошо, значит можно плюнуть на них и нырять в мануал :)

Да не слушайте вы некоторых "горе от ума"...
Разберитесь для чего существуют startup.s и stm32f0xx.h... и для чего придумали CMSIS...
И кстати... stm32f10x.h это файл CMSIS...

Код: Выделить всё

  ******************************************************************************
  * @file    stm32f10x.h
  * @author  MCD Application Team
  * @version V3.5.0
  * @date    11-March-2011
  * @brief   CMSIS Cortex-M3 Device Peripheral Access Layer Header File.
  *          This file contains all the peripheral register's definitions, bits
  *          definitions and memory mapping for STM32F10x Connectivity line,
  *          High density, High density value line, Medium density,
  *          Medium density Value line, Low density, Low density Value line
  *          and XL-density devices.
"Я не даю готовых решений, я заставляю думать!"(С)
Ответить

Вернуться в «ARM»