Перейти к содержанию

verlaty

Members
  • Постов

    47
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные verlaty

  1. Вот вспомнил еще один момент. Первоначальную прошивку делаю через DFU (загружаю свой bootloader, ну и можно начальную прошивку влить) потом уже через свою программку (своеобразная GUI ) заливаю, обновляю и настраиваю устройство.Так что пока что не готов окончательно отказаться от USB.

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

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

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

    Так же есть необходимость подключения кабеля управления затвором фотокамеры (делать снимок). 

    В итоге получилось маленькое устройство (4 х 8 см) полностью облепленное разъемами (подключение питания, 3 разъема моторов, USB разъем, разъем затвора, антенна). Теперь еще надо подключить дальномер и проводной пульт управления.

    Вот поэтому возникло желание использовать USB разъем для подключения периферийных устройств. В конце концов именно для этого создавался USB интерфейс.

  3. Устройство мобильное. К компьютеру будет подключаться только для настройки, обновления ПО.  Есть необходимость подключения к нему различных периферийных устройств, одно из них дальномер. Чтение по UART самое простое, но все таки хочется прощупать возможность подключения через USB (это расширит возможность использования). Как правильно отметил " BARS_ OTG в этом МК нет. Теоретически можно любой пин подключить к пятому пину USB для инициализации подключения. Если вы знакомы с реализацией этого через программу USB-host - ткните носом где это можно почитать.  

  4. Добрый день. Есть проект на STM32F3 (использую библиотеку HAL). Для настройки и управления устройством в нем реализован USB порт CDC (Communication Device Class). Возникла необходимость подключения Дальномера к устройству. Дальномер выдает данные по UART. И в принципе нет проблем считывать данные по этому каналу, но для этого надо выводить дополнительный разъем и это не нравится. Появилось желание использовать USB. Предполагаю использовать в Дальномере UART-USB преобразователь (что то типа FTDI) и подключать его к USB порту STM.
    Вопрос: Как реализовать опрос датчика подключенного к USB порту контроллера.
    Если кто то сталкивался с похожим вопросом направьте на путь истинный. Спасибо.

  5. Спасибо большое за быстрый ответ. Буду читать.

    25 минут назад, mail_robot сказал:

    хотите доходчиво и на русском, прочтите это http://leoniv.livejournal.com/194681.html

    Природа проблемы понятна. Если все правильно понял, то в этой статье рекомендует ставить емкость по входу.

    Есть одно Но... Я измеряю данные с четырех резисторов (на эти пины допустим можно повесить и емкость)  и еще измеряю Vrefint. Это необходимо для вычисления vdd (вот сюда емкость ни как не прицепишь).

    Может быть есть способ программно победить эту беду. Или же подскажите как правильно настроить ADC и DMA, на что обратить внимание?. Измерения происходят  каждые 10мс

  6. 2 минуты назад, mail_robot сказал:

    в даташите есть раздел, мелкими английскими буквочками. Там написано про время выборки для АЦП и минимальное выходное сопротивление источника сигнала. Дальше чутка про емкость устройства выборки-хранения и примерные данные о том с какого времени сопротивление перестает влиять на соседние каналы.

    Если не вдаваться в подробности, то минимальное время должно быть 55,5 циклов и выше в сторону 200 с копейками. Хотите быстрее, придется решать проблему согласования источника и УВХ АЦП

    Более подробно в даташите

    Спасибо, почитаю более внимательно и поищу мелкие буковки. Если не тяжело, озвучьте примерное место этих буквочек.

  7. Добрый день,форумчане.

    Столкнулся с такой проблемой. 

    Использую в проекте STM32F3. Всю периферию настраивал через Cube (работаю с библиотекой HAL). Теперь суть проблемы: снимаю данные ADC с 5 пинов в режиме DMA (normal) регулярный канал (12бит 0-4095). Заметил, что значения канала влияют на значение следующего канала. Например значение 1 канала - 1000, 2 - 3000. При изменении значения первого канала переменным резистором (второй при этом не  изменяю) 1 канал - установил 4000, то и 2 канал тоже меняет значения и становится 3400. ( значения примерные, взял из головы для описания сути проблемы). Не могу понять где корень этого зла и как с ним бороться. Не буду загружать тему кодом, если будет необходимость, буду выкладывать по частям.

  8. Попробую оживить тему. Использую stm32f3 и HAL.

    Написал bootloader для прошивки из под PC, все работает. Но есть пару нюансов.

    При переходе в режим прошивки надо переконнектить устройство к РС потому что пропадает связь с COM портом.

    (точнее при повторной инициализации COM порта)

    Не могу понять как деинициализировать USB CDC в HAL. По идее он должен исчезнуть из списка оборудования в диспетчере устройств и заново появиться.

    Суть вопроса: как деинициализировать USB CDC под HAL, что бы он пропал из списка оборудования?

    Заметил такую вещь. Использую stm32f3discovery. Настроена как USB CDC. При подключении к PC определяется сом порт и нормально с ним работает, но если нажать кнопку ресет, то com порт в системе есть но работать с ним не получается (выдает ошибки) пока не переконнектить usb кабель.

  9. Доброго дня всем.

    Использую в проекте STM32F303CB. Для настройки и прошивки использовал Discovery на STM32F3. Прошивал и через SWD, и через COM порт, и через родной USB. Для готового изделия написал GUI интерфейс на Visual Studio для настройки устройства. Теперь появилось желание через него же обновлять ПО (прошивать STM).

    Теперь суть вопроса: как реализовать обновление ПО через свою программу? (на подобие DfuSeDemo)

    Буду признателен за любую информацию, которая направит на путь истинный. Может какие нить исходники. Может ткните носом в даташит.

    p.s. В программировании не силен, поэтому если можно чуток разжевать информацию. :thank_you2:

  10. Запустил UART в режим DMA circular. Слегка подправил свой код для работы в этом режиме, без постоянных запусков HAL_UART_Receive_DMA . Все проблемы снялись, все работает. Отдельное спасибо mail_robot за активную помощь и участие.

  11. тема изначально назвалась Cubemx + uart_dma. Заметил такую вещь. Один уарт у меня принимает пачки по 8 байт второй по 3. Тот который по 8 практически не зависает, а вот по 3 постоянно. Хотя все реализовано аналогично, на одной плате, на оном камне, но факт на лице.

  12. Точно. Надо сначала очистить буфер.

    void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart)
    {
    E_CODE = HAL_UART_GetError (huart);
    switch (E_CODE)
    {
     case HAL_UART_ERROR_ORE:
      __HAL_UART_FLUSH_DRREGISTER(huart);
      __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_OREF);
      CLEARFL = HAL_UART_GetError (huart);
     break;
    }
    }
    

    Не прокатило

  13. Пробую сбрасывать флаг

    void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart)
    {
    E_CODE = HAL_UART_GetError (huart);
    switch (E_CODE)
    {
    case HAL_UART_ERROR_ORE:
     __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_OREF);
     CLEARFL = HAL_UART_GetError (huart);
    break;
    }
    

    сделал переменную CLEARFL для контроля

    Ну в общем не сбрасывает. Кто сталкивался с этой бедой?

  14. Кажется выловил ошибку.

    huart1.ErrorCode выдает 8.

    а это HAL_UART_ERROR_ORE ((uint32_t)0x00000008) /*!< Overrun error

    ORE — ошибка: переполнение входного буфера — приняты новые данные, а старые ещё не прочитаны

    во всяком случае есть куда капать.

    Буду разбираться. Если есть дельные советы - внимательно слушаю

  15. не пойму зачем это делать именно здесь

    если зайти в текст HAL_DMA_IRQHandler, то там уже есть диспетчер обработки и вызов соответствующего колбэка. Время это не сэкономит. Если только велосипед изобрести....

    Все правильно. Выше уже писал, что хал уже делает все эти проверки. Это уже просто от безысходности всякие варианты ищу. А ты опять дал понять что не зачем туда лезть. Спасибо.

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

  16. Хочу перенести обработку принятых байтов в

    void DMA1_Channel4_IRQHandler(void)
    {
     /* USER CODE BEGIN DMA1_Channel4_IRQn 0 */
     /* USER CODE END DMA1_Channel4_IRQn 0 */
     HAL_DMA_IRQHandler(&hdma_usart1_tx);
     /* USER CODE BEGIN DMA1_Channel4_IRQn 1 */
     /* USER CODE END DMA1_Channel4_IRQn 1 */
    }
    

    Подскажите как правильно сделать обработку по окончанию приема ( не по половине)

×
×
  • Создать...