LINUX.ORG.RU

stm32 мигаем светодиодом

 


0

1

здрасьте здрасьте люди добрые. пришел контроллер и программатор STM32F103C8T, ST-LINK/V2. операционная система Ubuntu. если может кто-то то напишите пожалуйста пример програмки на assembler чтобы мигнуть светодиодом.

ее я скомпилирую и зашью. компилировать думаю

arm-none-eabi-as -o myfile.o myfile.s 

arm-none-eabi-objcopy mf.elf mf.bin -O binary
st-flash write my.bin 0x8000000
чего не могу? мигнуть светодиодом. или программка корявая или котроллер не работает. если можете дайте пример 100% рабочей программки на ассемблер чтобы проверить.

☆

Последнее исправление: Assembler (всего исправлений: 3)
Ответ на: комментарий от Assembler

Как ты собирался на асме под МК писать, если такой элементарщины не знаешь?

Буква — это, условно говоря, название порта. Каждый порт хоть и 32-битный, но физических ног в нем 16 (зато благодаря этому в некоторых сериях есть регистр BSRR, позволяющий за один присест менять значения нескольких бит в порту, не тревожа другие). Естественно, количество физически разведенных ног и портов зависит от количества ног в корпусе МК.

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

Как ты собирался на асме под МК писать, если такой элементарщины не знаешь?

я дальше чем мигнуть светодиодом и не смогу. так только тут покручусь, помигаю.

Буква — это, условно говоря, название порта.

cпасибо

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

собенно доставляет неудобство, если тебе нужно два целых порта, а они не целиком по порядку, а со всех сторон МК вперемешку!

А еще бонусом где-то в середине влезает UART или другая нужная периферия.

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

Это - вообще эталонное западлостроение! Скажем, нужна тебе параллельная 32-битная шина данных. Единственный вменяемый вариант — пинать таймером два канала DMA и забрасывать в два порта данные. Т.е. нужно два целых порта. Но еще нужны и USB/USART/SPI/I2C и т.п. И вот начинаешь такой подбирать МК, а оказывается, что 100-ногих, которые бы тебе подходили, просто нет! Минимум — 144 ноги!..

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

Да даже если нужна 16-битная шина. Тут JTAG/SWD висит, вон UART, здесь кварц а там рыбу заворачивали. Глядь - а вместо двух 16-бтных портов одни дырки.

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

О, тут на быдлохабре одно чудо решило, что калокуб - это круто. И начало нести бред об ограниченности USB STM32. А потом попробовал мой USB_CDC. Надеюсь, он понял, что калокубом пользоваться нельзя.

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

Оо, как же я от их HAL плевался. Такого говна намутить еще надо постараться. 33 1024байтные страницы кода генерит лишь бы с АЦП один инт забрать. На каждом шагу костыли, затычки и зависания от самого HALа. Пишешь сам доступ к регистрам, инициализируешь АЦП - всё ок. Используешь их кусок кала - зависания в рандомном месте, иногда не может инициализировать сам АЦП, иногда виснет на калибровке. Буээээээ.

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

О, тут на быдлохабре одно чудо решило, что калокуб - это круто

Вот это оперативность! Только сегодня статья вышла, как ее уже обосрали. И правильно: нечего косяки говнокодеров на железо перевешивать.

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

Оо, как же я от их HAL плевался. Такого говна намутить еще надо постараться. 33 1024байтные страницы кода генерит лишь бы с АЦП один инт забрать.

Да тот же USB. Реализация от Куба: 14 кБ. Реализация более-менее по-человечески: 4 кБ. Не понимаю как люди заставляют себя этим пользоваться.

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

Заминусовали скорее за форму выражения мыслей. Уж больно она у вас резкая. Не все способны адекватно воспринимать конструктивную критику, особенно когда она недостаточно однозначно сформулирована.

Вот приходит на Хабр ардуинщик, показывает свой замечательный хелло-ворлд, а ему тут же «убери калокуб». Ему ведь неоткуда узнать было чем именно HAL/Куб плох. Другое дело если показать, что тот геморрой, что делает Куб, можно решить гораздо проще и надежнее.

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

А свой блог никто не увидит

Если у тебя там полезные материалы — увидят. Можно первое время (или постоянно) перепечатывать на хабр с указанием ссылки.

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

Мониторить десяток независимых блогов все же перебор

RSS. Подписка на новости.

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

как переводить bit-band в нормальные адреса. Картинку вы уже показывали, остается только оформить в виде алгоритма.

Что-то у вас как-то сильно мудрёно описать получилось. Напишу, с вашего позволения, по-своему.

По одному мегабайту из пространств, начинающихся с 0x2000'0000 и 0x4000'0000, отображается побитово на 0x2200'0000 и 0x4200'0000 соответственно. При этом каждый бит нормального диапазона представлен в битбанд-диапазоне 4-байтным словом. А на каждый байт из нормального диапазона приходится по 8*4 = 32 битбанд-байта.

Таким образом, чтобы получить битбанд-адрес из нормального адреса, надо добавить к его старшему байту двойку, умножить мегабайтное смещение на 32 и прибавить номер бита, умноженный на 4.

Обратно: номер бита — (бб_адрес/4) & 0x1f, мегабайтное смещение — (бб_адрес/32) & 0xfffff, старший байт — старший_байт_бб_адреса & 0xf0.

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

Что-то у вас как-то сильно мудрёно описать получилось.

Зато с примером расчета :)

Обратно: номер бита — (бб_адрес/4) & 0x1f

А вот использовать маску мне что-то сразу в голову не пришло. Наверное, потому что в Calc тестсровал, а там с этим неудобно. Если буду оформлять в виде макросов, воспользуюсь вашим вариантом. Но вряд ли такая экономия на спичках имеет смысл.

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

Лучше не рисовать магические числа, а из хедеров брать магические макросы соответствующие!

Фиксед. Ты пасхальное яичко прочитал?

:)

ББ-адреса, кстати, легко считать в уме.

не у всех есть битбандинг

Начнём с того, что не у всех есть STM32 и даже ARМ. А теперь можешь идти удалять свой Гитхаб-репозиторий.

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

Ему ведь неоткуда узнать было чем именно HAL/Куб плох

Лично мне эта дрянь съела мозг уже на моменте подключения системных часов, при том что я впервые взял в руки мк.

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

Лично мне эта дрянь съела мозг уже на моменте подключения системных часов, при том что я впервые взял в руки мк.

Мне на моменте подключения к готовому коду. 100500 библиотек, рассованных по десятку мест, и каждое подключи, и костыли пропиши. Но тут ладно, понятно что Куб рассчитан на использование IDE, а не на простые makefile’ы. Хотя все равно сомнительно чтобы даже в IDE оно было сильно проще…

Но для новичков же статьи на каждом углу «открываем Куб, выставляем галочки, лепим куличики». Выходит, на верхнем уровне у него тоже все плохо.

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

Популяризаторство (и ссылочки на ЖЖшку и гитхаб)

Угу. Еще осталось на Ютубе крутиться, у АлексГайвера и других ардуинщиков хлеб отбирать.

Хотя есть у меня и такое: https://habr.com/ru/post/496046/ (трехмерка на f103, потом портировал на vf103)

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

в Calc тестсровал

И не стыдно? Эмбедщик считает биты в Calc. Facepalm.ods. Хоть питон бы какой взял:

$ python
>>> a = 0x42420310
>>> (a & 0xf0<<24) + (a>>5 & 0xfffff)
1073877016
>>> hex(_)
'0x40021018'
>>> a>>2 & 0x1f
4
>>> ^D
anonymous
()
Ответ на: комментарий от anonymous

Хоть питон бы какой взял:

Не, Питон я не люблю, у него синтаксис мерзкий, со всеми этими значащими отступами.

А для разовой проверки я не постыжусь даже Протеусом воспользоваться.

…блин, вот пишу и чувствую как краснеют уши. Честно :D

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

скажите пожалуйста, почему я в Mamory map не вижу 420000000? можно подробнее как мы получили 420000000? что на что отобразили? это очень интересно

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

можно подробнее как мы получили 420000000?

Вам же привели целых два способа их получения - «постыдный» с calc и «трушный» и битовыми масками. А еще раньше приводили скриншот откуда эти способы берутся: stm32 мигаем светодиодом (комментарий)

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

у него синтаксис мерзкий, со всеми этими значащими отступами

Вот Эдик тоже так считает. Но вы-то же адекватный. Да и для просто посчитать как на калькуляторе отступы не нужны.

Не хотите питон — возьмите Жулю, Луа, да хоть JS:

$ qjscalc
qjs > a = 0x42420310
1111622416
qjs > (a & 0xf0<<24) + (a>>5 & 0xfffff)
1073877016
qjs > _.toString(16)
"40021018"
anonymous
()
Ответ на: комментарий от COKPOWEHEU

Выходит, на верхнем уровне у него тоже все плохо.

Та хз, может для совсем новичков и норм, я просто такие статьи сразу пропускал т.к. «очевидно же что не может быть для сборки нужна гуевая тулза».

ya-betmen ★★★★★
()
Ответ на: комментарий от anonymous

Вот Эдик тоже так считает. Но вы-то же адекватный.

Так это я маскируюсь!

Не хотите питон — возьмите Жулю, Луа, да хоть JS:

Брать надо то, на чем можешь быстро и надежно решить задачу. В этот раз было проще открыть Офис. В другой - проще будет накидать утилиту на Си. Собственно, когда я тестировал аудиоустройство и обнаружил что не могу читать его из /dev/dsp, именно так и сделал - накидал код на Си+SFML

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

как мы получили 420000000?

Это не мы получили, это так устроен процессор. Адреса из одного конкретного диапазона отображаются в адреса другого конкретного.

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

«очевидно же что не может быть для сборки нужна гуевая тулза».

А вот для Ардуинщиков и Кубоидов, у которых «палец к мышке прирос», очевидно, что в консоли работают только страшные мифические хакеры, а нормальные разработчики мышкой галочки расставляют.

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

Ну в QtCreator'е я прекрасно мышкой тыкаю, но куб же страшный как третья мировая.

ya-betmen ★★★★★
()
Ответ на: комментарий от COKPOWEHEU

не могу читать его из /dev/dsp

А само устройство /dev/dsp присутствует в системе? Может быть чем-то занято просто? Пульсой, например.

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

А само устройство /dev/dsp присутствует в системе?

Нет. Я так подумал, что это очередные «улучшайзинги» аля systemd. Мало ли что там решили «оптимизировать». Лично мне не сильно его отсутствие мешает… тем более когда уже есть костыль.

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

Да, так и есть.

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

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

Ну, снимать приличные ролики - это слишком тяжкий труд, требующий огромного количества времени. Поэтому на youtube я лишь выкладываю короткие видеоролики с демонстрацией чего-либо (тех же игрулек). Одна только статья в ЖЖ зачастую пару часов времени требует. А о БТА я до сих пор не осилил статью написать (там работы часов на 20 как минимум, возможно, сделаю по частям).

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

Есть расово чистый Octave, можно R использовать. Я вообще некоторые вычисления прямо в баше делаю (у меня и макросы соответствующие есть). Но пытхон - это фу!

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

У старых звуковых карт внутри чипов не было гальваноразвязки, поэтому на их основе, закоротив внешний кондер, можно было получить цифровой осциллограф на компе. И софт соответствующий свободный вроде как есть. Я и сам лет 11 назад с этим делом возился, из десятка старых звуковушек нашел одну, где был нормальный чип, принимал внешний сигнал и выдавал что нужно. Правда, это - баловство, потому что даже на дешевых STM32F030 АЦП куда шустрей работает, чем несчастные 44.1кГц.

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

Ну вот в том-то и дело, что даже у AVR частота дискретизации 77 ksps, у той же f103 / l151 по одному каналу 1 Msps, у всяких f303 до 10 Msps на двух каналах выжимали.

С другой стороны, к своей звуковушке я осциллограф подключать не рискну. Но вот нагородить на f100 нечто с опторазвязкой USB планы есть. Скорость, конечно, тоже нулевая будет, ну да игрушка она игрушка и есть. Десяток ksps вытянет и ладно.

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

я к тому что мы говорили смотри memory map. я смотрю и не вижу там 420000000. а ведь это базовый адрес. вот я и спрашиваю откуда мы его взяли.

Assembler ☆
() автор топика
Ответ на: комментарий от COKPOWEHEU

где вы там на скриншоте увидили происхождение 42000000? извините, что надоедаю своими вопросами в своей теме и мешаю вам говорить на пространные темы.

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

не вижу там 420000000

Это - не базовый адрес! Это - bit_band_base, который получен сложением базового адреса 0x4000`0000 с MAGICK 0x0200`0000, чтобы область вышла за пределы рабочего диапазона и находилась в bit-band регионе.

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