Так даже между разными камнями в одном семействе переносить код может оказаться геммором еще тем. А уж мысли про чудесную переносимость между камнями разных производителей это вообще что-то из области фантастики. Библиотеки пишутся не для того, чтобы код с камня на камень перетаскивать, а для того, чтобы индусы могли писать код однообразным способом, не вникая в подробности где этот код будет работать.КРАМ писал(а):Полагаю, что создавать переносимый на разные платформы проект, жертвуя функционалом (включая экономический функционал, конечно), - полная глупость.
Затраты на портирование практически равны затратам на новый проект.
STM32 новичку в ARM что к чему
Re: STM32 новичку в ARM что к чему
- Реклама
Re: STM32 новичку в ARM что к чему
Я думаю у каждой платформы есть свое время. Вот жил я раньше на тиньках и мегах - то тут хер поджимаешь чтоб таймеров хватило, то внешних прерываний не хватает, то ног (городишь мультиплексоры внешние
). А потом ХОП... и стали доступны STM32F030xx за 1 бакс (на то время даже тинька самая сранная стоила в два раза дороже), да и с нереальным функционалом. Конечно же я все новые проекты на них стал делать/переучиваться.Вот и до сих пор преимущественно использую эту серию, для простеньких проектов.
А делать универсальную платформу...Зачем??
А делать универсальную платформу...Зачем??
Re: STM32 новичку в ARM что к чему
А если изделие со сроком жизни больше 3 лет ? Это эпоха в контроллеростроении.isx писал(а):А делать универсальную платформу...Зачем??
Или изделие в нескольких исполнениях, для которых оптимально подходят разные контроллеры, а функциональная часть софта процентов на 70 едина ?
Если мы говорим не об изучении моргания светодиодами новичком, а о реальном проекте ? Пусть даже не коммерческом, а опенсоурсном, коих прилично уже и хронологию развития можно посмотреть.
Re: STM32 новичку в ARM что к чему
Если вы делаете изделие, то для него должно быть соответствующее ТЗ, под которое подгоняется имеющийся на данный момент МК (или что-то другое). Если предполагается усовершенствование проекта, то нужно заранее это предусматривать (если у вас в корпусе LQFP64 не хватит ног, то как вы планируете совместить плату с LQFP100?). Конечно, если собрав часы-будильник, вдруг захочется сделать на их основе автопилот для коптера, то взаимозаменяемые платформы необходимыSatyr писал(а):А если изделие со сроком жизни больше 3 лет ?
Re: STM32 новичку в ARM что к чему
Хорошо это выглядит только на абстрактных примерах и только издалека. На деле я вижу три вайфай маршрутизатора DIR-300, в двух из которых установлены камни разных поколений одного производителя, а в одном и производитель другой. Отсюда возникает вопрос -- так ли нужна какая-то софтовая совместимость, если D-Link даже одну модель не стремается лепить на совсем разных процах?Satyr писал(а):А если изделие со сроком жизни больше 3 лет ? Это эпоха в контроллеростроении.
Или изделие в нескольких исполнениях, для которых оптимально подходят разные контроллеры, а функциональная часть софта процентов на 70 едина ?
- Реклама
Re: STM32 новичку в ARM что к чему
Что значит "имеющийся" ? имеющийся где и у кого ? Обычно поле имения - это все, что доступно на рынке. И это выбор МК подгоняется под ТЗ, а не наоборот.isx писал(а): Если вы делаете изделие, то для него должно быть соответствующее ТЗ, под которое подгоняется имеющийся на данный момент МК (или что-то другое).
А далее периодически смотрится по чем сейчас покупаем комплктуху, какие и почем есть аналоги на рынке и соотносится, сколько еще есть перспектива продать, разница в цене между МК и объем работы по переходу.
Если с последним пунктом сильно облажать с привязкой к регистрам, то получения профита предъявляет намного бОльшие требования к предыдущему и предпредыдущему пунктам -))
Re: STM32 новичку в ARM что к чему
Именно по этому и нужна. И это именно то, что я имею ввиду.a5021 писал(а):Отсюда возникает вопрос -- так ли нужна какая-то софтовая совместимость, если D-Link даже одну модель не стремается лепить на совсем разных процах?
Сам по работе ровно так же делаю - меняется даже производитель МК и флеша в рамках формально одного продукта
Это нормальная практика - хочешь не уменьшать прибыль - адаптируйся по поставщикам.
СОФТ то и функциональнасть та же самая. И поддержку и фиксы к софту под предыдущее железо в рамках гарантийного срока никто не отменял.
чем больше % общих исходников под все платы, тем ниже трудозатраты (=деньги) на поддержку.
Re: STM32 новичку в ARM что к чему
Так и я о том жеSatyr писал(а):Что значит "имеющийся" ? имеющийся где и у кого ? Обычно поле имения - это все, что доступно на рынке. И это выбор МК подгоняется под ТЗ, а не наоборот.
Ну не знаю. Такая комплектуха это ж не семечки, у которых производители каждый месяц новые . Да и цены пляшут в основном только от доллара (от которого, кстати, цены на все пляшутSatyr писал(а):А далее периодически смотрится по чем сейчас покупаем комплктуху, какие и почем есть аналоги на рынке и соотносится, сколько еще есть перспектива продать, разница в цене между МК и объем работы по переходу.
Поставщиков у нас тоже не мало. Много очень надежных.Satyr писал(а):Это нормальная практика - хочешь не уменьшать прибыль - адаптируйся по поставщикам.
Проблема может вылезти в том, что если изначально был сделан неверный выбор комплектухи, то потом исправление такой ошибки, связанное с переводом на другую платформу, может дорого стоить. Решение проблемы одно - тщательнее подходить к выбору продуктов для своих проектов еще на этапе проектировки.
Re: STM32 новичку в ARM что к чему
В масштабе месяцев нет.isx писал(а): Ну не знаю. Такая комплектуха это ж не семечки, у которых производители каждый месяц новые.
А если говорить полугодями, а то и кварталами - вполне себе семечки.
Стандартная практика, когда новое семейство у производителя по цена/жирность лучше предыдущего. Иначе чего ради все ?
Обновки у всех производителей не синхронно, так что период старое у одного - новое у другого может быть много меньше, чем период выброса новинок в рамках одного производителя.
-
Pnjom-Penb
- Мучитель микросхем
- Сообщения: 469
- Зарегистрирован: Вс авг 30, 2015 03:52:59
Re: STM32 новичку в ARM что к чему
Хороший Вы выбрали пример для обоснования отказа от переносимости:a5021 писал(а):Так даже между разными камнями в одном семействе переносить код может оказаться геммором еще тем.
Не знаю, как там именно в DIR-300, но обычно в этих железках 99% ПО составляет к.-л. линукс, и в DIR-300, скорее всего, та же история. А в самом этом линуксе 99% кода писаны на C/C++ и именно в целях переносимости.a5021 писал(а):Хорошо это выглядит только на абстрактных примерах и только издалека. На деле я вижу три вайфай маршрутизатора DIR-300, в двух из которых установлены камни разных поколений одного производителя, а в одном и производитель другой. Отсюда возникает вопрос -- так ли нужна какая-то софтовая совместимость, если D-Link даже одну модель не стремается лепить на совсем разных процах?
© "Вот, как-то так..."
На мой взгляд, решение о том, делать код переносимым или писать "в лоб", зависит от размеров проекта - для небольших проектов стоимость усилий по написанию переносимого кода может оказаться сравнимой со стоимостью собственно разработки кода, а-то и превышающей его
- КРАМ
- Друг Кота
- Сообщения: 25247
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: STM32 новичку в ARM что к чему
Дело тут не в размере проекта, а в его типичности.
Скажем, для вычислительной техники и аппаратуры к ней, включая сетевые устройства, достаточно просто обеспечить переносимость, поскольку все насквозь стандартизовано почти на всех уровнях. То есть нестандартным может быть только небольшой участок проекта до первого стандартного сечения.
А если речь идет о встраиваемых применениях, где контроллер или процессор выполняют подчиненную роль в железе, картина совершенно иная.
Скажем, для вычислительной техники и аппаратуры к ней, включая сетевые устройства, достаточно просто обеспечить переносимость, поскольку все насквозь стандартизовано почти на всех уровнях. То есть нестандартным может быть только небольшой участок проекта до первого стандартного сечения.
А если речь идет о встраиваемых применениях, где контроллер или процессор выполняют подчиненную роль в железе, картина совершенно иная.
-
Pnjom-Penb
- Мучитель микросхем
- Сообщения: 469
- Зарегистрирован: Вс авг 30, 2015 03:52:59
Re: STM32 новичку в ARM что к чему
Согласен, можно и об этом факторе говорить. Однако, между "большими" и "типичными" проектами есть значительная корреляция, хотя и непрямая. Дело в том, что большие (а значит и дорогие), но разовые проекты - малонаселенная ниша. Они существуют там, где стоимость отходит на второй план - имиджевые, спецпроекты и т.п. Если же говорить об обычных ситуациях, то эти параметры в значительной степени синонимы.КРАМ писал(а):Дело тут не в размере проекта, а в его типичности.
Re: STM32 новичку в ARM что к чему
В мелкосерийных обычно стоимость комплектухи на порядки ниже, чем стоимость разработки отнесенная к единице продукции.
И тупо берется то, на чем разработка дешевле. И по максимуму крупные готовые куски, благо готовых высокоинтегрированных модулей и HAL к ним с примерами полно нынче
Скажем, вот такую чтуку по 95$ продают

Поскольку во многом похоже на вещь, что сейчас мастерю, могу сказать, что то, что вы видете в кадре в сборе тянет на <20$ НЕ считая проектирования (тысячи $), пары версий прототипов (~500$ каждый) и подготовки производства (~1000$).
Если надо пару десятков изделий - что дешевле "20$" или 95$ ? -)))
И тупо берется то, на чем разработка дешевле. И по максимуму крупные готовые куски, благо готовых высокоинтегрированных модулей и HAL к ним с примерами полно нынче
Скажем, вот такую чтуку по 95$ продают

Поскольку во многом похоже на вещь, что сейчас мастерю, могу сказать, что то, что вы видете в кадре в сборе тянет на <20$ НЕ считая проектирования (тысячи $), пары версий прототипов (~500$ каждый) и подготовки производства (~1000$).
Если надо пару десятков изделий - что дешевле "20$" или 95$ ? -)))
- Andrew Martin
- Вымогатель припоя
- Сообщения: 606
- Зарегистрирован: Вт июн 25, 2013 18:45:07
Re: STM32 новичку в ARM что к чему
Здравствуйте. Поскольку тема для новичков, думаю можно задавать здесь самые идиотские вопросы
Так вот мой вопрос про SPI в STM32F030F4P6.
От оного модуля требуется общаться с контроллером дисплея от нокии 3410. Используются только линии MOSI и SCK, ногу D/C контроллера дёргаю вручную.
Размер данных 8 бит, режим SPI - Transmit-only mode, MSB first.
Тема избитая, но тем не менее ни чтение форумов, ни статьи, ни изучение RM0360 ничего не дало. Должно работать, а не работает!
В софтварной реализации на тех же ногах всё работает. В хардварной не хочет никак.
Так вот мой вопрос про SPI в STM32F030F4P6.
От оного модуля требуется общаться с контроллером дисплея от нокии 3410. Используются только линии MOSI и SCK, ногу D/C контроллера дёргаю вручную.
Размер данных 8 бит, режим SPI - Transmit-only mode, MSB first.
Тема избитая, но тем не менее ни чтение форумов, ни статьи, ни изучение RM0360 ничего не дало. Должно работать, а не работает!
Код: Выделить всё
align 2
lcd_spi_init:
push {r0-r2,lr}
ldr r0,[lcd_spi_cblock.start_delay]
@@:
subs r0,1
bne @r
ldr r0,[lcd_spi_cblock.rcc_base]
virtual at r0
.rcc RCC_TypeDef
end virtual
ldr r2,[.rcc.AHBENR] ;enable GPIOA clock
ldbit r1,RCC_AHBENR_GPIOAEN
orrs r2,r1
ldbit r1,RCC_AHBENR_DMAEN ;enable DMA clock
orrs r2,r1
str r2,[.rcc.AHBENR]
ldr r2,[.rcc.APB2ENR] ;enable SPI clock
ldbit r1,RCC_APB2ENR_SPI1EN
orrs r2,r1
str r2,[.rcc.APB2ENR]
ldr r0,[lcd_spi_cblock.gpioa_base]
virtual at r0
.gpioa GPIO_TypeDef ;GPIO structure
end virtual
ldr r2,[.gpioa.OSPEEDR] ;high speed
ldr r1,[lcd_spi_cblock.gmask_2]
orrs r2,r1
str r2,[.gpioa.OSPEEDR]
ldr r2,[.gpioa.MODER] ;alternative function
ldr r1,[lcd_spi_cblock.gmask_3]
bics r2,r1
ldr r1,[lcd_spi_cblock.gmask_1]
orrs r2,r1
str r2,[.gpioa.MODER]
ldr r2,[.gpioa.AFRL] ;select AF0 in GPIOA7, GPIOA5
ldr r1,[lcd_spi_cblock.gmask_4]
bics r2,r1
str r2,[.gpioa.AFRL]
;SPI configuration
ldr r0,[lcd_spi_cblock.spi_base]
virtual at r0
.spi1 SPI_TypeDef
end virtual
ldr r1,[lcd_spi_cblock.cr1_mask]
strh r1,[.spi1.CR1]
ldr r1,[lcd_spi_cblock.cr2_mask]
strh r1,[.spi1.CR2]
movs r1,SPI_CR1_SPE ;enable SPI
ldrh r2,[.spi1.CR1]
orrs r2,r1
strh r2,[.spi1.CR1]
pop {r0-r2, pc}
align 2
spi_tx: ;r0 = 8-bit input
push {r0-r3,lr}
ldr r1,[lcd_spi_cblock.spi_base]
virtual at r1
.spi1 SPI_TypeDef
end virtual
movs r3,SPI_SR_BSY
@@:
ldrh r2,[.spi1.SR]
tst r2,r3
bne @r
movs r3,SPI_SR_TXE
@@:
ldrh r2,[.spi1.SR]
tst r2,r3
beq @r
strb r0,byte [.spi1.DR]
pop {r0-r3,pc}
align 4
lcd_spi_cblock:
.rcc_base dw RCC_BASE
.gpioa_base dw GPIOA_BASE
.gmask_1 dw GPIO_MODER_MODER7_1+GPIO_MODER_MODER5_1+GPIO_MODER_MODER6_0 ;alternative function on PA5, PA7 and output on PA6
.gmask_2 dw GPIO_OSPEEDR_OSPEEDR7+GPIO_OSPEEDR_OSPEEDR5+GPIO_OSPEEDR_OSPEEDR6
.gmask_3 dw GPIO_MODER_MODER7+GPIO_MODER_MODER6+GPIO_MODER_MODER5
.gmask_4 dw GPIO_AFRL_AFR7+GPIO_AFRL_AFR5
.spi_base dw SPI1_BASE
.cr1_mask dw SPI_CR1_MSTR+SPI_CR1_BR_0+SPI_CR1_BR_1+SPI_CR1_BR_2+SPI_CR1_SSM+SPI_CR1_SSI
.cr2_mask dw SPI_CR2_DS_0+SPI_CR2_DS_1+SPI_CR2_DS_2 ;PCLK/256
.dma_base dw DMA1_BASE
.dma1_ch3 dw DMA1_Channel3_BASE
.dma_dest dw SPI1_BASE+SPI_TypeDef.DR
.dma_src dw lcd_buffer
.dma_cnt dw VBUF_SIZE
.dma_ccr dw DMA_CCR_DIR+DMA_CCR_MINC
.start_delay dw LCD_RESET_DELAY*LCD_SYS_FCLK/4
В софтварной реализации на тех же ногах всё работает. В хардварной не хочет никак.
Re: STM32 новичку в ARM что к чему
Инит, на жирном арме, на асме ?
Ладно, просто сделаю вид, что не видел
Ладно, просто сделаю вид, что не видел
- Andrew Martin
- Вымогатель припоя
- Сообщения: 606
- Зарегистрирован: Вт июн 25, 2013 18:45:07
Re: STM32 новичку в ARM что к чему
На жирном??? Не смешитеSatyr писал(а):Инит, на жирном арме, на асме ?![]()
Ладно, просто сделаю вид, что не видел
Вопрос собственно по SPI, который нужно правильно инициализировать. Задача вроде бы тривиальная, да и режим самый простой что может быть. Должно работать, а не работает.
Если можете, подскажите что не так с CR1 и CR2.
Хорошо бы увидеть чистый сишный код, без всяких SPL.
SPI что-то передаёт, на SCK есть какие-то импульсы. Но почему-то дисплей не реагирует
Re: STM32 новичку в ARM что к чему
STM32F030F4
фрэйм 8 бит. Инит на низкой скорости( SD карта).
фрэйм 8 бит. Инит на низкой скорости( SD карта).
Код: Выделить всё
RCC->AHBENR |=RCC_AHBENR_GPIOAEN ;
GPIOA->MODER &=~
GPIO_MODER_MODER4 |
GPIO_MODER_MODER5 |
GPIO_MODER_MODER6 |
GPIO_MODER_MODER7
;
GPIOA->MODER|=
GPIO_MODER_MODER5_1|
GPIO_MODER_MODER6_1|
GPIO_MODER_MODER7_1 ;
GPIOA->MODER|=(GPIO_MODER_MODER4_0);
GPIOA->OSPEEDR|=
GPIO_OSPEEDER_OSPEEDR4|
GPIO_OSPEEDER_OSPEEDR5|
GPIO_OSPEEDER_OSPEEDR6|
GPIO_OSPEEDER_OSPEEDR7
;
RCC->APB2ENR |=RCC_APB2ENR_SPI1EN;
SPI1->CR1 |=
SPI_CR1_BR_0 | //
SPI_CR1_BR_1 |
SPI_CR1_BR_2 |
SPI_CR1_MSTR |
SPI_CR1_SSI |
SPI_CR1_SSM
;
SPI1->CR2 = 0x700; // 8 bit
SPI1->CR2 |= SPI_CR2_FRXTH;
SPI1->CR1 |= SPI_CR1_SPE;
Тем кто кал пользует лучше не только глаза закрыть, толку 0...Satyr писал(а): Ладно, просто сделаю вид, что не видел
Re: STM32 новичку в ARM что к чему
Чем набор инструкций ортогональней (у идеального сферического RISC в вакууме - ровно 90 градусов -))) ) - тем менее интеллектуальность компилятора влияет на производительность полученного кода (до этапа перестановки кода для оптимизации прохождения конвейера).Andrew Martin писал(а):У Cortex-М0 набор инструкций скромнее, чем у AVR, соответственно пространства для оптимизации у сишных компиляторов немного.
Последние сишные компилеры, во всяком случае ИАР 7.40 уже оптимизируют так, что редко что можно руками улучшить. И уже не чисто за счет кода, а больше корректировка схемы организации алгоритма.
Писать от и до на асме - это не признак профессионализма, а скорее наоборот - неспособность адекватно выбрать инструменты для решения задачи.
- КРАМ
- Друг Кота
- Сообщения: 25247
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: STM32 новичку в ARM что к чему
А если программист может писать и на АСМе и на Си, но затрудняется делать существенные вставки на АСМе?Satyr писал(а): Писать от и до на асме - это не признак профессионализма, а скорее наоборот - неспособность адекватно выбрать инструменты для решения задачи.
Тогда такой программист пишет либо на Си, либо на АСМе - в зависимости от задачи.
Но для СТМ32, учитывая особенности исполнения команд, писать на чистом АСМе, на мой взгляд, действительно идиотизм... АРМ архитектура по сути не совсем архитектура реального времени из-за неопределенного времени исполнения команд и входа в обработчик прерываний. Из-за чего требуется более высокая частота работы, чтобы минимизировать неопределенности исполнения кода и большой набор разнообразной периферии для привязки кода к реальному времени с высокой точностью.
- Andrew Martin
- Вымогатель припоя
- Сообщения: 606
- Зарегистрирован: Вт июн 25, 2013 18:45:07
Re: STM32 новичку в ARM что к чему
Dosikus,
PA6 у вас отведён под MISO, мне же ничего принимать не нужно, т.к. дисплей нем как рыба. Поэтому эта нога у меня используется как обычный пин GPIO (программно переключающий шину D/C дисплея).
PA4 у вас также настраивается на пушпульный выход, у меня этот пин пока вообще не задействован.
В остальном инициализация порта А такая же как и в вашем примере.
Записываемые значения в CR1 и CR2
соответствуют тем, что у вас в примере
Единственный непонятный момент
Но этот бит относится к приёмному буферу, а у меня принимать нечего и event генерировать не нужно, поэтому я и оставил этот бит в нуле.
Бит SPE у меня также поднимается в последнюю очередь.
CPOL=0, CPHA=0 т.к. дисплей защёлкивает данные по возрастающему фронту.
Отправка байта на передачу
в дизасме выглядит правильно (то, что доктор прописал - byte access)
где r0 - данные (только младший байт), r1 - адрес структуры SPI, 12 - смещение DR.
А не работает

PA6 у вас отведён под MISO, мне же ничего принимать не нужно, т.к. дисплей нем как рыба. Поэтому эта нога у меня используется как обычный пин GPIO (программно переключающий шину D/C дисплея).
Код: Выделить всё
.gmask_1 dw GPIO_MODER_MODER7_1+GPIO_MODER_MODER5_1+GPIO_MODER_MODER6_0 ;alternative function on PA5, PA7 and output on PA6
В остальном инициализация порта А такая же как и в вашем примере.
Записываемые значения в CR1 и CR2
Код: Выделить всё
.cr1_mask dw SPI_CR1_MSTR+SPI_CR1_BR_0+SPI_CR1_BR_1+SPI_CR1_BR_2+SPI_CR1_SSM+SPI_CR1_SSI ;PCLK/256, master
.cr2_mask dw SPI_CR2_DS_0+SPI_CR2_DS_1+SPI_CR2_DS_2 ; = 0x700, 8 bit
Код: Выделить всё
SPI1->CR1 |=
SPI_CR1_BR_0 | //
SPI_CR1_BR_1 |
SPI_CR1_BR_2 |
SPI_CR1_MSTR |
SPI_CR1_SSI |
SPI_CR1_SSM
;
SPI1->CR2 = 0x700; // 8 bit
Код: Выделить всё
SPI1->CR2 |= SPI_CR2_FRXTH
Бит SPE у меня также поднимается в последнюю очередь.
CPOL=0, CPHA=0 т.к. дисплей защёлкивает данные по возрастающему фронту.
Отправка байта на передачу
Код: Выделить всё
strb r0,byte [.spi1.DR]
Код: Выделить всё
strb r0,[r1,12]
А не работает


