Перейти до публікації
Пошук в
  • Додатково...
Шукати результати, які містять...
Шукати результати в...

STM (Cortex) vs ATMEL

toksoft

Рекомендовані повідомлення

В 103 серии есть, в 030 нет (RTC). Код проверять никто не будет, так как у меня коммерческие проекты. Выбор внешней ЕПРОМ был обусловлен наличием готового примера в SPL, отсутсвием времени на отладку, да и в дальнейшем эти килобайты могут пригодиться

 

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

особенно видно разницу если вы попытаетесь на авр застартовать ТФТ экранчик, хоть бы 2.4. Я тут выкладывал ссылку в теме про ардуино

 

 

Зы если хотите об этом поговорить, давайте запилим отдельной темой

 

 

 

unreal1975,- перенес наш спор в отдельную тему. Давайте спорить :-)

Жду Ваших аргументов в пользу STM. Желательно подкрепленную фрагментами исходников. Со своей стороны обязуюсь честно рассказать все что я знаю, и поделиться идеями, и готовыми code snippets.

Посилання на коментар
Поділитися на інших сайтах

Про СТМ есть клевая фраза:

Нельзя просто так взять и помигать диодом СТМкой :)

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

  • Лайк 2
Посилання на коментар
Поділитися на інших сайтах

unreal1975,- перенес наш спор в отдельную тему. Давайте спорить :-)

Хе. Начну с нокаута - на картинке 2 TFT экранчика, слева просто ТФТ, справа TFT IPS.

 

Оба подключены к отладочной плате stm32f030c8t6 (самый младший и дешевый из семейства) по 2м SPI

 

 

Покажете что нибудь похожее на атмеге?

 

 

Да, на экранчиках выводится температура с датчика 1wire и

 

данные с BMP280

193588039_i58cimgpsh_orig.thumb.JPG.7bfa111a05ee665030ec1bcadac7d33a.JPG

  • Лайк 1
Посилання на коментар
Поділитися на інших сайтах

Ага... И пусть ещё кто-то покажет на STM32 такой идиотизм, какой в некоторых корпусах ARM'ов Atmel'а присутствует: в 64-ногом корпусе доступно немногим более 20 портов, а размещение выводов питания такое, что делает напрочь невозможным применение "процессоров" в некоторых конструкциях.

 

в плане программирования - десять шагов назад.

Наиболее политически правильные в плане программирования МК - MSP430. Они фору всем дают по части приятности. Но они не ARM'ы...

А вот если хочется ARM'ов больше хороших и правильных, то, как ни странно, тут образец для подражания - Kinetis, который Freescale делает (а теперь - NXP). У меня была необходимость сделать очень мелкую плату с несколькими ВЧ микросхемами, управляемыми по SPI. Рекордсменом по мелким габаритам оказалась плата с применением MKL26Z128VFT4. При всех ремаппингах STM'ка рядом не валялась. А Atmel даже теоретически не рассматривался в качестве альтернативы.

Посилання на коментар
Поділитися на інших сайтах

У авр есть другое важное преимущество, точнее даже два.

1) когда задача относительно простенькая где железа авр заведомо точно достаточно без каких либо проблем - эту задачу можно решить в виде макетки за один вечер. СТМ же пока поймешь что оно там делает и почему чтото оно делает чтото не то - реально уходит неделя мороки. Вот это крайне демотивирует делать что либо.

2) аврки понятно что делают - в том смысле что можно потактно понять происходящее, тем самым можно проследить логику работы и тонко настроить алгоритм. Это важно - так как позволяет избежать кучи скрытых ошибок. СТМки же - одному 32битному Богу известно что оно там делает и зачем. Плюс куча всяких прерываний и огромное количество всяких преднастроек которые надо отключить чтобы оно точно не делало то чего не нужно. Другими словами - авр четко ждет команды хозяина что делать, стм - живет своей жизнью, а все попытки програмиста направить эту жизнь в нужное русло - это боль.

 

А дальше - куча ресурсов стм и замороченность кода сразу же соблазняют использовать всякие библиотеки или мини операционки верхнего уровня. И тут же вылазит новый гемор - либы не работают как надо или глючат, а операционки сразу же грызут энергию и сьедают потенциальную производительность. И в итоге получается - ресурсов вроде и дофига - а толку мало. А использовать все их на полную почти нереально - иначе надо выкурить многостраничные даташиты и желательно несколько раз. А потом, когда уже вроде все нормально работает и остается какой то мелкий баг - оказывается это уже написано на 293странице эраташита мелким шрифтом в третьем абзаце справа в скобках :) и все труды - в трубу.

 

Короче, авр - это для того чтобы взять и сделать.

Стм - это чтобы взять даташит и сдохнуть.

 

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

  • Лайк 1
Посилання на коментар
Поділитися на інших сайтах

Да, все так и есть. Кроме конечно "сдохнуть". :-)

Разобраться в общем можно, но это занимает время. Почему кстати возник вопрос с SPI ? Зачем он вам ? Наверное потому, что дисплеи обычно идут с интерфейсом i2c или spi ? А зачем вам вообще touch screen или несколько больших дисплеев, которые подключены именно к STM (который M3) ?

Я подключал маленькие OLED, так, чтобы "поместиться" в 1 иди 2 юнита на DIN рейке. Да, spi это реально быстрее. burst - вообще летает,- единицы миллисекунд успевает отображать. Погодите, а откуда собсно отображать ?

Из RAM конечно. Вот так вот целиком брать, и дампить bitmap в дисплей. Быстро ? Летает. Только вот буферизировать нужно. И это на 20к доступного RAM. Как-то не очень ...

А зачем собсно использовать младшую модель, когда есть "покруче", скажем с 256к ? Ответ тоже достаточно простой и тривиальный: доступность на локальном рынке, и еще более "утяжеленная" архитектура старших моделей. Плюс энергопотребление.

А она ох какая непростая.

Как по мне, эту самую младшую модель, целесообразно использовать под цели управления, а отнюдь не в качестве "совмещенного" контроллера интерфейса, тем более графического. В младших моделях доступна память 64 или 128к, часть из которой можно использовать для кода, часть для данных. Никакие внешние приблуды для этого не нужны.

По финалу, я использую STM в брелках, как "управляющий кристалл". Там кстати со sleep и прочими технологиями энергосбережения тоже вопросы остались. Ну Ок, частично решаются внешней обвеской. Другого применения именно для этого кристалла я лично не вижу.

Если мне "вдруг" понадобиться подключить 2,3 или даже 5 дисплеев, я скорее всего выберу ESP32. 512k RAM (не совсем конечно так, runtime забирает определенную часть, в зависимости от используемых библиотек), переферии на борту даже побольше.

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

Посилання на коментар
Поділитися на інших сайтах

Да, все так и есть. Кроме конечно "сдохнуть". :-)

Разобраться в общем можно, но это занимает время. Почему кстати возник вопрос с SPI ? Зачем он вам ? Наверное потому, что дисплеи обычно идут с интерфейсом i2c или spi ? А зачем вам вообще touch screen или несколько больших дисплеев, которые подключены именно к STM (который M3) ?

Я подключал маленькие OLED, так, чтобы "поместиться" в 1 иди 2 юнита на DIN рейке. Да, spi это реально быстрее. burst - вообще летает,- единицы миллисекунд успевает отображать. Погодите, а откуда собсно отображать ?

Из RAM конечно. Вот так вот целиком брать, и дампить bitmap в дисплей. Быстро ? Летает. Только вот буферизировать нужно. И это на 20к доступного RAM. Как-то не очень ...

А зачем собсно использовать младшую модель, когда есть "покруче", скажем с 256к ? Ответ тоже достаточно простой и тривиальный: доступность на локальном рынке, и еще более "утяжеленная" архитектура старших моделей. Плюс энергопотребление.

А она ох какая непростая.

Как по мне, эту самую младшую модель, целесообразно использовать под цели управления, а отнюдь не в качестве "совмещенного" контроллера интерфейса, тем более графического. В младших моделях доступна память 64 или 128к, часть из которой можно использовать для кода, часть для данных. Никакие внешние приблуды для этого не нужны.

По финалу, я использую STM в брелках, как "управляющий кристалл". Там кстати со sleep и прочими технологиями энергосбережения тоже вопросы остались. Ну Ок, частично решаются внешней обвеской. Другого применения именно для этого кристалла я лично не вижу.

Если мне "вдруг" понадобиться подключить 2,3 или даже 5 дисплеев, я скорее всего выберу ESP32. 512k RAM (не совсем конечно так, runtime забирает определенную часть, в зависимости от используемых библиотек), переферии на борту даже побольше.

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

 

 

Обычно подключен какой то один экран :)

 

Главный фактор - вопрос цены вопроса. Я перешел с атмеги на младшую модель посмотреть хватит-не хватит. Как оказалось хватило более чем. Тормоза начинаются на экранчике 800х480, думаю если возьму 103 серию, будет все ок.

 

берем stm32 30грн х50шт =1500

берем esp32 170грн х50шт =8500

У меня разница в кармане, у вас-в Китае, даже не так, мое устройство будет дешевле на 140

 

По сложности программирования- пару месяцев присутствует определенный вынос мозга, потом-скучно

 

По потреблению- что атмега кушала 20мА, что STM Те же 20мА

 

Да кстати, вы на атмеге пробовали вкрутить floating point?

 

Пару минусов все же есть- чипы отлично дымятся от 12В и для пайки нужна линза и паяльная станция

 

зы: зажигаем светодиод:

GPIO_SetBits(GPIOC, GPIO_Pin_5); лениво (SPL)

port_wr->BSRR = pin_wr; быстро

Посилання на коментар
Поділитися на інших сайтах

Обычно подключен какой то один экран :)

 

Главный фактор - вопрос цены вопроса. Я перешел с атмеги на младшую модель посмотреть хватит-не хватит. Как оказалось хватило более чем. Тормоза начинаются на экранчике 800х480, думаю если возьму 103 серию, будет все ок.

 

берем stm32 30грн х50шт =1500

берем esp32 170грн х50шт =8500

У меня разница в кармане, у вас-в Китае, даже не так, мое устройство будет дешевле на 140

 

По сложности программирования- пару месяцев присутствует определенный вынос мозга, потом-скучно

 

По потреблению- что атмега кушала 20мА, что STM Те же 20мА

 

Да кстати, вы на атмеге пробовали вкрутить floating point?

 

Пару минусов все же есть- чипы отлично дымятся от 12В и для пайки нужна линза и паяльная станция

 

зы: зажигаем светодиод:

GPIO_SetBits(GPIOC, GPIO_Pin_5); лениво (SPL)

port_wr->BSRR = pin_wr; быстро

 

Для float point у меня уже лет 20 как есть свой набор библиотек. :-)

Зачем вам float point ? int32_t и int64_t ... Логарифм что-ли лениво в ряд разложить ? Или, в случае например датчиков, хранить уже готовые, предварительно рассчитанные таблицы. На контроллере осмоса например, tds распрекраснейшим образом считается.

 

Что такое "начинаются тормоза" ? Где узкое место ?

 

По стоимости esp32 - 2.5$ за штуку.

Я так понимаю, свое время вы в денежном выражении не пересчитываете ?

 

Добавлено через 52 минуты

Давайте усложним задачу. Предположим что вам нужно не просто включить светодиод, а изобразить "мигание". Скажем раз в секунду. Учитівая то, что у вас есть другой, не менее приоритетній код который например включает/выключает бойлер. Какие у нас есть варианты?

Я вижу слкдующие:

 

1. RTOS. Потребляет немеряно памяти, но есть практически весь необходимый функционал, включая например mutexes. Оные можно изобразить и без RTOS, но тогда нужно "с головой нырять" в архитектуру.

 

2. Interrupts. Тоже вариант, но для данного usecase "выбрасывать на ветер" целый interrupt - непозволительная роскошь.

 

3. Preemptive multitasker. "скармливаем" оному хєндлеры процедур с параметрами, и он их выполняет согласно расписания. Минус - отсутствие блокировок, и относительно быстрое выполнение каждой атомарной процедуры schedulerом.

 

4. Свой диспетчер задач (concurrent multitasking). В принципе понятно как, но именно этот вариант на STM я не реализовывал

Посилання на коментар
Поділитися на інших сайтах

Для float point у меня уже лет 20 как есть свой набор библиотек. :-)

Зачем вам float point ? int32_t и int64_t ... Логарифм что-ли лениво в ряд разложить ? Или, в случае например датчиков, хранить уже готовые, предварительно рассчитанные таблицы. На контроллере осмоса например, tds распрекраснейшим образом считается.

 

Что такое "начинаются тормоза" ? Где узкое место ?

 

По стоимости esp32 - 2.5$ за штуку.

Я так понимаю, свое время вы в денежном выражении не пересчитываете ?

 

 

floating point как раз для экономии времени :) (сложные формулы) в атмеге эта штука выжрала сразу несколько килобайт, на стм тоже, но здесь то их 64

Тормоза- выделил 8 бит вместо 16ти на шину экрана

 

 

кстати, а напомните, сколько там пинов у ЕСП? а если штук 15 релюшек кроме экранчика надо? а если клавиатуру? а это все пины

 

 

Но мы ж вроде про стм и атмегу :)

Посилання на коментар
Поділитися на інших сайтах

floating point как раз для экономии времени :) (сложные формулы) в атмеге эта штука выжрала сразу несколько килобайт, на стм тоже, но здесь то их 64

Тормоза- выделил 8 бит вместо 16ти на шину экрана

 

 

кстати, а напомните, сколько там пинов у ЕСП? а если штук 15 релюшек кроме экранчика надо? а если клавиатуру? а это все пины

 

 

Но мы ж вроде про стм и атмегу :)

 

64к EEPROM, меня больше волнует оперативка. Мне не разу не удалось заполнить кодом более чем 58к.

Что касается ног, у ESP32 их больше. У 8266 конечно меньше. TCA или MCP в общем никто не отменял.

Я после AJAX, находясь в состоянии "вечной нехватки реле", всандалил в свою сигнализацию аж 24 шт. :-) Сейчас уже понимаю, что это наверное перебор.

 

На atmega я такие задачи и не думал реализовывать, присматривался с старшим моделям STM. Остановило то, что нужно "доклеивать" много внешней обвески, т.е. схемотехника значительно усложняется. Если CORTEX таки созреет на кристалл, в котором интегрирован хотя-бы ethernet контроллер, я подумаю о том, чтобы вернуться.

 

"Тормоза- выделил 8 бит вместо 16ти на шину экрана" - вы экран путем SPI подключали ? Имеется в виду внутренняя реализация шины дисплея ?

www.st.com/content/ccc/resource/technical/document/technical_note/58/17/ad/50/fa/c9/48/07/DM00054618.pdf/files/DM00054618.pdf/jcr:content/translations/en.DM00054618.pdf
Посилання на коментар
Поділитися на інших сайтах

например включает/выключает бойлер. Какие у нас есть варианты?

Я вижу слкдующие:

 

 

хихи. гляньте сколько там таймеров. из них как минимум 2 4х канальных.

Посилання на коментар
Поділитися на інших сайтах

Хе. Начну с нокаута - на картинке 2 TFT экранчика, слева просто ТФТ, справа TFT IPS.

 

Оба подключены к отладочной плате stm32f030c8t6 (самый младший и дешевый из семейства) по 2м SPI

 

 

Покажете что нибудь похожее на атмеге?

 

 

Да, на экранчиках выводится температура с датчика 1wire и

 

данные с BMP280

 

у меня, к сожалению, нет ТФТ дисплеев, тем более таких больших, но на обычные ЖК 4х строчные информацию можно спокойно вывести на атмеге.

Посилання на коментар
Поділитися на інших сайтах

хихи. гляньте сколько там таймеров. из них как минимум 2 4х канальных.

 

Информация вроде как открытая :-)

www.st.com/en/microcontrollers/stm32f103c8.html

 

Вы наверное имели в виду "4 IC/OC/PWM or pulse counter and quadrature (incremental) encoder input" ?

 

Да. Как все запущено....

Выложите пожалуйста ваш код инициализации таймера.

Посилання на коментар
Поділитися на інших сайтах

Я так понимаю, свое время вы в денежном выражении не пересчитываете

мы говорим о серийных изделиях или единичных экземплярах? пересчитайте вышеприведенную разницу на годовой объем выпуска

 

Добавлено через 1 минуту

"Тормоза- выделил 8 бит вместо 16ти на шину экрана" - вы экран путем SPI подключали ? Имеется в виду внутренняя реализация шины дисплея ?

Больше чем 2.4 дюйма на SPI не делают

Посилання на коментар
Поділитися на інших сайтах

мы говорим о серийных изделиях или единичных экземплярах? пересчитайте вышеприведенную разницу на годовой объем выпуска

 

Добавлено через 1 минуту

 

Больше чем 2.4 дюйма на SPI не делают

 

Насколько я понимаю, вы выбрали наверное такой дисплей:

www.aliexpress.com/item/240x320-2-4-SPI-TFT-LCD-Touch-Panel-Serial-Port-Module-with-PBC-ILI9341-5-3/32278769615.html?spm=2114.search0104.3.2.2a05c11aaGsKXY&ws_ab_test=searchweb0_0,searchweb201602_4_10065_10068_318_319_317_10696_450_10084_10083_10618_452_535_534_533_10307_532_204_10059_10884_323_10887_100031_320_321_322_10103_448_449,searchweb201603_55,ppcSwitch_0&algo_expid=c6cdf66b-6d7a-49b3-8cbf-e579c71cd75c-0&algo_pvid=c6cdf66b-6d7a-49b3-8cbf-e579c71cd75c

 

Не понимаю в чем именно проблема. Готовых библиотек валом, например:

github.com/Bodmer/TFT_ILI9341_ESP

 

Есть правда некоторые тонкости программинга без буферизации (drawpixel), в частности refresh, но до этой проблемы еще нужно "дорости" :-)

 

P.S. На ваших экранах с показателями BMP280, отсутствует дробная часть. Можно так:

Возвращаете показатели температуры и давления умноженные скажем на 100 (int32_t), потом temp / 100, temp %100

Посилання на коментар
Поділитися на інших сайтах

вот человек подключил 2.8" TFT LCD Touch Display к Arduino UNO и вывел информацию о температуре и дату/время - никаких проблем.

 

Посилання на коментар
Поділитися на інших сайтах

вот человек подключил 2.8" TFT LCD Touch Display к Arduino UNO и вывел информацию о температуре и дату/время - никаких проблем.

 

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

 

Добавлено через 4 минуты

Не понимаю в чем именно проблема. Готовых библиотек валом, например:

 

 

У меня с дисплеями проблем нет :) до 3.2" все летает. Тормоза начинаются на 4" (тормозит если менять цвет всего экрана, если выводить символы-все ок)

Посилання на коментар
Поділитися на інших сайтах

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

 

если скорость нужна - то да.

Посилання на коментар
Поділитися на інших сайтах

Я TFT не использовал, привожу пример инициализации дисплея на кристалле 1306:

 

 

void SSD1306::I2C_Configuration ( void )

{

I2C_InitTypeDef I2C_InitStructure ;

GPIO_InitTypeDef GPIO_InitStructure ;

RCC_APB1PeriphClockCmd ( RCC_APB1Periph, ENABLE ) ;

RCC_APB2PeriphClockCmd ( RCC_APB2Periph_GPIOB, ENABLE ) ;

GPIO_InitStructure.GPIO_Pin = SCL_PIN | SDA_PIN ;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz ;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP ;

GPIO_Init ( GPIOB, &GPIO_InitStructure ) ;

I2C_DeInit ( I2C_BUS ) ;

I2C_StructInit ( &I2C_InitStructure ) ;

I2C_InitStructure.I2C_Mode = I2C_Mode_I2C ;

I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2 ;

I2C_InitStructure.I2C_OwnAddress1 = 0x00 ;

I2C_InitStructure.I2C_Ack = I2C_Ack_Enable ;

I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit ;

I2C_InitStructure.I2C_ClockSpeed = 400000 ; // 400K

I2C_ITConfig ( I2C_BUS, I2C_IT_ERR, DISABLE ) ;

I2C_Cmd ( I2C_BUS, ENABLE ) ;

I2C_Init ( I2C_BUS, &I2C_InitStructure ) ;

RCC_APB2PeriphClockCmd ( RCC_APB2Periph_GPIOA, ENABLE ) ;

RCC_APB2PeriphClockCmd ( RCC_APB2Periph_AFIO, ENABLE ) ;

GPIO_StructInit( &GPIO_InitStructure ) ;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ;

GPIO_InitStructure.GPIO_Pin = OLED_POWER ;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz ;

GPIO_Init ( GPIOA, &GPIO_InitStructure ) ;

RCC_APB2PeriphClockCmd ( RCC_APB2Periph_GPIOC, ENABLE ) ;

RCC_APB2PeriphClockCmd ( RCC_APB2Periph_AFIO, ENABLE ) ;

}

 

 

 

Идеи подключать к atmega 1306 у меня не было, только обычный 20 символьный дисплей, пример класса приведен ниже:

 

class lcd2_wrapper

{

public:

lcd2_wrapper ( LiquidCrystal *plc )

{

lc = plc ;

visible = blinking = false ;

curpos_h = curpos_v = 0 ;

init () ;

lc->begin ( LCD_COLUMNS, LCD_ROWS ) ;

}

~lcd2_wrapper () { lc = NULL ; }

void init ()

{

int i ;

for ( int k = 0 ; k < LCD_ROWS ; k++ )

{

for ( i = 0 ; i < LCD_COLUMNS ; i++ )

{ line [k] = ' ' ; }

}

}

void clear_line ( const int ver )

{

if ( ver < 0 || ver >= LCD_ROWS ) return ;

for ( int i = 0 ; i < LCD_COLUMNS ; i++ )

{

if ( line [ver] != ' ' )

{

line [ver] = ' ' ;

lc->setCursor ( i, ver ) ;

lc->print ( line [ver] ) ;

}

}

curpos_h = 0 ;

lc->setCursor ( 0, ver ) ;

}

void redraw ()

{

for ( int k = 0 ; k < LCD_ROWS ; k++ )

{

for ( int i = 0 ; i < LCD_COLUMNS ; i++ )

{

lc->setCursor ( i, k ) ;

lc->print ( line [k] ) ;

}

}

}

void setCursor ( const int hor, const int ver )

{

if ( hor < 0 || hor >= LCD_COLUMNS|| ver < 0 || ver >= LCD_ROWS ) return ;

curpos_h = hor ;

curpos_v = ver ;

lc->setCursor ( hor, ver ) ;

}

void getCurpos ( int *hor, int *ver )

{

*hor = curpos_h ;

*ver = curpos_v ;

}

void noCursor ()

{

visible = false ;

lc->noCursor () ;

}

void blink ()

{

blinking = true ;

lc->blink () ;

}

void noBlink ()

{

blinking = false ;

lc->noBlink () ;

}

bool get_blinking ()

{ return blinking ; }

void leftToRight ()

{ lc->leftToRight () ; }

void clear ()

{

init () ;

curpos_h = curpos_v = 0 ;

lc->clear () ;

lc->setCursor ( curpos_h, curpos_v ) ;

}

void display ()

{ lc->display () ; }

void noDisplay ()

{ lc->noDisplay () ; }

void print ( char *buf )

{

int i, l = 0 ;

if ( !buf ) return ;

for ( i = curpos_h ; i < LCD_COLUMNS ; i++ )

{

if ( buf [l] == '\0' ) break ;

else if ( line [curpos_v] != buf [l] )

{

line [curpos_v] = buf [l] ;

lc->setCursor ( i, curpos_v ) ;

lc->print ( line [curpos_v] ) ;

}

l++ ;

}

curpos_h = i ;

}

...

 

 

 

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

Посилання на коментар
Поділитися на інших сайтах

Да. Как все запущено....

Выложите пожалуйста ваш код инициализации таймера.

 

 

Взял готовый из примера к SPL Timebase timer, он есть на сайте

 

Добавлено через 51 секунду

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

 

 

Кто на что учился, по первой простыне все прозрачно, вторая-темный лес :)))

Посилання на коментар
Поділитися на інших сайтах

Взял готовый из примера к SPL Timebase timer, он есть на сайте

 

Добавлено через 51 секунду

 

 

Кто на что учился, по первой простыне все прозрачно, вторая-темный лес :)))

Я в курсе. :-)

unreal1975 я тоже так хотел типа "программить". Склеить из snippets.

К сожалению, не получается. Пришлось разбираться в этом хозяйстве.

То есть до какого-то предела "оно" работает,- потом ой ...

Конкретно по прерываниям, которые можно "безболезненно" использовать - их 4. Остальные тоже в общем можно, но уже не так просто. Отладка (STLink) даже с 4 handlers в реальных условиях - это ад. Мрачный, и со сковородками.

Именно под мои задачи, проект на stm занимает около 11000 строк плюсатого кода (не считая headers). Еще и map приходилось редактировать - стека не хватало. Пользуюсь Keilом. Мне хватило издевательств со стороны stm.

 

 

cut&paste в приведенных примерах нет. От слова совсем. Только то, в чем разобрался, и понимаю зачем и как работает.

Посилання на коментар
Поділитися на інших сайтах

Я в курсе. :-)

unreal1975 я тоже так хотел типа "программить". Склеить из snippets.

К сожалению, не получается. Пришлось разбираться в этом хозяйстве.

То есть до какого-то предела "оно" работает,- потом ой ...

Конкретно по прерываниям, которые можно "безболезненно" использовать - их 4. Остальные тоже в общем можно, но уже не так просто. Отладка (STLink) даже с 4 handlers в реальных условиях - это ад. Мрачный, и со сковородками.

Именно под мои задачи, проект на stm занимает около 11000 строк плюсатого кода (не считая headers). Еще и map приходилось редактировать - стека не хватало. Пользуюсь Keilом. Мне хватило издевательств со стороны stm.

 

 

cut&paste в приведенных примерах нет. От слова совсем. Только то, в чем разобрался, и понимаю зачем и как работает.

 

 

Вы точно с тем же stm32 работаете? :)

 

у меня полностью противоположное мнение - обалденный рилтайм отладчик st-link, в проекте используются почти все таймеры в разных режимах, I2C, SPI, UART, пару каналов ацп, кода (пока)килобайт на 30. Пока что особых проблем не вижу.

 

 

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

 

 

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

Посилання на коментар
Поділитися на інших сайтах

Вы точно с тем же stm32 работаете? :)

 

у меня полностью противоположное мнение - обалденный рилтайм отладчик st-link, в проекте используются почти все таймеры в разных режимах, I2C, SPI, UART, пару каналов ацп, кода (пока)килобайт на 30. Пока что особых проблем не вижу.

 

 

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

Угу. Расскажите мне бестолковому, что такое interrupts masking, NMI, и приоритеты. И на какие ноги можно завесить NMI, а на какие нет. Может еще объясните почему ? А заодно, может объясните мне разницу (именно для stm) между volatile и mutex ? Или может расскажете в каких режимах могут работать АЦП ? И чем они отличаются ?

 

 

** небольшая корректировка с "разница между volatile и mutex" на что целесообразнее использовать, в т.ч. в handler

 

Добавлено через 29 минут

Могу конечно еще поспрашивать моменты, без которых говорить о типа "коммерческом" решении немного неуместно:

 

 

1. Какой из sleep mode вы используете ?

2. Что происходит с SPI устройствами после выхода из sleep (вы кстати в курсе как именно "будить" кристалл ?)

3. От какого из таймеров вы драйвите SYSCLK ? Это важно, ососбенно если у вас есть батарейка (на stm есть такой входец - vbat называется)

Посилання на коментар
Поділитися на інших сайтах

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

 

Пример:

 

blog.domski.pl/stm32-hal-driver-for-lora-sx1278-wireless-module/

 

HAL кстати использовать не обязательно :-)

Сам приемо-передатчик достаточно дешевый - до 2$ за штуку. stm32 тоже вроде-как недорогой, так что принципиальных проблем тут как бы нет.

 

В моем случае, "внешними" (по отношению к stm) выступали:

 

1. RA-02

2. 4 кнопки

3. Светодиод

4. Пищалка

 

Что тут у нас может генерировать внешние события ? RA ясное дело. Ну и кнопки. Что вешаем на прерывания, а что на цикл ?

Все кроме светодиода. Работу с пищалкой проще организовать путем interrupts. О, а теперь самое интересное: Какие приоритеты, что будет NMI, а что нет ?

Тут в общем чудес никаких не ожидалось, и не было. Чудеса начались когда пришлось кристалл "убаюкивать", чтобы уменьшить энергопотребление. А потом "будить". Поскольку у кристалла (stm) присутствует возможность добавить батарейку,- было бы непростительным расточительством не воспользоваться возможностью держать актуальным RTC (и сохранять некоторые данные в SRAM).

Если следовать "стандартам", то придется строить небоскреб, но такой задачи у меня не было, и все что мне было нужно от кристалла - это беспроводные возможности оного (брелок - база и брелок - брелок), соотв. реализация значительно упростилась. Но не настолько, чтобы можно было "воспользоваться готовыми примерами". :-)

 

В качестве другого примера, можно рассмотреть железку, требования к которой 4 дискретных входа, счетчик импульсов 20ms (цифра), 1 ADC, 4 реле, и, скажем i2c экранчик.

 

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

Посилання на коментар
Поділитися на інших сайтах

Угу. Расскажите мне бестолковому, что такое interrupts masking, NMI, и приоритеты. И на какие ноги можно завесить NMI, а на какие нет. Может еще объясните почему ? А заодно, может объясните мне разницу (именно для stm) между volatile и mutex ? Или может расскажете в каких режимах могут работать АЦП ? И чем они отличаются ?

 

 

** небольшая корректировка с "разница между volatile и mutex" на что целесообразнее использовать, в т.ч. в handler

 

Добавлено через 29 минут

Могу конечно еще поспрашивать моменты, без которых говорить о типа "коммерческом" решении немного неуместно:

 

 

1. Какой из sleep mode вы используете ?

2. Что происходит с SPI устройствами после выхода из sleep (вы кстати в курсе как именно "будить" кристалл ?)

3. От какого из таймеров вы драйвите SYSCLK ? Это важно, ососбенно если у вас есть батарейка (на stm есть такой входец - vbat называется)

 

 

Да, внешние прерывания не используются, многопоточность (если я правильно понял) тоже.

 

АЦП непрерывно в фоне преобразовывает и через ДМА ложит данные в массив. (также передрал из примеров)

 

20мА в активном режиме считаю вполне приемлемым потреблением, чтобы морочиться с ждущими режимами, поэтому мне намного проще чем вам с брелком:)

Еще раз - в серии f030 vbat нет - это ультрабюджетная серия. Если нужен vbat - это f103

Посилання на коментар
Поділитися на інших сайтах

Створіть акаунт або увійдіть у нього для коментування

Ви маєте бути користувачем, щоб залишити коментар

Створити акаунт

Зареєструйтеся для отримання акаунта. Це просто!

Зареєструвати акаунт

Увійти

Вже зареєстровані? Увійдіть тут.

Увійти зараз
×
×
  • Створити...