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

Кто любит RISC в жизни, заходим, не стесняемся.
Аватара пользователя
СКАЗОЧНИК
Идёт направо - песнь заводит, Налево - сказку говорит.
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

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

Сообщение СКАЗОЧНИК »

[uquote="Reflector",url="/forum/viewtopic.php?p=3564084#p3564084"][uquote="Myp3ik",url="/forum/viewtopic.php?p=3564078#p3564078"]Если не включить тактирование блока, то как он будет принимать данные с шины и выставлять свои регистры ?[/uquote]Кажется он думает, что включение тактирования портов - это как подача на них питания, т.е. можно включить тактирование и на пинах появится мусор из не инициализированных регистров :) Реальная картина ближе к триггеру у которого отключают вход CLK по которому он защелкивает данные, т.е. если он уже что-то запомнил, то при отключении CLK текущий уровень на выходе никуда не денется.[/uquote]

Вот здесь бы подошел очень озадаченный смайлик, которого вроде нету в предложенных. :? и вроде понятно, в плане того, что изначально все выводы настроены на вход в высокоимпедансном состоянии, т.е. типа никуда не подключены. одно из самых безопасных состояний МК. И даже если на них подать тактовые импульсы, он все равно останется в этом состоянии и ничего страшного не происходит.

З.Ы. Простите, что сделал полное цитирование, иначе не понятно контекста сразу от двух авторов.

Добавлено after 1 hour 32 minutes 13 seconds:
Вот тута что-то есть по описанию CMSYS, правда перевод идиотский и примеры для LPC, но все равно

http://irtos.sourceforge.net/2000/Docum ... 00003.html
Станислав
Реклама
a797945
Мучитель микросхем
Сообщения: 446
Зарегистрирован: Вс ноя 01, 2015 09:15:16
Откуда: 69.Ржев

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

Сообщение a797945 »

Попробуйте посмотреть на это с другой стороны:
если б ПОРТ представлял из себя пару регистров - тактировать его или нет существенной разницы не составляет.
а если это целая система (толпа регистров, включая теневые, триггера, коммутаторы и прочия...и прочия, там же привязки к другой периферии (к таймерам, к интерфейсам, ...)) - вот это раскачивать или нет уже ощутимо для потребления.
и если эту подсистему не тактируете - то и внутренние ее коммутаторы в нужное состояние не встанут - хоть ядро и будет кидать "конфигурацию" в регистр связи этой периферии (по сути информационный буфер).
Реклама
Аватара пользователя
СКАЗОЧНИК
Идёт направо - песнь заводит, Налево - сказку говорит.
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

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

Сообщение СКАЗОЧНИК »

Очередной небольшой вопрос. Пусть, возможно и снова глупый.

В портах для выставления и сброса битов есть регистр GPIO_ODR. Там все просто. Записал значение - оно выставилось на выводах. Считал/изменил/записал значение - оно поменялось на выводах.
Есть регистры GPIO_BSRR и GPIO_BRR, которые умеют выставлять каждый бит (пин, вывод) по отдельности без операции чтение-модификация-запись.

И вот, я записал единички в порт, а потом решил сбросить некоторые.
Как понять приоритет и есть ли он? т.е. у меня записана единица в порту, я ее сбрасываю, то она сбросится. Если у меня записан ноль, то при установке у меня ноль поменяется на единицу и бит в регистре GPIO_BSRR установится, а в GPIO_BRR сотрется.
А если я одновременно запишу бит установки и сброса в регистр GPIO_BSRR? Кто победит?
Короче, не знаю, как объяснить, но почему это работает?

З.Ы. Может это написано в RM0008, может я не обратил внимания, либо не понял. Если что, ткните носом.
Станислав
Аватара пользователя
uldemir
Друг Кота
Сообщения: 7359
Зарегистрирован: Пт авг 28, 2009 21:34:30
Откуда: 845-й км.

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

Сообщение uldemir »

Биты в BRR и BSRR только устанавливаются, но никогда не читаются. Можете рассматривать как входы R и S выходного триггера, в момент записи на которых появляется (и сразу снимается) активный уровень.
СКАЗОЧНИК писал(а):А если я одновременно запишу бит установки и сброса в регистр GPIO_BSRR? Кто победит?
Этот момент в референс мануале специально оговорён:
Note:If both BSx and BRx are set, BSx has priority.
А люди посмотрят и скажут: "Собаки летят. Вот и осень."
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
СКАЗОЧНИК
Идёт направо - песнь заводит, Налево - сказку говорит.
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

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

Сообщение СКАЗОЧНИК »

Все. Спасибо. Увидел. Нашел. Раздел 9.2.5
Запись нуля не имеет влияния (значения)
Запись единицы ставит или сбрасывает бит
Приоритет установленного бита над сброшенным.
Все биты можно только записывать, читать безсполезно.

Очень Спасибо!
Станислав
Реклама
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

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

Сообщение WiseLord »

BSRR - это действительно шикарная придумка. В том смысле, что можно и писать и читать одновременно.
Типичная задача - записать в последние 4 (например) бита значение 0b1101. Делается одним движением, атомарно:

GPIOx->BSRR = 0x000F000D

Т.е., с одной стороны - 0x000F0000 должно установить все биты в ноль, но 0x0000000D его перебивает. Поэтому бит 1 таки в ноль сбросится (из-за 0x000F0000), а биты 0, 2, 3 - установятся в единицу (из-за 0x0000000D).

Пока я этот момент не "просёк", думал поначалу, зачем там, в одном регистре, и сброс и установка одновременно. Мол, почему BRR только сбрасывает, а BSRR - не просто устанавливает, но ещё и сбрасывает, зачем такие сложности. А вот, оказалось, и причина, которую легко не заметить в этом примечании к даташиту.
Реклама
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

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

Сообщение dosikus »

WiseLord, все таки пишите для людей не знакомых с сей "магией", по сему не лишним будет:
Гарантированно записать, независимо от содержимого порта,в последние 4 (например) бита значение 0b1101.
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

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

Сообщение a5021 »

Для тех, кто сталкивался или еще столкнется, делюсь информацией по поводу "GNU Tools ARM Embedded 8 2018 q4 major": в виндовой версии сломан arm-none-eabi-objdump и попытка создать с его помощью .hex файл прошивки почти всегда обречена на провал. Грубый хак, позволяющий по быстрому исправить ситуацию выглядит так: идем сюда, скачиваем комплект бинарей под разрядность своей винды, вытаскиваем оттуда arm-none-eabi-objdump и заменяем им тот, что шел с GNU Tools ARM Embedded 8 2018 q4 major. Профит.
Аватара пользователя
СКАЗОЧНИК
Идёт направо - песнь заводит, Налево - сказку говорит.
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

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

Сообщение СКАЗОЧНИК »

Правильно ли я понимаю этот оператор цикла?

while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT));

Пока HSEStatus равен нулю И StartUpCounter не равен HSE_STARTUP_TIMEOUT мы продолжаем делать этот цикл.

Т.е. ждем, пока не установится флаг в регистре. И если он даже установился уже, то все равно ждем, пока СтартАпКаунтер не щелкнет 1280 раз (0х0500)?

И только после этого должны выйти из цикла. Почему то же в отладчике выходит сразу из него дальше. Может я чего-то не то вижу? :dont_know:
Станислав
Reflector
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

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

Сообщение Reflector »

[uquote="СКАЗОЧНИК",url="/forum/viewtopic.php?p=3564978#p3564978"]while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT));

Пока HSEStatus равен нулю И StartUpCounter не равен HSE_STARTUP_TIMEOUT мы продолжаем делать этот цикл.[/uquote]
And - это считай умножение, т.е. можно представить все в таком виде:

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

while(1 * 1 == 1);
Замени любую единицу нулем и условие станет ложным.
Аватара пользователя
СКАЗОЧНИК
Идёт направо - песнь заводит, Налево - сказку говорит.
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

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

Сообщение СКАЗОЧНИК »

Так то да... Это же логическое И.
А нахрена тогда таймаут придумывали?


Ааааааа. все. дошло.
Если ХСЕ не встал, то он ждет в течение этого времени, а если встал, то сразу выходит! Блин. Как все логично и просто придумали. )

Другой вопрос.
Если я хочу попробовать написать свой код для настройки тактирования МК, мне надо выпилить три эти строки?

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

; Reset handler
Reset_Handler    PROC
                 EXPORT  Reset_Handler             [WEAK]
     IMPORT  __main
                                                                                        // IMPORT  SystemInit
                                                                                       //             LDR     R0, =SystemInit
                                                                                       //             BLX     R0
                 LDR     R0, =__main
                 BX      R0
                 ENDP

Добавлено after 24 minutes 11 seconds:
Все, я уже провел эксперимент. Эти три строки.

Добавлено after 43 minutes 35 seconds:
Ткните носом, какой раздел в Рефренс Мануале про системный таймер 24 битный написано.? А то я чего-то там удалил в рефренс мануале, что найти не могу... Даже поиском.

Добавлено after 41 minute 9 seconds:
Бляха муха... Нашел в РМ0056 :kill:
Станислав
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

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

Сообщение WiseLord »

Системный таймер - это фича всех Cortex-M3, поэтому надо смотреть не мануал от STM, а мануал от ARM.

Зовётся DUI0552A - Cortex M3 - Generic User Guide.pdf

P.S. Хотя да, в PM0056 он тоже описан.
Аватара пользователя
Myp3ik
Мучитель микросхем
Сообщения: 450
Зарегистрирован: Вс янв 09, 2011 23:05:37
Откуда: СССР

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

Сообщение Myp3ik »

Или сделать свою функцию SystemInit
Иван Сусанин - первый полупроводник :solder:
Аватара пользователя
СКАЗОЧНИК
Идёт направо - песнь заводит, Налево - сказку говорит.
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

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

Сообщение СКАЗОЧНИК »

Так вот... В этом РМ0056 написано:

Bit 2 CLKSOURCE: Clock source selection
Selects the clock source.
0: AHB/8
1: Processor clock (AHB)

А в схеме (Figure 8. Clock tree, p. 93/1134 in RM0008) нарисован квадратик после шины АНВ, в котором деление на 8. Как я понял из всей этой схемы, то квадратики это обязательное деление, т.е. не подвластное управлению пользователем.

Так все таки СисТик может работать напрямую от АНВ или не может?

Просто интересно стало.
Станислав
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

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

Сообщение WiseLord »

Подвластное:

Изображение
STARпёр
Открыл глаза
Сообщения: 55
Зарегистрирован: Чт окт 18, 2018 23:58:43

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

Сообщение STARпёр »

Всем привет!
Подскажите по такому вопросу.
В даташите на ethernet модуль, написано что минимальный период CLK SPI = 100ns. Это значит максимальная частота SPI = 10Мгц.
В настройках SPI у МК stm32f103 задаётся скорость в Мбит как кратная частоте МК.
Но ведь один период CLK составляет 2 тика: 1 и 0. А значит частота аппаратного SPI в МК должна быть выше.
Вопрос такой: всё же, как их сопоставить?
Аватара пользователя
AndTer
Поставщик валерьянки для Кота
Сообщения: 2406
Зарегистрирован: Ср фев 23, 2011 12:12:31

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

Сообщение AndTer »

1 бит передаётся при полном периоде клока. А значит 10Мбит будут соответствовать периоду клока в 100нс или 10Мгц.
То есть 1 к 1.
Глупый не задает вопросы. Глупый и так все знает.
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

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

Сообщение a5021 »

[uquote="STARпёр",url="/forum/viewtopic.php?p=3565896#p3565896"]Но ведь один период CLK составляет 2 тика: 1 и 0. А значит частота аппаратного SPI в МК должна быть выше.[/uquote]
Не плодите сущности. Частота и период взаимно обратные величины: F = 1/T и T = 1/F, где Т -- период, а F -- частота.
Аватара пользователя
СКАЗОЧНИК
Идёт направо - песнь заводит, Налево - сказку говорит.
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

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

Сообщение СКАЗОЧНИК »

Вопрос очередной... Больше по языку Си наверное.

Вот если есть обработчик прерывания, то выход из него как правильно делать? Надо слово return? Или он будет косячить со стеком?
Что если мне по условию надо выйти раньше из прерывания?
Станислав
Reflector
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

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

Сообщение Reflector »

[uquote="СКАЗОЧНИК",url="/forum/viewtopic.php?p=3566193#p3566193"]Что если мне по условию надо выйти раньше из прерывания?[/uquote]
Обработчик прерывания на кортексах - это обычная функция, единственное что если код на С++, то может потребоваться extern "C", но и этого можно избежать если стартап тоже будет на плюсах.
Ответить

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