Jump to content
Sign in to follow this  
Gelay

Usb Host Hid Для Stm32F4

Recommended Posts

Задача: поднять USB Host на STM32F4Discovery и подключить к нему мышь, затем клавиатуру

Большая просьба, если у кого-нибудь есть рабочие примеры по USB Host HID, поделитесь пожалуйста sm.gif

Опыта у меня в микроконтроллерах совсем не много, в STM еще меньше.

Что было мною сделано:

Запускал из Keil 4.73

Ковырялся в примере USB_Host_Examples/HID из библиотеки STM32_USB-Host-Device_Lib_V2.1.0 - ничего не вышло, моя плата виснет, а деббагер на следующей же команде после функции USBH_Init(.....); вылетает с ошибкой "Cannot access target". Возможно это из-за LCD которого в моей плате нет, но чтобы вычленить его из примера моего уровня не хватает. [было весело, когда я случайно прикоснулся к полоске выводов платки и включил питание USB хоста, туда оказывается кнопка была выведена]

Затем я взял STM32CubeMX и сгенерил код для своего STM32F4Discovery. Проект оказался более понятым, логичным, а код читабельным, но при этом менее качественным, как мне показалось, но все равно ничего не заработало. Понять почему пока не смог, были проблемы с отладкой. Почему то device.is_connected всегда FALSE, а phost->gState всегда HOST_IDLE

Кто знает, подскажите пожалуйста, как поднять этот хост на STM32F4Discovery?

Share this post


Link to post
Share on other sites

Чисто любопытно, допустим подключили девайсы, а что с ними дальше делать будешь, если даже с дебагом не хватает опыта/уровня понять, почему не инициализируется, или убрать кусок кода для отсутствующих модулей? :)

Share this post


Link to post
Share on other sites

С деббагом у меня тоже были проблемы пока добрые люди не подсказали оптимизацию отключить :) Что делать? - сидеть в соответствующих функциях и обрабатывать приходящие данные. А если ты генерил проект в STM32CubeMX то должен знать, что там эти места(где надо сидеть) найти очень просто, они подписаны:

/* USER CODE BEGIN 4 */

/* USER CODE END 4 */

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

И да, переработать код(вычленить из него кусочки) намного сложнее, чем просто посмотреть как он работает. Если не согласен - глянь код примера USB_Host_Examples/HID из библиотеки STM32_USB-Host-Device_Lib_V2.1.0. Если все еще не согласен - вычлени из него все, что касается LCD, чтобы пример остался работоспособным - буду очень признателен :)

Тролить новичков - занятие, конечно, веселое, но как-то не очень.... Тем более модератору...

Share this post


Link to post
Share on other sites

Конденсаторы Panasonic. Часть 4. Полимеры – номенклатура

В заключительной, четвертой статье из цикла «Конденсаторы Panasonic» рассматриваются основные достоинства и особенности использования конденсаторов этого японского производителя на основе полимерной технологии. Главной конструктивной особенностью таких конденсаторов является полимерный материал, используемый в качестве проводящего слоя. Полимер обеспечивает конденсаторам высокую электрическую проводимость и пониженное эквивалентное сопротивление (ESR). Номинальная емкость и ESR отличается в данном случае высокой стабильностью во всем рабочем диапазоне температур. А повышенная емкость при низком ESR идеальна для решения задач шумоподавления и ограничения токовых паразитных импульсов в широком частотном диапазоне.

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

Вышеупомянутая библиотека работоспособна на 100%. Я пользуюсь ей вот уж год с небольшим. На мой взгляд, у неё лишь один недостаток - она работает не со всеми флэшками. Почему - не знаю, не ковырялся.

Если не хотите или можете очищать её от всякого хлама типа дисплея какой-то там ST-шной платы, можете взять библиотеку немца -

http://mikrocontroller.bplaced.net/wordpress/?page_id=1333

Полный его набор - http://mikrocontroller.bplaced.net/wordpress/?page_id=744 Там вроде и мышь с клавиатурой есть, но я их не проверял, не знаю.

USB мышь я сам делал. Но исходники где-то затерялись, а переделывать ещё раз неохота, да и не нужно.

Лазить там отладчиком можно только если хорошо понимаете функционирование хоста вообще, вне зависимости от конкретного проца. Да и STM-овская реализация USB не из простых. У атмела, например, гораздо проще. Так говорят. Я лично подтвердить/опровергнуть не могу.

Я Вам сделать это не смогу, извините. В Донецке идёт война, я и сам сижу на чемоданах ...

Share this post


Link to post
Share on other sites
                     

STM32G0 - средства противодействия угрозам безопасности

Результатом выполнения требований безопасности всегда является усложнение разрабатываемой системы. Особенно чувствительными эти расходы стали теперь, в процессе массового внедрения IoT. Обладая мощным набором инструментов информационной безопасности, микроконтроллеры STM32G0 производства STMicroelectronics, объединив в себе невысокую цену, энергоэффективность и расширенный арсенал встроенных аппаратных инструментов, способны обеспечить полную безопасность разрабатываемого устройства.

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

Полный его набор - http://mikrocontroll...ss/?page_id=744 Там вроде и мышь с клавиатурой есть, но я их не проверял, не знаю.

Спасибо. Как Вы говорили, я нашел там USB HOST HID, скачал-собрал-залил и сразу работает! :) Пример у него намного проще и читабельнее официальных. Оказалось, что большая часть моих мышек не поддерживаются. Клава - через раз. Как ни странно нормально определяются только геймерские мыши A4Tech (на одной из них написано Full Speed). Пока данные нормально не приходят, но буду разбираться.

А так, безумно рад, что оно все таки заработало, хоть и криво :)

аааааа спасибо, спасибо, спасибо, аааааааа :thank_you2::dance2: :dance2: :dance2:

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...
Sign in to follow this  

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

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

      Что может быть не так? Может быть какие-нибудь библиотеки, подключаемые при работе тачскрина и/или дисплея занимают большую часть портов и не позволяют их использовать по усмотрению программиста? Или я еще что-то не понимаю в архитектуре ARM? (Сам я прихожу из AVR-ов)
    • 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В
      А у вас?
×
×
  • Create New...