Jump to content

    

kostyan1

Участник
  • Content Count

    121
  • Joined

  • Last visited

Posts posted by kostyan1


  1. Автоматизация "мартышкиного" труда еще не отменяет самого факт такого труда )))

    К тому же даже в данный момент далеко не все среды (тоже обратите на тему и раздел где мы сидим) поддерживают такие вещи по ВСЕМУ проекту.

    Речь в данном случае не про внешние редакторы, а целиком про среды проектирования (Keil, Eclipse, Crossworks и др).

     

    В Eclipse это Alt + Shift + R с древних времен и да ПО ВСЕМУ проекту...

  2. Нене, теплое с мягким путать не надо, рефакторинг там наиотличнейший и из коробки, в отличии от. А вот к примеру в чужом коде ищешь баг - поставил какой нибудь принтф в одном месте - пошел дальше по стэктрэйсу в глубины изучать код, даже запустил чтото, подебажил... Потом осенило, надо резко вернуться найти где ты своего что то привнес - очень удобно. Буквально из разряда "попробовал раз, ем и сейчас", ванлав.

  3. А это зачем надо? Проблемы с оперативной памятью? :biggrin:

     

    Фича весьма мастхевная! Если конечно не гирлянду писать, а, к примеру, рыться в чужом/своем объемном коде, выискивая где бага посажена.

  4. Откровенно забавляют микрософтофилы со своими платными студиями и платными же кучей плагинов под них. То что было в бесплатном еклипсе едва ли не в первой версии, как то отличнейшие рефакторинг и навигация по коду, того нету из коробки в студии наверное и сейчас. Да госпидя, элементарнейшего - "goto last edit location" нету в 2013 студии, неудивлюсь если нет и в 2015ой! Терпеть ненавижу когда по ходу разработки иногда приходится пересаживаться в студию.

  5. Народ, подскажите, хотелось бы затактировать stm32f4 от кварца 13.1072 МГц. Програмулина System Clock Configuration коэффициенты выдает такие же что и для 13МГц. Интересует: USB и SDIO будет работать на таком кварце? Или решение в корне не профессионально, и так делать нельзя?

  6. Ммм да, всегда удивляло - зачем писать на плюсах для МК?? Ну зачем :rolleyes:

    Да тут скорее не в плюсах дело, а в многострадальных стм библиотеках. ОП взял какой то пример видимо "с забора", а не хотя бы с форума сайта разработчика камня или из рабочих демопроектов, коих на том же сайте разработчика выше крыши. Не работает. Вместо того чтобы читать вдумчиво документацию по регистрам RTC, а их там всего с десяток, и тщательно дебажить (обнимая и нежно лаская каждый бит каждого регистра) полез на форум "найдите мне ошибку". Увы и ах, хорошие библиотеки не делают разработчиков хорошими по умолчанию.

  7. было нарушенно главное правило с++ - при объевлении переменных или структур всё должно быть явно определено.

    Бедные "мужики" что пишут на сях - "они то не знали" этого правила.

  8. А не рассматривали такое применение - инициализачия девайсов их библиотекой, а работа с ними - прямым доступом? Всегда так и делал, и волки...и овцы...ну, понимаете :biggrin:

    Я по сути про тоже.

     

  9. По своему опыту: после аврок пересел на атмел САМ7 и САМ3. После них на стм32ф4. Там где раньше в изделии стояло два САМ7, можно обойтись одним САМ3. Где глючил САМ3 - ставишь стм32ф4. У САМ3 плохие часы - батарейный отсек если питать от лития - зависает, если подавать питание по нажатию кнопки - проц запускается порядка двух секунд. Плюс генерация на внешнем часовом кварце АРХИ слабая - от щупа осцила садится и не восстанавливается без перезапуска! После перевыпуска изделия на стм32ф4 - просто не нарадуюсь. Прямо до сих пор балдею - неужели "с таким щастьем и на свободе". Многие хают преднаписанные либы - а я кайфую. Функции хорошо задокументированы. Входные парамерты понятно названы - можно даташит не читать и все понимать что делает та или иная функция. Куб не юзал - руки не доходят. А то что есть в либах - ошибок пока не встречал. Если нужен какой то быстродействующий код - открываю даташит, смотрю чего надо выставить в конкретном регистре, беру код из либы, убеждаюсь что он все делает как написанно в даташите, убираю лишние проверки и макросы, профит. Возможно мне конечно повезло с ерратой - юзаю очень узкий круг стм32ф4 последних ревизий. Критического для себя не ловил.

  10. Продолжим изыскания, жрет уже 400мкА плата в режиме стоп. Но заметил неприятность. Выключаю sd карту как написанно тут:

     

    void SD_LowLevel_DeInit(void)
    {
     GPIO_InitTypeDef  GPIO_InitStructure;
    
     /*!< Disable SDIO Clock */
     SDIO_ClockCmd(DISABLE);
    
     /*!< Set Power State to OFF */
     SDIO_SetPowerState(SDIO_PowerState_OFF);
    
     /*!< DeInitializes the SDIO peripheral */
     SDIO_DeInit();
    
     /* Disable the SDIO APB2 Clock */
     RCC_APB2PeriphClockCmd(RCC_APB2Periph_SDIO, DISABLE);
    
     GPIO_PinAFConfig(GPIOC, GPIO_PinSource8, GPIO_AF_MCO);
     GPIO_PinAFConfig(GPIOC, GPIO_PinSource9, GPIO_AF_MCO);
     GPIO_PinAFConfig(GPIOC, GPIO_PinSource10, GPIO_AF_MCO);
     GPIO_PinAFConfig(GPIOC, GPIO_PinSource11, GPIO_AF_MCO);
     GPIO_PinAFConfig(GPIOC, GPIO_PinSource12, GPIO_AF_MCO);
     GPIO_PinAFConfig(GPIOD, GPIO_PinSource2, GPIO_AF_MCO);
    
     /* Configure PC.08, PC.09, PC.10, PC.11 pins: D0, D1, D2, D3 pins */
     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11;
     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
     GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
     GPIO_Init(GPIOC, &GPIO_InitStructure);
    
     /* Configure PD.02 CMD line */
     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
     GPIO_Init(GPIOD, &GPIO_InitStructure);
    
     /* Configure PC.12 pin: CLK pin */
     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
     GPIO_Init(GPIOC, &GPIO_InitStructure);
    }

     

    Ухожу в сон, плата потребляет 400мкА. SD карточку вытаскиваю на горячую - потребление платы уменьшается до 280 мкА. Получается карточка потребляет 120 мкА, что совсем не есть айс! Это нормально, или програмно как то можно уменьшить потребление?

  11. Как говорится, сам дурак, переферию не полностью отключал, только тактирование выключал, а надо еще и _CMD( , DISABLE); делать для всего и вся. Дело сдвинулось с мертвой точки. Еще с волтаж регулятором надо побаловаться.

  12. Есть плата на STM32F401VET6, надо сделать режим микропотребления. Впаял одноомные резисторы на 11, 19-21-22, 28, 50, 75, 100 ноги в разрыв питания. Сколько мВ падает на этих резисторах - столько мА собственно потребляет проц. Перед уходом в стоп отрубаю всю переферию, все неиспользуемые ноги - выход ноль, или если есть подтяжки - входом. Потом делаю "PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFI);" Но счастья не приходит :( . На резисторах насчитал что падает около 2.2 мВ в сумме. Больше всего на 19-21-22, один резистор на три ноги, падает примерно 0.8 мВ. И на 11 и 28 ногах по 0.3-0.4 мВ примерно. На вход платы подцепил стрелочный четкий амперметр, он показывает потребление платы те же примерно 2.2 мА. То есть по сути всё что жрет плата - жрет проц, всякие преобразователи напряжений, питающие плату, не шалят. Ноги общупал осцилом. Криминала не вижу. Собственно что делать? Есть плата диско401 - там запускаю ST-шный пример микропотребления в режиме STOP - вуаля, десятки микроампер. Вот даже не знаю что же отрезать начать - все ноги что ли, используемые в проекте, подряд?

  13. Народ, подскажите делал кто нибудь?

     

    Надо передать килобайты байтов по USART в передатчик модема, который имеет апаратные ноги RTC и CTS. На stm32f4, насколько понял из документации, аппаратная поддержка flow контроля есть. Но интересует вопрос с дма. Если выставить передачу данных по USART с использованием дма - передача будет "сама" приостанавливаться, пока ей не разрешат продолжиться через ноги RTC и CTS??? Или "flow апаратика" работает только при побайтовой передаче с полингом флага передачи каждого байта?

  14. Красиво структурированный читаемый код, и "только дурак" - имхо несовместимые понятия. Особенно для проектов, в которых трудятся программистов в количестве больше одного.

  15. Имеется сигнал MISO, который судя по осциллографу (да по и логике) передаёт сигнал 0х51 (к примеру), а принимается 0х50, вот и всё.

     

    сигнал SCK то имеется на второй щуп, и полярность с фазой правильно на осцыле (а не по логике) выглядят?

     

  16. Сделал в итоге через EXTI, как уже ранее предлагалось:

    А я б не парился, и сделал запуск DMA-обмена с SPI в прерывании от EXTI.

    Хотя в качестве разминки для мозгов такие комбинации наверное полезны, да:)

    Способ запуска одного дма через 2 других М2М дма не подходит, ибо помимо установки регистров DMA1_Stream4->NDTR и DMA1_Stream4->CR, необходимо еще устанавливать регистр DMA1->HIFCR.

     

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

  17. Могу посоветовать USBPcap+Wireshark:

    http://desowin.org/usbpcap/

    https://www.wireshark.org/

     

    это только на линухе насколько я понял :(

     

    упд. Неправильно видимо понял - не могу разобраться как запустить собственно. Установил и туплю.

     

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

  18. Однако главным отличием от FreeRTOS является полная статичность объектов - в подавляющем большинстве случаев никакой динамической аллокации для системных объектов не требуется.

     

    В режиме heap_1.c фриртосина вполне себе обеспечивает статичность объектов. Имхо главное отличие чибиоси от прочих ртос - добавление абстракции от железа. Но любая абстракция - это дополнительные накладные расходы.

  19. Спасибо за поиск, проблема таки решилась! Искал вчера весь день рабочий пример под 401й проц и под конец осенило про стм32куб. Сегодня как раз для диско401 создал проектик цдц, как то запустил его - передача идет! Через USBLyzer обнаружил что конечные точки в проекте, полученном через куб, другие : CDC_IN_EP = 0x81, CDC_OUT_EP = 0x01, CDC_CMD_EP = 0x82.

    А у меня были такие: CDC_IN_EP = 0x82, CDC_OUT_EP = 0x01, CDC_CMD_EP = 0x83. Сделал в своем проекте первый вариант, переделал libusb драйвер и заработало!

     

    А то, что точки другие - обнаружил через USBLyzer! Он гадина платный и не ломанный, рега скоро кончится на него. Хоть и оффтоп - посоветуйте народ, пожалуйтса, подобный просмоторщик USB трафика бесплатный?!

     

  20. Народ, кто нибудь поднимал usb cdc именно на STM32F401?

     

    Есть две платы: диско429 и диско401. На диско429 отладил пример из набора STM32_USB-Host-Device_Lib_V2.1.0. Там пример идет для stm32f407, но заработало и для stm32f429 на хайспидовом usb но в режиме фулспида. Со стороны компа - libusb с двумя точками 0x01 и 0x82 для передачи приема данных. Беру ровно тот же код (ну ножки другие только буквально) и пробую запустить его на диско401. Енумерация проходит, работает приём - я принимаю от компа данные (несколько байт), посылаю в ответ посылку (тоже несколько), НО ПРЕРЫВАНИЯ ОТ ПЕРЕДАЧИ НЕ ПРОИСХОДИТ!!! Со стороны компа выхожу из кода чтения данных по таймауту в несколько секунд, а проц долбится в прерывании в коде анализа прерывания DCD_HandleInEP_ISR, где для epnum=2 бит XFRC:Transfer completed interrupt регистра OTG_FS_DIEPINT2 не встает! Хэзэ что думать - в гугле такой проблемы не нашел. HID пример для stm32f401 с эмуляцией мышки работает - так что железо вроде бы рабочее, но мне нужен cdc.

  21. А вроде даже и заработало, но есть нюанс!

     

    В доках написано: "TIM_SlaveMode_External1: Rising edges of the selected trigger (TRGI) clock the counter. " То есть нарастающий фронт ловится, а мне надо спадающий faling edges. Как то можно крутануть в контроллере это дело?

     

    А пардон, сам нашел в доках.

     

    Заработал таймер, теперь на повестке:

     

    4. Первый канал совпадения таймера настраиваем на запись через еще один канал DMA числа 16 для NDTR первого DMA (M2M).

    5. Второй канал совпадения таймера настраиваем на запись через еще один канал DMA управляющего слова (регистр CR) для первого DMA для запуска передачи (M2M).

     

    Вопрос один - собственно КАК? Как от одного таймера настроить два запроса на разные каналы ДМА? Каплю кода бы в пример...