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 ☆☆☆☆☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.