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

Особенности схемотехники и трассировки печатных плат для STM32WB55

Разработка новых устройств на базе беспроводного микроконтроллера STM32WB от STMicroelectronics может быть сделана в короткий срок, если выполнять некоторые важные правила и воспользоваться готовыми конструктивными решениями и рекомендациями инженеров ST.

Читать статью

Только что, 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
                     

Видеокурс Работаем с микроконтроллерами STM32G0. Впервые на русском языке.

В цикле видеокурсов по работе с STM32G0 от компании STMicroelectronics показаны архитектура, периферия (особенности процессорного ядра, режимов пониженного питания, векторов прерываний, DMA и мультиплексора DMA, схемы тактирования и сброса, и.т.д.) и даны практические примеры. Материал дает наглядное понимание того, как начать работу на новых микроконтроллерах STM32G0

Подробнее

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В
      А у вас?
  • Сообщения

    • Похож, он и есть, в одном видео автор говорит что в нём 3 двуполярки две по 21 вольт и одна по 15 воль. В моём 15-0-15 нет. Только 2 по 23-0-23. А вот одинаковый ли вних провод не известно!
    • Black-мур, как же бы было тут без тебя, все шаришся как блуд по порталу, да какушки пишешь. Сгинь нечистая  Твоё мнение к делу не относится, чудище.
    • Если в хорошей компании и с достаточным количеством водки попадаешь на природу, то уже без разницы, чем заниматься: грибы ловить или рыбу собирать..
    • @ГОГА рижский у меня маска без защиты 0D46J и я питания не все подключил, я делал как в инструкции к хпрогу (картинку сверху прикладывал это оттуда) модБ там это контакт снизу, левее rxd. а MotCrack он с хпрогом будет работать ? или для него своё железо нужно ?
    • Вот тут таки да!!! Чтобы найти выход из  какого либо положения, надо сначала в это положение   как то войти!!!! С уважением, Сергей
    • А MOD B  никуда не подключается? !!! Reset не требуется подтянуть к + ? Проверьте осциком. Маска 2D47J проц под защитой.  подключение: 17 - Reset 3 -   MODA  на землю 22 - MODB на землю 20 - RXD 21 - TXD Программировал в составе блока Сможете тут разобраться? Массу отыскать легко, а питание всегда идёт через диод.   Вы программируете выпаянный проц. А все ли питания подходят? прозвоните на печатке 52 и 51 ногу. Если проц не под защитой ( смотрите маску ) я программировал программой MotCrack 6.2 в составе блока, т.е. внутрисхемно. Конектится моментом, при чтении защищенного проца слетает EEPROM - FF в буфере.  
×
×
  • Create New...