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

Кто любит RISC в жизни, заходим, не стесняемся.
Аватара пользователя
aam
Собутыльник Кота
Сообщения: 2994
Зарегистрирован: Сб фев 20, 2010 14:00:12
Откуда: Москва

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

Сообщение aam »

Reflector писал(а):Мелкий - это Cortex-M0(урезанный набор команд), 48Mhz, 4К Ram, 16К флеша и т.д..
А мне больше сейчас и не надо. Более того, мою задачу можно было бы решить даже средней Мегой. Я хочу цветомузыку замутить (Микрофон, БПФ, ПДУ, ШИМ-ЦАПы...) :solder: Люди и на Мега8 умудрялись сделать, хоть и в притык. Если бы делал на AVR, взял бы наверно какую-нибудь Мега328, как маленькую и в то же время с 32К ПЗУ и 6-ю каналами ШИМа. Думаю, даже STM32F030F4P6 в разы превосходит эту Мегу и при этом стоит в 3 раза дешевле. Хотя дело конечно не в этом, а в том чтобы наконец взяться за STM)
Reflector писал(а):Нужен отладчик, он же программатор, за 2.5$.
Я правильно понял, в первую очередь надо иметь вот эту штуку: http://ru.aliexpress.com/item/Free-ship ... 85741.html ?
Т. е. как некоторые Меги дебагятся по JTAG, так и STM32 - по SWD?
Reflector писал(а):Если начнешь писать на каком-нибудь HAL, то в дебаге 16К могут закончиться довольно быстро.
Под HAL здесь что подразумевается? Типа машинно-независимый код?
Reflector писал(а):IAR и Keil как С++ IDE крайне убоги.
Я на Си++, т. е. на классы, в МК пока даже не пытался замахиваться) Хотя на М3 может и Линукс ставить считается незазорным, я пока более простые вещи делал, соответственно писал на Си и на Асме где критично по времени или же не лезет в какую-нибудь мелкую Тиню.
Мурик писал(а):Например http://www.emblocks.org
https://habrahabr.ru/post/191468/
Это пользуется популярностью среди профессионалов? Ато, как с платами, в своё время подсел на SprintLayout, а на работе все же ПИКАД) И на CodeVision AVR в свое время тоже забил по этой причине, хотя успел в ней даже одно устройство сделать (для дома).
Реклама
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

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

Сообщение dosikus »

aam, Keil, сниппетсы и самодельный JlinkOB , больше ничего не надо.
Реклама
Reflector
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

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

Сообщение Reflector »

aam писал(а): А мне больше сейчас и не надо. Более того, мою задачу можно было бы решить даже средней Мегой. Я хочу цветомузыку замутить (Микрофон, БПФ, ПДУ, ШИМ-ЦАПы...) :solder: Люди и на Мега8 умудрялись сделать, хоть и в притык. Если бы делал на AVR, взял бы наверно какую-нибудь Мега328, как маленькую и в то же время с 32К ПЗУ и 6-ю каналами ШИМа. Думаю, даже STM32F030F4P6 в разы превосходит эту Мегу и при этом стоит в 3 раза дешевле. Хотя дело конечно не в этом, а в том чтобы наконец взяться за STM)
Я как бы исходил не из того, достаточно ли F030 для какой-то задачи, а из того, что этот мк мелковат именно для обучения.
Reflector писал(а): Я правильно понял, в первую очередь надо иметь вот эту штуку: http://ru.aliexpress.com/item/Free-ship ... 85741.html ?
Т. е. как некоторые Меги дебагятся по JTAG, так и STM32 - по SWD?
Да, не считая того, что за эту сумму можно купить почти 2 отладчика :) Или можно купить F103 и собрать дебаггер самому.
Reflector писал(а): Под HAL здесь что подразумевается? Типа машинно-независимый код?
Библиотека для работы с периферией унифицирующая работу со всеми их мк.
Reflector писал(а): Я на Си++, т. е. на классы, в МК пока даже не пытался замахиваться) Хотя на М3 может и Линукс ставить считается незазорным, я пока более простые вещи делал, соответственно писал на Си и на Асме где критично по времени или же не лезет в какую-нибудь мелкую Тиню.
Visaulgdb по умолчанию создает С++ проект, там даже выбора нет, т.е. можно, конечно, потом переименовать главный файл в .с, но бинарник получится абсолютно идентичный, по крайней мере для gcc. А смысл в том, что ты можешь писать на С, но получаешь более строгую проверку типов и возможность использовать любые возможности С++, например, шаблоны. Используют же сишники макросы, почему бы им не использовать и их более продвинутый аналог?
Аватара пользователя
Мурик
Друг Кота
Сообщения: 3383
Зарегистрирован: Пн окт 11, 2010 19:00:08

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

Сообщение Мурик »

aam писал(а):Я правильно понял, в первую очередь надо иметь вот эту штуку: http://ru.aliexpress.com/item/Free-ship ... 85741.html ?
Лучше уж такую http://ru.aliexpress.com/item/Hot-Sale- ... 14985.html
Чем лучше? Тем что функционал тот же, а цена в два раз ниже на данный момент. Если нет разницы, то зачем платить больше? :)))
Но если не нужна отладка, то достаточно конвертера USB to COM для прошивки через USART загрузчик.
aam писал(а):Это пользуется популярностью среди профессионалов?
У профессионалов это обычно не хобби, а работа, и они (или компания где они работают) могут себе позволить купить IDE за несколько тысяч долларов! http://www.microcontroller.ru/catalog1.php?cat_id=146

У EmBitz для STM32 компилятор GCC и если что, обычно не составляет труда перенести проект в другую среду, использующую этот же компилятор. :)
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
aam
Собутыльник Кота
Сообщения: 2994
Зарегистрирован: Сб фев 20, 2010 14:00:12
Откуда: Москва

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

Сообщение aam »

Reflector писал(а):Да, не считая того, что за эту сумму можно купить почти 2 отладчика :) Или можно купить F103 и собрать дебаггер самому.
Что-то я запутался...
Это - тупо проц на платке в обрамлении кварца, кнопочки Reset и разъемов? Отладчика/программатора для внешнего МК там нет? Если так, то ничего не мешает взять любой понравившийся МК и припаять его куда хочу и как хочу (к ардунье и им подобным всегда относился скептически) ?
Мурик писал(а):Лучше уж такую http://ru.aliexpress.com/item/Hot-Sale- ... 14985.html
Спасибо! :beer: Я так понял, это аналог, но просто другого производителя и соответственно, по другой цене?
dosikus писал(а):самодельный JlinkOB , больше ничего не надо
А какая разница между JlinkOB и этим? Какой смысл делать JlinkOB, если можно купить готовый отладчик за 147 руб.?

Reflector писал(а):Я как бы исходил не из того, достаточно ли F030 для какой-то задачи, а из того, что этот мк мелковат именно для обучения.
Опять же, не понимаю, почему мелковат для обучения? Разве при аппаратной отладке много флеш жрется? Или в чем причина?
Я когда за AVRы брался, первое в своей жизни устройство с МК - часы - делал на Тини2313 и пробоем с памятью не испытывал - все влезло и даже осталось место. Но отлаживал, разумеется, в любимом протеусе). А если же я захочу попробовать еще какие-то возможности STM32 (например, USB), то это будет уже следующая поделка и под нее я куплю соответствующий МК.

По поводу IDE.
Вот на интересный опрос наткнулся: https://new.vk.com/topic-51265191_27911977
Незнаю, насколько объективно, но складывается впечатление, что CooCox CoIDE (GCC Compiler) довольно популярен. Ну и опять же, вот про него статьи: http://radiokot.ru/articles/56/ и https://habrahabr.ru/post/128734/ По последней ссылке в конце статьи кстати указано, что с версии 1.3.0 поддерживается ST-Link.
Так что пока больше склоняюсь к CooCox. Что скажите?
Мурик писал(а):https://habrahabr.ru/post/191624/
Да, почитав это, не совсем понял, а как это автор помигал светодиодиками аж на 6,8 Кб? :shock: Это все из-за HAL? А нормально инициализировать и обращаться к регистрам как в AVRках разве нельзя?
Реклама
Аватара пользователя
Мурик
Друг Кота
Сообщения: 3383
Зарегистрирован: Пн окт 11, 2010 19:00:08

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

Сообщение Мурик »

aam писал(а):А какая разница между JlinkOB и этим?
J-link это другой программатор-отладчик. Он более универсальный, т. к. работает не только с контроллерами фирмы ST, но он дороже.
Если в ближайшее время не планируете работать с МК других производителей, то лучше взять ST-Link.
aam писал(а):Так что пока больше склоняюсь к CooCox. Что скажите?
Если хотите тормозов на мощном компе, то пожалуйста...
Он у меня с открытым проектом в предыдущей сессии, пару минут "висит" после запуска загружая по полной одно ядро процессора. Да и во многом другом тормозит по сравнению с тем же EmBitz. Это одна из причин почему я отказался от кокоса.
А вообще, скачайте пару IDE и попробуйте. Какая будет удобнее и понятнее ту и используйте.
aam писал(а):Разве при аппаратной отладке много флеш жрется?
Обычно да. При отладке флеша используется больше (например потому что отключена оптимизация кода). Но для обучения должно хватить.
aam писал(а):Да, почитав это, не совсем понял, а как это автор помигал светодиодиками аж на 6,8 Кб? Это все из-за HAL?
Похоже он компилировал отладочную конфигурацию, т. е. с отладочной информацией и без оптимизации кода.
При компиляции релиза с оптимизацией, размер будет в несколько раз меньше.
И там не HAL, а SPL.
aam писал(а):А нормально инициализировать и обращаться к регистрам как в AVRках разве нельзя?
Можно, но в STM32 регистров и их битов на много больше чем в AVR...
Чтобы было понятней, у каждого периферийного модуля по несколько 32-ух битных регистров.
Реклама
Alex_Golubev
Встал на лапы
Сообщения: 87
Зарегистрирован: Вс ноя 15, 2015 05:54:13

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

Сообщение Alex_Golubev »

Что то не понятное происходит с таймером rtc контроллера stm32f429. Настройка rtc:
Спойлер

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

void MX_RTC_Init(void)
{

  RTC_AlarmTypeDef sAlarm;

    /**Initialize RTC and set the Time and Date 
    */
  hrtc.Instance = RTC;
  hrtc.Init.HourFormat = RTC_HOURFORMAT_24;
  hrtc.Init.AsynchPrediv = 124;
  hrtc.Init.SynchPrediv = 0xff;
  hrtc.Init.OutPut = RTC_OUTPUT_DISABLE;
  hrtc.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH;
  hrtc.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN;
  HAL_RTC_Init(&hrtc);

  sTime.Hours = 0x0;
  sTime.Minutes = 0x0;
  sTime.Seconds = 0x0;
  sTime.DayLightSaving = RTC_DAYLIGHTSAVING_SUB1H;
  sTime.StoreOperation = RTC_STOREOPERATION_RESET;
  HAL_RTC_SetTime(&hrtc, &sTime, FORMAT_BCD);

  sDate.WeekDay = RTC_WEEKDAY_MONDAY;
  sDate.Month = RTC_MONTH_JANUARY;
  sDate.Date = 0x1;
  sDate.Year = 0x0;

  HAL_RTC_SetDate(&hrtc, &sDate, FORMAT_BCD);

    /**Enable the Alarm A 
    */
  sAlarm.AlarmTime.Hours = 0x0;
  sAlarm.AlarmTime.Minutes = 0x0;
  sAlarm.AlarmTime.Seconds = 0x0;
  sAlarm.AlarmTime.SubSeconds = 0x0;
  sAlarm.AlarmTime.DayLightSaving = RTC_DAYLIGHTSAVING_SUB1H;
  sAlarm.AlarmTime.StoreOperation = RTC_STOREOPERATION_RESET;
  sAlarm.AlarmMask = RTC_ALARMMASK_NONE;
  sAlarm.AlarmSubSecondMask = RTC_ALARMSUBSECONDMASK_ALL;
  sAlarm.AlarmDateWeekDaySel = RTC_ALARMDATEWEEKDAYSEL_DATE;
  sAlarm.AlarmDateWeekDay = 0x1;
  sAlarm.Alarm = RTC_ALARM_A;
  HAL_RTC_SetAlarm(&hrtc, &sAlarm, FORMAT_BCD);

}
Настройка RCC:
Спойлер

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

void SystemClock_Config(void)
{

  RCC_OscInitTypeDef RCC_OscInitStruct;
  RCC_ClkInitTypeDef RCC_ClkInitStruct;
  RCC_PeriphCLKInitTypeDef PeriphClkInitStruct;

  __PWR_CLK_ENABLE();

  __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);

  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSI|RCC_OSCILLATORTYPE_HSE;
  RCC_OscInitStruct.HSEState = RCC_HSE_ON;
  RCC_OscInitStruct.LSIState = RCC_LSI_ON;
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
  RCC_OscInitStruct.PLL.PLLM = 8;
  RCC_OscInitStruct.PLL.PLLN = 336;
  RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
  RCC_OscInitStruct.PLL.PLLQ = 7;
  HAL_RCC_OscConfig(&RCC_OscInitStruct);

  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1
                              |RCC_CLOCKTYPE_PCLK2;
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;
  HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5);

  PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_RTC;
  PeriphClkInitStruct.RTCClockSelection = RCC_RTCCLKSOURCE_LSI;
  HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct);

  HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);

  HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);

  /* SysTick_IRQn interrupt configuration */
  HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
}
В main пишу:
Спойлер

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

int main(void)
{

  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration----------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* Configure the system clock */
  SystemClock_Config();

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_RTC_Init();
  MX_USB_DEVICE_Init();

  /* USER CODE BEGIN 2 */
  HAL_PWR_EnableBkUpAccess();//enable PWR backup domain access (RTC,BKReg)
__HAL_RCC_RTC_ENABLE();//Enable RTC. not created by cube because the RTC can run.
  /* USER CODE END 2 */
HAL_RTC_GetTime(&hrtc, &sTime, RTC_FORMAT_BCD);
  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
  /* USER CODE END WHILE */

  /* USER CODE BEGIN 3 */
    
HAL_RTC_GetTime(&hrtc, &sTime, RTC_FORMAT_BCD);
HAL_RTC_GetDate(&hrtc, &sDate, RTC_FORMAT_BCD);
person.house= sTime.Hours;
person.minut= sTime.Minutes;
person.second= sTime.Seconds;
HAL_Delay(1000);
sprintf(text,"%d        %d      %d\r\n",person.house,person.minut,person.second);
CDC_Transmit_HS((uint8_t*)&text,strlen (text));
 
  }
  /* USER CODE END 3 */

}
Перемеренные :
Спойлер

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

#pragma pack(push,1)
struct bal {
uint8_t second;
uint8_t minut;
uint8_t house;
} person;
#pragma pack(pop)
char text[20];

Выдает не правильные значения секунды считает до 90 менял разные параметры не помогло.
Вложения
1.png
(127.79 КБ) 231 скачивание
ncp1400
Мучитель микросхем
Сообщения: 410
Зарегистрирован: Чт янв 08, 2015 00:58:11

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

Сообщение ncp1400 »

цветомузыку замутить (Микрофон, БПФ, ПДУ, ШИМ-ЦАПы...) :solder: Люди и на Мега8 умудрялись сделать, хоть и в притык
на Меге8 8-битный 256-точечный ФФТ считается практически в реальном времени на 8кГц, F030 наверно осилит и 44кГц (хотя для цветомузыки реалтайм и частота семплирования >8кГц необязательны)

код (ФФТ, окна, амплитуда): http://pastebin.com/VJdjgXHK
Аватара пользователя
isx
Поставщик валерьянки для Кота
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

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

Сообщение isx »

Приветствую форумчан!
Сижу и ломаю голову над одним вопросом:
какой код выполняется быстрее

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

if  (*(__IO uint32_t*)(0x40006100) = 100)
{};
или
if (buff = 100)
{};
при условии, что переменной buff ранее присвоено значение адреса 0x40006100 ? :dont_know:
Аватара пользователя
aam
Собутыльник Кота
Сообщения: 2994
Зарегистрирован: Сб фев 20, 2010 14:00:12
Откуда: Москва

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

Сообщение aam »

ncp1400 писал(а):на Меге8 8-битный 256-точечный ФФТ считается практически в реальном времени на 8кГц
А если МК еще ПДУ слушает, эффекты формирует?
isx писал(а):какой код выполняется быстрее
По идее, одинаково. Просто в 1-м случае идет обращение через указатель, а во 2-м - через имя переменной. Хороший компилятор сгенерит одинаковый код. Но однозначный ответ на этот вопрос даст просмотр листинга компилятора.

Да, если не считать одной серьезной ошибки - "равняется" в Си пишется так: "==". А то что у вас - это оператор присваивания и поэтому IF будет всегда истинен, а buff - загажен значением 100))
ncp1400
Мучитель микросхем
Сообщения: 410
Зарегистрирован: Чт янв 08, 2015 00:58:11

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

Сообщение ncp1400 »

А если МК еще ПДУ слушает, эффекты формирует?
осилит. ПДУ можно обрабатывать в прерывании АЦП, эффекты формировать - после очередного накопления буфера и вычисления ФФТ
Аватара пользователя
menzoda
Вымогатель припоя
Сообщения: 535
Зарегистрирован: Вт авг 28, 2012 22:21:33

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

Сообщение menzoda »

isx писал(а):Приветствую форумчан!
Сижу и ломаю голову над одним вопросом:
какой код выполняется быстрее

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

if  (*(__IO uint32_t*)(0x40006100) = 100)
{};
или
if (buff = 100)
{};
при условии, что переменной buff ранее присвоено значение адреса 0x40006100 ? :dont_know:
Может имелось в виду *buff и ==? Если да, то второй вариант выполняется потенциально быстрее, правда с небольшой вероятностью. Для чтения из памяти требуется (мы же про ARM говорим?) две инструкции: одна загружает значение адреса в регистр (mov или ldr), а вторая собственно читает из памяти (ldr). Во втором варианте, если указатель buff уже где-то использовался, то скорее всего его значение уже находится в каком-нибудь регистре, все что нужно - один ldr. В первом варианте скорее всего придется сначала загрузить адрес в регистр. Правда, если этот же адрес не задолго до этого уже использовался, его значение могло где-нибудь остаться (тут уж как оптимизирует компилятор), и тогда это тоже потребует всего одного ldr. Кроме того, во втором варианте, если до этого компилятору не хватало регистров, он мог выкинуть из них этот адрес, тогда его опять же придется загружать по новой.

В итоге - хрен его знает, что быстрее. Нельзя сказать точно. В любом случае это не стоит того, чтобы о нем думать.
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

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

Сообщение a5021 »

Посмотрел IAR-ом с оптимизацией и без, в обоих случаях и там и там для проверки условия выполняются по четыре ассемблерных команды. Инициализация buff отдельно требует выполнения двх команд.
Аватара пользователя
isx
Поставщик валерьянки для Кота
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

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

Сообщение isx »

aam писал(а):Да, если не считать одной серьезной ошибки - "равняется" в Си пишется так: "=="
Ага, опечаточка :oops:
menzoda писал(а):Может имелось в виду *buff
Не... Я же в него присвоил значение адреса, а не адрес.

Вопрос состоял больше в том, откуда быстрее прочитаются данные, из RAM или флеш памяти? Если я правильно понимаю, то значение переменной хранится в оперативке, тогда как значение адресов периферии во флеш памяти. Если так, то RAM потенциально быстрее флеша, будет ли это в итоге сказываться на скорости выполнения условия? :dont_know:
Аватара пользователя
menzoda
Вымогатель припоя
Сообщения: 535
Зарегистрирован: Вт авг 28, 2012 22:21:33

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

Сообщение menzoda »

isx писал(а):Не... Я же в него присвоил значение адреса, а не адрес.
Что-то я не понял. Если тип переменной buff это uint32_t*, то нужно писать *buff, чтобы добиться того же результата, что и в первом условии. Если тип переменной buff это uint32_t, то тогда вообще какая-то хрень получается, зачем в него записывать адрес, раз это не указатель? В общем какой-то плохой пример.

Тем не менее, если вопрос стоит как
isx писал(а):откуда быстрее прочитаются данные, из RAM или flash-памяти
то все что я написал в предыдущем сообщении остается в силе. В общем случае по количеству инструкций одинаково - mov или ldr плюс ldr. При чтении из flash-памяти вторая инструкция ldr может работать дольше так как flash-память обычно имеет несколько wait-states в отличие от внутренней SRAM.
isx писал(а):Если я правильно понимаю, то значение переменной хранится в оперативке, тогда как значение адресов периферии во флеш памяти.
Не понимаю к чему это. Теплое с мягким сравнивается.

1. Значение переменной действительно храниться в SRAM.
2. Значение адреса нужно не только для доступа к периферии. Для работы с переменной в SRAM процессору тоже нужно знать ее адрес.
3. Адрес (для периферийного регистра или для переменной в SRAM) может храниться во flash, в случае если не может быть представлен в виде mov инструкции.
ncp1400
Мучитель микросхем
Сообщения: 410
Зарегистрирован: Чт янв 08, 2015 00:58:11

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

Сообщение ncp1400 »

у ARM адрес записи/чтения по-любому должен храниться в регистре, как правило адреса хранятся во Flash после тела функции и грузятся по смещению относительно PC
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

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

Сообщение a5021 »

Именно такой код мне и сварил иар. Коаманды одни и те же, но значение константы он грузит в регистр со смещением относительно PC, а значение переменной относительно SP. Но тут получается, что автор вопроса похоже прав. Значение из ОЗУ окажется в регистре на следующий такт, а вот с доступом к некой области флеша скорее всего придется ждать такт-другой. От частоты камня еще конечно зависит.
ncp1400
Мучитель микросхем
Сообщения: 410
Зарегистрирован: Чт янв 08, 2015 00:58:11

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

Сообщение ncp1400 »

по адресу 0x40006100 находится периферия, количество тактов зависит от тактирования соответствующей шины
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

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

Сообщение a5021 »

Да пофиг, что там находится. Чтобы туда постучаться, надо адрес этого чего-то загнать в регистр. А адрес это значение либо некой ячейки (группы) ОЗУ, либо флеша. Из ОЗУ в ряде случаев адрес дернуть получится быстрее.
Аватара пользователя
isx
Поставщик валерьянки для Кота
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

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

Сообщение isx »

menzoda писал(а):Что-то я не понял. Если тип переменной buff это uint32_t*, то нужно писать *buff, чтобы добиться того же результата, что и в первом условии
Чтоб было понятнее :) :

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

buff = (*(__IO uint32_t*)(0x40006100));
Ответить

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