Jump to content
rmatveev

MBED OS: почему-то не могу заставить многие порты работать

Recommended Posts

Вливаюсь в среду программирования MBED OS с платой STM32F429I-DISC1 и вот что заметил:
1) Почему-то PWM у меня нормально заработал только на ножке PF_6. Я перебрал, конечно, не все порты, которые поддерживают работу с PWM, но другие, которые я попробовал, не заработали.
2) Пытался сконфигурировать некоторые порты в качестве цифрового выходи и тоже фигушки. Нормально заработали только те, что подключены к зеленому и красному светодиодам (PG_13 и PG_14). На некоторых ножках был какой-то неведомый мне меандр, какие-то не захотели переходить в низкоомное состояние.

В качестве базы я использовал код DISCO-F429ZI_LCDTS_demo (это из примеров по этой плате с работой ЖК индикатора и тачскрина).

Что может быть не так? Может быть какие-нибудь библиотеки, подключаемые при работе тачскрина и/или дисплея занимают большую часть портов и не позволяют их использовать по усмотрению программиста? Или я еще что-то не понимаю в архитектуре ARM? (Сам я прихожу из AVR-ов)

Share this post


Link to post
Share on other sites

Для того, чтобы нормально работать с МК надо писать весь код самому, а не тащить левые библиотеки. Качай Keil или Eclipse и программь.

Share this post


Link to post
Share on other sites
9 минут назад, BARS_ сказал:

Для того, чтобы нормально работать с МК надо писать весь код самому, а не тащить левые библиотеки. Качай Keil или Eclipse и программь.

Ничего себе "левые" :)))

MBED OS - это среда разработки ARM Limited. Т.е. прям роднее некуда. И пока мне эта платформа видится во многом удобнее. Вы же не посоветуете какому-нибудь ардуинщику кодить на ассемблере и "не тащить левые библиотеки" :)))

Share this post


Link to post
Share on other sites

Технология Maxim Integrated nanoPower: когда малый IQ имеет преимущества

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

Подробнее

Только что, rmatveev сказал:

MBED OS - это среда разработки ARM Limited

Да хоть от кого угодно? Толку? Библиотеки там именно левые(такие же левые, как и SPL и HAL), и таковыми они останутся, пока не научишься программить без их использования. Подцепил хедер под серию МК и вперед. Нету в ARM ничего такого сложного, где нельзя без библиотек. Простецкая фигня типа портов, spi, uart. таймеров и т.п. настраивается буквально в 5 строк. И заметь, результат на 100% прогнозируемый. А вот что делают твои чудесные библиотеки вообще неизвестно, что и подтверждается созданием данной темы. А лепить ОС на STM - тот еще маразм.

 

Только что, rmatveev сказал:

какому-нибудь ардуинщику

Ардуинщики и программисты - разные люди.

Share this post


Link to post
Share on other sites
6 минут назад, BARS_ сказал:

Ардуинщики и программисты - разные люди.

Эт точно )))

Ладно, я погляжу другие среды. У MBED OS в числе прочего есть еще важный недостаток - полная облачность. Нет интернета = нет кода. Локально там вообще ничего не работает. В наше время это, конечно, не очень большая проблема, но меня это немного напрягало.

Share this post


Link to post
Share on other sites
                     

Платы Nucleo на базе STM32G0: чего можно добиться с помощью связки Nucleo и Arduino

Платы Nucleo и платы расширения X-NUCLEO от STMicroelectronics можно интегрировать в платформу Arduino с помощью библиотеки STM32duino. Связка плат Nucleo и платформы Arduino, и наличие готовых библиотек – представляет удобный инструмент для создания прототипов и конечных приложений в условиях ограниченного времени. Статья содержит пошаговые инструкции по установке библиотек и запуску примеров для Nucleo.

Подробнее...

1 час назад, rmatveev сказал:

У MBED OS в числе прочего есть еще важный недостаток - полная облачность

Всё прекрасно работает офф-лайн, нет проблем. Устанавливаете MBED CLI и вперёд - кодим без интернета.

Конечно, для помигать светодиодом ОС не нужна. Но не все же только светодиодом мигают.

Я, вот, только закончил проект под MBED 5. Процессор Arm Cortex-M4, 6 штук АЦП, GPS модуль и SD-карточка.

MBED - многопоточная ОС. У меня в программе фигачат 3 потока, в одном опрашиваю все АЦП 25 раз в секунду, в другом - раз в секунду читаю данные с GPS, а в третьем потоке сохраняю данные на SD карточку в фотмате FAT32 каждые 2 минуты. При этом пару раз в секунду на компьютер оператора через ком-порт выдаётся текущая телеметрия для тестирования системы. 

Все работает круглосуточно, пока, вроде, не сбоит, тьфу-тьфу-тьфу.

Написание кода заняло пару недель и с десяток страниц кода. 

1 час назад, BARS_ сказал:

. Нету в ARM ничего такого сложного, где нельзя без библиотек

Ну, уж, не знаю, сколько бы у меня заняло времени всё написать без ОС и без библиотеки для FAT32.

 

Share this post


Link to post
Share on other sites
17 минут назад, Yurkin2015 сказал:

MBED - многопоточная ОС

Это на однопоточном то МК

 

17 минут назад, Yurkin2015 сказал:

У меня в программе фигачат 3 потока, в одном опрашиваю все АЦП 25 раз в секунду, в другом - раз в секунду читаю данные с GPS, а в третьем потоке сохраняю данные на SD карточку в фотмате FAT32 каждые 2 минуты.

Что-то я не пойму, нафига ОС для таких элементарных задач?

 

18 минут назад, Yurkin2015 сказал:

Написание кода заняло пару недель и с десяток страниц кода. 

Ровно то же самое пишется максимум за неделю (это с отладкой) и без убогой ОС.

 

19 минут назад, Yurkin2015 сказал:

сколько бы у меня заняло времени всё написать без ОС

Минимум в 2 раза меньше времени. У меня есть проект на 205 камне. Раз в секунду читается GPS с парсингом NMEA, идет общение с ПЛИС по SPI, временами очень активное, т.е. данные могут сыпаться непрерывно, по второму SPI идет работа с микрухой Ethernet, на которой может быть одновременно открыто до 5 сокетов, плюс ко всему идет отображение данных на TFT дисплее с периодом обновления 100мс (при условии наличия новых данных для отображения) и опрос устройства по I2C. И никакой ОС там нет и близко.

Share this post


Link to post
Share on other sites

не, это был вопрос ТСу

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

Share this post


Link to post
Share on other sites
2 часа назад, mail_robot сказал:

а чем вам FreeRTOS не вкатила?

Ничем :)

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

Share this post


Link to post
Share on other sites
8 hours ago, rmatveev said:

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

Прежде чем писать код посмотрите схему. На плате есть внешние устройства, которые подключены к контроллеру. Если вы сконфигурируете ножку как выход, а к ней подключен выход внешнего устройства, то можете спалить.

В Cube хорошо видно какие ноги свободные.

Disc429.thumb.jpg.6f9747834727c37ae4eeb8d3be200031.jpg

Share this post


Link to post
Share on other sites

Join the conversation

You are posting as a guest. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Similar Content

    • By German Churilin
      Добрый день всем! Столкнулся с проблемой, над решением которой бьюсь уже месяц - суть в том, что при пересылке аудио данных с контроллера в внешний цап на выходе цапа звучит белый шум(именно когда летят данные). Уже перепробовал разные конфигурации и параметры, да даже другой цап ставил - всё равно та же самая проблема. Может кто сталкивался, или у кого есть идеи почему так происходит?
      Контроллер stm32f407ve китайский, но вроде как рабочий, цап - pcm1606, вытащенный из двд-плеера.

      код инициализации i2s
      RCC_PLLI2SCmd(DISABLE); RCC_I2SCLKConfig(RCC_I2S2CLKSource_PLLI2S); RCC_PLLI2SConfig(200,5); RCC_PLLI2SCmd(ENABLE); while(RCC_GetFlagStatus(RCC_FLAG_PLLI2SRDY) == RESET){}; //WS - word clock output GPIO_PinAFConfig(GPIOB, GPIO_PinSource9, GPIO_AF_SPI2); GPIO_StructInit(&gpioInit); gpioInit.GPIO_Pin = GPIO_Pin_9; gpioInit.GPIO_Mode = GPIO_Mode_AF; gpioInit.GPIO_OType = GPIO_OType_PP; gpioInit.GPIO_PuPd = GPIO_PuPd_NOPULL; gpioInit.GPIO_Speed = GPIO_Speed_100MHz; GPIO_Init(GPIOB, &gpioInit); //BCLK - shift clock output GPIO_PinAFConfig(GPIOB, GPIO_PinSource10, GPIO_AF_SPI2); gpioInit.GPIO_Pin = GPIO_Pin_10; GPIO_Init(GPIOB, &gpioInit); //SD - serial audio data GPIO_PinAFConfig(GPIOC, GPIO_PinSource3, GPIO_AF_SPI2); gpioInit.GPIO_Pin = GPIO_Pin_3; GPIO_Init(GPIOC, &gpioInit); //MCO - master clock output GPIO_PinAFConfig(GPIOC, GPIO_PinSource6, GPIO_AF_SPI2); gpioInit.GPIO_Pin = GPIO_Pin_6; GPIO_Init(GPIOC, &gpioInit); I2S_StructInit(&i2sInit); i2sInit.I2S_CPOL = I2S_CPOL_Low; i2sInit.I2S_Mode = I2S_Mode_MasterTx; i2sInit.I2S_MCLKOutput = I2S_MCLKOutput_Enable; i2sInit.I2S_Standard = I2S_Standard_Phillips; i2sInit.I2S_AudioFreq = I2S_AudioFreq_48k; i2sInit.I2S_DataFormat = I2S_DataFormat_24b; I2S_Init(SPI2, &i2sInit); SPI2->I2SPR = (uint16_t)((uint16_t)512 | (uint16_t)12 | (uint16_t)1); //for 48k Fs SPI_I2S_DMACmd(SPI2, SPI_I2S_DMAReq_Tx, ENABLE); I2S_Cmd(SPI2, ENABLE);  
      код инициализации dma
      DMA_InitTypeDef dmaInit; NVIC_InitTypeDef nvicInit; DMA_DeInit(DMA1_Stream4); DMA_Cmd(DMA1_Stream4, DISABLE); while(DMA_GetCmdStatus(DMA1_Stream4) == ENABLE){}; __ISB(); RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA1, ENABLE); //To dmaInit.DMA_PeripheralBaseAddr = (uint32_t) &(SPI2->DR); //From dmaInit.DMA_Memory0BaseAddr = (uint32_t)&AUDIO_SAMPLE; dmaInit.DMA_BufferSize = 20480; dmaInit.DMA_Channel = DMA_Channel_0; dmaInit.DMA_DIR = DMA_DIR_MemoryToPeripheral; dmaInit.DMA_PeripheralInc = DMA_PeripheralInc_Disable; dmaInit.DMA_MemoryInc = DMA_MemoryInc_Enable; dmaInit.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; dmaInit.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; dmaInit.DMA_Mode = DMA_Mode_Circular; dmaInit.DMA_Priority = DMA_Priority_High; dmaInit.DMA_FIFOMode = DMA_FIFOMode_Enable; dmaInit.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull; dmaInit.DMA_MemoryBurst = DMA_MemoryBurst_Single; dmaInit.DMA_PeripheralBurst = DMA_PeripheralBurst_Single; while(DMA_GetCmdStatus(DMA1_Stream4) == ENABLE); DMA_Init(DMA1_Stream4, &dmaInit); DMA_ITConfig(DMA1_Stream4, DMA_IT_TC | DMA_IT_HT, ENABLE); //configure interrupt nvicInit.NVIC_IRQChannel = DMA1_Stream4_IRQn; nvicInit.NVIC_IRQChannelPreemptionPriority = 0; nvicInit.NVIC_IRQChannelSubPriority = 0; nvicInit.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&nvicInit); DMA_Cmd(DMA1_Stream4, ENABLE); while(DMA_GetCmdStatus(DMA1_Stream4) != ENABLE){}; AUDIO_SAMPLE просто wav скопированный через hex редактор и живущий в памяти контроллера, крутиться по кругу. Вроде как, в теории всё должно работать(снизу скрин из pulseview - снято логическим анализатором), к сожалению осциллограф пока что не приобрёл, так что проверить правильность частот не представляется возможнымб но всё же всё вроде как красиво.
      Формат i2s на контроллере совпадает с форматом на цапе - первый бит передаётся через 1 тик sck после смены ws
       
      П.С. подозреваю сразу вопросы про MSB/LSB - wav файл сам по себе little-endian, собственно как и контроллер, то есть тут не должно быть проблем, а i2s стандарт передаёт MSB первым, соответственно если у меня в памяти записано 0x64, 0x61, 0x61, 0x66, 0x02, 0x00, 0x85... то, судя по скрину всё передаётся правильно? или я что то не понимаю в этом всём? Но не в этом суть - в один момент тоже подумал что порядок не тот, но, к сожалению, попытки свапать байты местами(и побайтово, и по словам) не дали ни какого результата

    • By rmatveev
      Друзья, мне бы хотелось как-то начать "метить" прошивки, которые я заливаю в устройства на этапе разработки.
      Когда-то давно, когда я еще кодил для МК51 и PIC я использовал несколько ячеек в начале памяти программ, куда автоматом записывал закодированную дату. Но это я делал с помощью своей утилиты - при компиляции я запускал свой батник, который во-первых формировал небольшой ассемблерный файлик с кодом даты, он уже линковался к основному коду и получалось у меня что-то типа такого:
                  ORG          0000h
                  goto         Begin
                  include      'date.src'
                  retw         __day
                  retw         __month
                  retw         __year
                  ORG          0004h
                  goto         INTERRUPT
      Файл date.src формировался моим батником, там присваивались значения макросам __day, __month и __year.
      Это ассемблер для PicMicro. Я использовал тот факт, что у него между началом пользовательского кода и единственным вектором прерывания было 4 байта, в первый байт я вставлял команду перехода на начало, а в три оставшихся байта - дату. Она была хорошо видна при считывании кода из чипа. Было очень удобно потом идентифицировать прошивку, т.к. исходники я тоже сохранял по датам. В общем, такая была доморощенная система контроля версий. Было это году в 2000-м.
      Сейчас я пользуюсь Atollic TrueStudio и MBED и тоже задумался о том, как мне помечать прошивки. Может быть есть какие-то штатные способы? Или может по старинке найти в коде место, куда зашивать дату что бы ее легко было видно при считывании прошивки в ST Link Utility?
      Спасибо заранее за любые мысли.
    • Guest Александр
      By Guest Александр
      Добрый день
      Проблема с оценочной платой STM32F4-DISCOVERY в части работы USART
      суть вопроса
      по USART шлется и принимается блоки данных по 3 байта (в принципе сколько угодно) при этом если подключен USB разъем ST-LINKа то все работает должным образом (данные снуют туда сюда без проблем), но при отключении USB ST-LINKа данные из платы STM32F4-DISCOVERY идут а вот принимать данные плата отказывается (естественно подаю внешнее питание +5 вольт на одноименный контакт). Если кто сталкивался с подобной проблемой прошу хотя бы направить в сторону железа или софта.
      На плате STM32F4-DISCOVERY убраны перемычки SB11(T_NRST) и SB12(T_SWO) а так же отпаян резистор R68 (MCO). Плата при этом прошивается без проблем, и стартует при внешнем питании(не от USB ST-LINKа) тоже без каких то заморочек.
      код прикладывать на данный момент не вижу смысла там все просто, при чем при подключении USB ST-LINKа программа работает.
      Проект пишется на IARe, конфигурация формируется в STM32Cube.
      Заранее спасибо за ответ
    • By Wishmaster
      Здравствуйте, подскажите, как можно получить 3.3В для питания МК STM32F4 от Li-Ion аккумулятора? Использовать какой-нибудь понижающий преобразователь? Если да, то какой? 
    • By dron-r
      Добрый вечер.
      Друзья, кто из вас использует МК STM32F407xxx, поделитесь информацией по поводу внешнего кварца на вашей плате. Что за кварц, фирма, а также используемые конденсаторы и Rext?
      Дело в том, что облажался я с выбором кварца. Не заводится он. Drive level превосходит указанный в инструкции к кристаллу... (расчеты проводились согласно заметки AN2867 от ST).
      В общем чтобы не мучится с поиском нужного кристалла, хочу поинтересоваться что у вас?
      Заранее спасибо.
      Моя конфигурация:
      Кристалл Geyer KX-K (part no. 12.87823) 8МГц.
      Конденсаторы 22пФ
      Резистор Rext = 0 Ом
      Расположение кристалла идентично расположению на плате Discovery. Расстояние от края до ножек - примерно 6 мм.
      Также интересует напряжение RMS между выводами кварца.
      У меня - 1.94В
      У Discovery - 1.65В
      А у вас?
  • Сообщения

    • @Zvik А резисторы в базы 556/546 какие ставил? Если напрямую, то эти повторители после 20 секунд нагрева вообще замыкают выходы 2092.
    • Вы подаёте надежды. Если так пойдёт и дальше, то совсем скоро сможете обнаружить излучение микроволновки, без анализатора спектра и с помощью ещё более медленных диодов. Как это делает, без пустых базаров, всё радиолюбительское население земного шара. И даже сможете оценить эффективность дополнительного экрана, не опасаясь 50гц наводок на индикатор поля. Данные по времени восстановления применённого диода можно прочитать в этом даташите. У вас получится, вы уже умеете это делать. https://eandc.ru/pdf/diod/d18.pdf  
    • да за ради бога =  величина обраная заполнению...
    • https://ru.aliexpress.com/item/4000123164469.html?spm=a2g0o.detail.1000014.13.6f572621vMdgVT&gps-id=pcDetailBottomMoreOtherSeller&scm=1007.13338.146107.0&scm_id=1007.13338.146107.0&scm-url=1007.13338.146107.0&pvid=7f856afa-cc15-486a-9d7d-2188158c105e на плате 3 независимых реле
    • Не равны. Обратны. Зеркальны, если угодно. Имея Х, единицу можно получить, только умножив этот самый Х на 1/Х. Т.е., на обратную функцию. А не на равную. Х, помноженный на Х никогда не даст единицу. Ну, ведь, только что говорили о полезности ясного и недвусмысленного выражения мысли! Действительно, где же? Скорее всего, где то, на плоскости Ia vs Va. На той самой, где ВАХ рисуют. Выбрать рабочую точку двух каскадов, для использования метода параметрической компенсации, графоаналитическим способом невозможно. Либо, бесконечно трудоёмко. Некоторое облегчение дают симуляторы. Но расчёт, на основе приближённых моделей, даёт ещё более приближённый результат. Самый действенный способ я уже описывал. Собираете макет, максимально близкий к будущему усилителю, и на нём оттачиваете режимы, схемотехнику и комбинации ламп. Не забывая измерять результат. Это быстрее и надёжнее любого другого пути. Упаси Боже! Вовсе не утрирую! Просто, когда я слышу про "зажатость", воздушность", "ватность", "хрустальность" и прочие псевдо термины, я начинаю себя чувствовать, как народ в сказке "Новое платье короля". Или, как в "ДМБ" - Видишь суслика?  Нет.  Вот и я не вижу. А он есть. Когда я делаю усилитель, и человек говорит, что с ним  (усилителем) что о не так, мне очень хочется исправить это "не так", чтобы клиент был доволен. Но, простите великодушно - убей, не знаю, как лечить "зажатость". Вы знаете? Может, подскажете? И "зажатомер", для меня, не шутка, а острая необходимость. Ибо, не имея возможности что то измерить, я, даже, не понимаю, в ту ли сторону я кручу. А крутить непонятно чего, непонятно куда, заглядывая в глаза клиенту - Ну как? Разжимается? - это, извините, шаманство. Поиск философского камня. Свято верю, что за терминами типа "зажатость" скрывается обычная техническая безграмотность. Ну, примерно, как  - Дай мне ту фигню, я подкручу эту штуку, а то эта дрянь болтается. Только, чуть чуть облагороженная. Ну, мы же эстеты, не так ли? Есть моменты, когда эмоции уместны и востребованы. Скажем, сделать комплимент девушке по поводу осиной талии. Но, если я портной, мне бесполезно и непонятно знать, что она (талия) осиная. Мне надо знать точно, сколько там сантиметров. Вот тут "зажатометр" и пригодится. Не имея возможности измерять, нельзя построить ничего путного. Или, коллективный бред. Встречал массу опубликованных схем,  уже эскизный расчёт которых показывает полное несоответствие заявляемых параметров данным схемы и моточных изделий. И потом, коллективный опыт - это не истина в последней инстанции. Даже, не единое мнение. Их десятки, по любому вопросу. Не верите? Почитайте подборку  высказываний только одного Василича, только по одному вопросу. А прикиньте, сколько таких василичей в интернете? Как выбрать правильное? Может, для этого надо иметь собственные знания? А если есть собственные знания, да ещё проверенные собственной практикой - так ли нужен коллективный опыт?
    • Сборка корпуса и подсчет Sохлаж. Sрад=2×960 кв.см.=1920кв.см.,вес радиаторов с 4 мостами=3кг. Sкрышки верхи низ 2×520кв.см.=1040кв.см.,толщ 3мм, вес крышек 0,7кг. Sперед.панел 250кв.см.,толщ 8мм.,вес 1кг. Sзад.панел 175кв.см.,толщ.5мм.,вес 0,5кг. Sног 4×20кв.см.=80кв.см.,вес 0.4кг. Общая Sохл.корпуса состовляет 3465 кв.см., вес=5,6кг. Теперь посчитаем какую мощность выдержит корпус: 3465кв.см.÷100=34,6Watt=2×17Watt при температуре нагрева корпуса 70град. А вот чтобы качать 2×30Watt потребуется Sохл=6000кв.см. и вес 10кг.алюма при t=70град. нагрева корпуса. Это нужно учитывать при постройке УНЧ в классе А  
×
×
  • Create New...