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)

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

хочу мигнуть светодиодом. не получается. вернее он мигает, но не всегда и интервалы не предсказуемые. а иногда и нет. хочу проверить, работает ли котроллер вобще. но скорее всего это я что-то сделал не так.

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

это все конечно хорошо, и я почитаю позже. мне главное проверить работает ли котроллер. так бы я не стал и тему создавать. А чтобы проверить нужет 100% рабочий код. а 100% рабочий код на ассемблер для STM32F103C8T могут с легкой руки только 100% профессионалы.

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

Раз для проверки, возьми калокуб, там в примерах есть твой светодиод. Или готовый пример на CMSIS нагугли.

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

Так зачем там ассемблер?

Все остальное по мнению этого отсталого - компилятор за него пишет, а не он сам. Взял бы хотя бы FPGA.

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

почему же? изучаю stm32. хочу быть полезен форуму.

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

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

Это в отладочных платах. Может топикстартер свою спаял (что несложно).

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

первый раз когда шил, пока не strip_нул утилитой файл имел большой размер и даже не прошивался конроллер.

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

Залей какой нить пример да проверь

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

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

первый раз когда шил, пока не strip_нул утилитой файл имел большой размер и даже не прошивался конроллер.

Ыыы. Не уместить в 64кб моргалку - это еще суметь надо.

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

зачем зашивать в контроллер разный код не пойми от кого и не известно рабочий ли.

Возьми дизассемблер и проверь перед заливкой. Что ты как маленький?

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

я попросли премер на ассемблере

Если ты на ассемблере пишешь так же как на русском то твой путь будет долгим и болезненным.

зачем зашивать в контроллер разный код не пойми от кого

Чтобы проверить мк, если ты не тролишь тупняком, конечно. А так у тебя всегда есть st-flash erase.

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

И вообще, что чужой непроверенный код может сотворить с отладочной платой? Максимум можно написать код, который флешку испортит многократной перезаписью. Но твой чип 200 рублей стоит в дорогом розничном магазине.

Ты хочешь научиться электронике и тебе лень читать книжки и жалко 200 рублей? Позорище.

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

жалко 200 рублей? Позорище.

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

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

Бред. Если надо проверить просто, то можно поступить глупо и неправильно: через ардуино-иде.

Я когда-то на си писал (скорее игрался) под синюю таблетку, всё влезало.

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

на ассемблере пишешь так же как на русском

ну вот еще вам скажу, что в ассемблере я полный ноль. к сожалению ник не соответствует мне.

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

Раз для проверки, используй Blinky. Он проверяет некоторые особенности микроконтроллера, а затем гоняет мемтест (для хорошей меры). Код свободный и (когда в достаточной степени научишься) понятный.

token_polyak ★★★★
()
Последнее исправление: token_polyak (всего исправлений: 1)
Ответ на: комментарий от fernandos

благодаря этому форуму получилось не глупо и правильно! зашили в контроллер без всяких IDE.

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

эдик, почему тебе везде кал мерещится?

Потому что он видел внутренности Куба и остался ими недоволен. Я, впрочем, тоже. Хотя и стараюсь выражать неудовлетворение от этой поделки более сдержано.

А с фразой «взять Куб и проверить на готовом шаблоне» поспорить сложно. Хотя как показывает практика, далеко не все шаблоны Куба заводятся без напильника. Я на это в usb напоролся: Куб не настраивал тактирование.

COKPOWEHEU
()

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

P.S. На асме под ARM'ы не пишут — нет смысла, слишком уж много писанины выйдет. Это ж тебе не PIC какой-нибудь допотопный (да и то, там надежней было на сях писать).

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

Ну, пишут - не пишут это другой вопрос. Знать-то ассемблер все равно полезно. И для того чтобы его изучить, можно его взять первым языком, почему бы и нет. Если ТС программист, ему быстро надоест писать километровые портянки и заниматься менеджментом регистров, тогда и на Си перейдет.

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

Знать-то ассемблер все равно полезно.

Естественно, я частенько, когда под STM8 писал, смотрел листинги и вручную оптимизировал код. Потому что sdcc — та еще дрянь даже по сравнению с каким-нибудь третьим gcc… А вот для STM32 ни разу мне асм не понадобился. У меня и стартап на С написан.

Кстати, на ARM'ах может оказаться более выгодно писать на С++. Я все хоть и обкладываю одного крестовика на радиофорумах, но постарался он на славу: за годы работы он себе накидал на шаблонах эдакий фреймворк, в результате чего пишет вполне читабельный компактный переносимый код. Но меня эти шаблоны просто выбешивают, да и времени на создание «фреймворка» надо потратить очень много (а тот тип — проприетаст до мозга костей, хрен выложит свое детище под свободной лицензией). Так что, пишу на сишечке свои велосипеды.

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

спасибо) мне просто нужно было проверить контроллер. хотел совсем без IDE обойтись. пока еще не разобрался тольком

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

Я довольно много времени в первый раз потратил: на написание вменяемого линкер-скрипта, на переделку стартапа, собирание всех нужных файлов CMSIS и написание Makefile. Сейчас там все в куче, и даже в принципе у меня есть обобщенное для STM32F0 и F1. Остается еще на F3/F4 расширить (но вот на USB у F0/F1 я потратил месяца три, боюсь, что с OTG Cortex-M4 буду еще дольше биться).

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

хотел совсем без IDE обойтись.

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

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

спасибо... но скрипты это вобще не мое. щас может быть и установлю какое-нибудь IDE, чтобы посмотреть библиотеки, но после все же попытаюсь вернуться к тому с чего начал.

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

потратил месяца три

ну у вас все серьезно, а у меня просто баловство. поэтому мне сроки не особо важны, да и результаты тоже

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

ну у вас все серьезно, а у меня просто баловство. поэтому мне сроки не особо важны, да и результаты тоже

Совсем ты себя запустил.

anonymous
()

угадал автора по заголовку

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

Qbs для qtcreator'а роднее чем make, зависимости нормально подхватываются и т.д. Ну и я ж не настоящий сварщик, qbs я уже писал, а мейк только читал в основном.

ya-betmen ★★★★★
()
Последнее исправление: ya-betmen (всего исправлений: 1)
Ответ на: комментарий от ya-betmen

Я вообще без понятия, что за хрень такая этот qbs, т.к. родными системами сборки являются либо make, либо cmake. Но для микроконтроллеров cmake нафиг не нужен, т.к. там нет этих 100500 библиотек, находящихся неизвестно где: обычно для МК вообще никаких библиотек нет!

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

Задолбали уже с выкидыванием, никто не собирается его бросать.

Оно развивается, вышла версия 1.19, оно синхронно с кутекриэйтором выходит.

И там есть бареметал примеры без всяких халов

И да, можно еще юзать вскод, если бгльше нравится.

А вот использование мейкфайла это дичь.

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

Вот как раз хрень это маке и смаке. Вот уж гогно так гогно. )))

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

Assembler

Ты неадекват. Всего доброго

BceM_IIpuBeT

Вот и встретились два одиночества.

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

На асме под ARM’ы не пишут — нет смысла, слишком уж много писанины выйдет.

Много писанины выйдет только первый раз. На чистом, кстати, Си её выйдет ещё больше, если ты не будешь пользоваться готовыми либами. Вон, твой «блинки» вместе с его хедерами как раз это отлично показывает.

На асме под армы ещё как пишут, там, где это имеет смысл. Просто, похоже, кое-кто не осилил и теперь лечит, что килобайтовый «блинки» под МК — это нормально.

.syntax unified
.cpu cortex-m3
.thumb
.global _start

    PORT_C_ENABLE_BIT           = 0x42420310
    PORT_C_PIN13_MODE0_BIT      = 0x422200d0
    PORT_C_PIN13_OUTPUT_BIT     = 0x422201b4

.text
    stack_pointer_value:    .word   0x20005000
    reset_vector:           .word   _start + 1
    
    _start:
        movs    r1, #1
        
        ldr     r0, =PORT_C_ENABLE_BIT
        str     r1, [r0]
        ldr     r0, =PORT_C_PIN13_MODE0_BIT
        str     r1, [r0]
        
        ldr     r0, =PORT_C_PIN13_OUTPUT_BIT
        blink:
            str     r2, [r0]
            eors    r2, r1
            
            movs    r4, r1, lsl #18
            delay:
                subs    r4, #1
                bne delay
        b blink
$ arm-none-eabi-as blinky.S -o blinky.o
$ arm-none-eabi-ld blinky.o -Ttext=0x08000000 -o blinky.elf
$ arm-none-eabi-objcopy -O binary blinky.elf blinky.bin
$ stat -c %s blinky.bin 
44

Прикол, да?

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

Вон, твой «блинки» вместе с его хедерами как раз это отлично показывает.

Вот только мне нужно коротенький стартап на С написать, да подключить стандартные хидеры. А тебе придется писать более длинный и непонятный стартап (т.к. на асме), да еще и те же самые хидеры подключать!

А теперь покажи код на асме, выполняющий тот же самый «блинки», что делает мой: «отморзянивать» SOS или же просто мигать светодиодом в зависимости от нажатой кнопки. А если еще и таймер подключить, чтобы посредством DMA дрыгать ногами?

Я уж молчу о том, что объявлять каждый раз ручками все используемые регистры — бред! Во что превратится твоя утилитка, если ты решишь составное USB устройство написать, да еще и с DMA?

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от anonymous
#include "stm32f10x.h"
#include "pinmacro.h"

#define StackTop  ((uint32_t)(0x20000000 + 20*1024))
#define LED_Y B,5,1,GPIO_PP50
#define LED_G B,6,1,GPIO_PP50
#define LED_R B,7,1,GPIO_PP50
static void Reset_Handler(void);

__attribute__((used,section(".isr_vector")))
void (*const g_pfnVectors[])(void) = {
  [0]=(void*)StackTop,
  [1]=Reset_Handler,
};

static void Reset_Handler(void){
  RCC->APB2ENR = RCC_APB2ENR_IOPBEN;
  //GPIO_config(LED_G);
  GPIOB->CRL = (0b0011 << (4*6));
  
  while(1){
    //GPO_T(LED_G);
    GPIOB->ODR ^= (1<<6);
    for(int32_t i=(1<<20); i; i--){asm("");}
  }
}
$ arm-none-eabi-gcc src/main.c -nostartfiles -mthumb -mcpu=cortex-m3 -Os -Ilib -Ilib/include/core -Ilib/include -DSTM32F10X_MD -Tlib/stm32f103c8_flash.ld -o res.elf
$ arm-none-eabi-size res.elf 
   text    data     bss     dec     hex filename
     48       0       0      48      30 res.elf

Уже не так очевидно, не правда ли?

COKPOWEHEU
()
Последнее исправление: COKPOWEHEU (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.