dron-r

Stm32F4 И Usb - Схема

7 сообщений в этой теме

dron-r    13

Добрый день.

Есть несколько вопросов по созданию USB соединения ПК и STM32F4. Использоваться будет разъем microUSB. Соединение нужно только для заливки прошивки и считывания данных из памяти (внешней), следовательно плата должна определяться к периферийное устройство (режим хоста не требуется).

1. Куда нужно девать ногу ID на разъеме? Оставить не соединенной ни с чем или припаять на землю? В схеме с STM32F4DISCOVERY в STLink она припаяна к земле. В схеме с самим МК она идет в контроллер. А где-то вообще читал, что ее можно оставить висящей.

2. Нужно ли ставить внешний кварцевый резонатор? На странице 185 в параграфе "USB OTG full speed (FS) interface solutions" на рисунке он вроде как указан (выводы OSC_IN и OSC_OUT), но так и не ясно, нужно ли и на какую частоту. В Дискореви стоит на 8MГц, хотя где проскакивала цифра в 48МГц.

Спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
optima    218

8мГц внешний кварцевый резонатор, а настройки умножителей и делителей вы должны настроить таким образом, что бы модуль usb был затактирован частотой 48 мГц.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Вуйко    18

Припаять ногу на землю. В контроллер ее стоит заводить только если есть необходимость использовать USB в OTG режиме.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
ukr823f    4

Хотел бы спросить, по USB. Делал USB на процессоре STM32F103C8T6, проекты тестовые делал и с помощью Coocox на SPL и с помощью CubeMX, пробовал сделать USB CDC устройство...Так вот как бы я не изощрялся, при подключении к компу - в винде выскакивает unknow device и всё. Драйвера для CDC устанволены. линии D+ и D- идут на ноги проца через резисторы 30Ом, линия D+ подтянута к 3.3В резистором 1.5К. Кварц - 8МГц.... Что может быть, уже всё перепроверил но толку ноль. Stm32F4 Discovery при такой же попытке сразу же выдёт Com Port STM electronics.....

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Вуйко    18

А драйвера точно правильно установлены? Там сначала ставятся сами установщики драйверов, а уже потом нужно выбрать из них необходимые драйвера и установить.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
ukr823f    4

А драйвера точно правильно установлены? Там сначала ставятся сами установщики драйверов, а уже потом нужно выбрать из них необходимые драйвера и установить.

Да, распаковал, а потом уже установил. Дело в том что есть disciveryF4, так вот там сразу после конфигурации проекта в кубе устройство опрежеляется в компе как COM порт, а вот 103 почему то сходит с ума... Пробовал уже и с питанием от USB, и с питанием от внешнего источника напряжения запитывать устройство....

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ваша публикация должна быть проверена модератором

Гость
Вы не авторизованы. Если у вас есть аккаунт, пожалуйста, войдите.
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Восстановить форматирование

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Загрузка...

  • Похожие публикации

    • Автор: DmitryDDDD
      Здравствуйте, имеется задача передачи данных от stm32 на ПК и от ПК в stm по UART. Имеется stm32f411e-disco, созданная программа на пк в Qt creator. UART передатчик - CH340. Программа для stm - Keil, настройка в cubeMX.
      Основные выдержки из кода Qt (mainwindow.cpp):
       
      C++ (Qt)Выделить код
      1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
      // Настройка UART      serial = new QSerialPort(this);      serial->setPortName("com4");      serial->setBaudRate(QSerialPort::Baud115200);      serial->setDataBits(QSerialPort::Data8);      serial->setParity(QSerialPort::NoParity);      serial->setStopBits(QSerialPort::OneStop);      serial->setFlowControl(QSerialPort::NoFlowControl);      serial->open(QIODevice::ReadWrite);      /*serial->write("ok*");  */                                                          connect(serial, SIGNAL(readyRead()), this, SLOT(serialReceived()));   // Запись принятых даннх в текстовое окно void MainWindow::serialReceived() {     QByteArray ba;     ba=serial->readAll();     ui->label->setText(ba);     qDebug()<<ba; }   // Отправка "1" и "2" в зависимости от нажатой кнопки void MainWindow::on_pushButton_clicked() {   serial->write("1"); }   void MainWindow::on_pushButton_2_clicked() {   serial->write("2"); }
      Настроен UART на прием и передачу. При нажатии какой-либо кнопки по UART передаётся 1 или 2ка. Так же принятая информация отображается в текстовом окне label. При замыкании RX и TX у CH340 отправленная 1 или 2 тут же принимаются программой.

      Программный код для stm создан в CubeMX. Там подключено два UART, один на приём, другой на передачу (можно настроить один для работы в 2 направления).
      Основные выдержки из кода Keil (main.c):
      //Настройка UART
      serial = new QSerialPort(this);
      serial->setPortName("com4");
      serial->setBaudRate(QSerialPort::Baud115200);
      serial->setDataBits(QSerialPort::Data8);
      serial->setParity(QSerialPort::NoParity);
      serial->setStopBits(QSerialPort::OneStop);
      serial->setFlowControl(QSerialPort::NoFlowControl);
      serial->open(QIODevice::ReadWrite);
      /* serial->write("ok*"); */ // Transmiting "ок" to COM Port
      connect(serial, SIGNAL(readyRead()), this, SLOT(serialReceived()));
       
      // Отображение принятых данных в текстовом меню label
      void MainWindow::serialReceived()
      {
      QByteArray ba;
      ba=serial->readAll();
      ui->label->setText(ba);
      qDebug()<<ba;
      }
       
      // Отправка 1 или 2 в зависимости от нажатой кнопки
      void MainWindow::on_pushButton_clicked()
      {
      serial->write("1");
      }
       
      void MainWindow::on_pushButton_2_clicked()
      {
      serial->write("2");
      }
       
      Выдержки из кода в Keil (main.c):
       
      // Настройка UART
      static void MX_USART1_UART_Init(void)
      {
        huart1.Instance = USART1;
        huart1.Init.BaudRate = 115200;
        huart1.Init.WordLength = UART_WORDLENGTH_8B;
        huart1.Init.StopBits = UART_STOPBITS_1;
        huart1.Init.Parity = UART_PARITY_NONE;
        huart1.Init.Mode = UART_MODE_TX_RX;
        huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
        huart1.Init.OverSampling = UART_OVERSAMPLING_16;
        if (HAL_UART_Init(&huart1) != HAL_OK)
        {
          _Error_Handler(__FILE__, __LINE__);
        }
      }
      // 2 массива для принятия и отправки данных
        uint8_t strTX[1];
          uint8_t strRX[1];
      // Попытка сделать что-то адекватное
              int strTX = 1;
      while(1) {        
              HAL_UART_Transmit_IT(&huart2, (uint8_t*) strTX, 1);
            HAL_UART_Receive_IT(&huart2, (uint8_t*) strTX, 1);
      Код в keil явно кривой, в Qt вроде всё работает. Получается передать из stm в Qt, но из Qt в stm нет. 
      Нужно получить следующее: нажимаем в Qt одну из двух кнопок, отправляется в stm либо 1, либо 2 в зависимости от выбранной кнопки. Stm принимает, обрабатывает, если 1, то загорается один светодиод, если 2, то другой. Дальше stm отправляет обратно в Qt информацию о том, какой светодиод загорелся. 

      P.S: довольно далек от программирования, но стараюсь разобраться. Буду благодарен любой помощти, некоторые скриншоты прилагаю.



    • Автор: saratan
      Доброго времени суток!
      Подскажите пожалуйста, в какую сторону копать? Хочу для Raspberry Pi сделать переключатель USB, с помощью которого можно было бы в определённый момент подключать выбранный девайс.
      Если более подробно, то: хочу подключить к расбери два жёстких диска используя только один usb разъём. Преследую 2 цели: 1. Энергосбережение; 2. В дальнейшем хочу подключить более 4х накопителей.
      В начале думал использовать транзисторы для переключения, но на сколько я понимаю, то ток с базы течёт на эмитор и это искажает передаваемые данные. А использование реле делает устройство громоздким и я не нашёл подходящего с четырьмя входами и выходами.
      Подскажите как лучше такое реализовать?
      Как вариант можно попробовать просто отключать транзистором соединение питания, но на всякий случай я бы хотел отключать все 4 контакта.
    • Автор: rmatveev
      Вливаюсь в среду программирования MBED OS с платой STM32F429I-DISC1 и вот что заметил:
      1) Почему-то PWM у меня нормально заработал только на ножке PF_6. Я перебрал, конечно, не все порты, которые поддерживают работу с PWM, но другие, которые я попробовал, не заработали.
      2) Пытался сконфигурировать некоторые порты в качестве цифрового выходи и тоже фигушки. Нормально заработали только те, что подключены к зеленому и красному светодиодам (PG_13 и PG_14). На некоторых ножках был какой-то неведомый мне меандр, какие-то не захотели переходить в низкоомное состояние.

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

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

      Делаю часы на газоразрядных индикаторах, которые питаются от 180в. Сделал плату, которая получает на вход ШИМ 30кГц и 5в, а выдает 180в.

      На Arduino сгенерировать 30кГц получалось, однако сейчас необходимо это сделать на stm32. Есть знатоки?)

      Спасибо!
  • Сообщения

    • Так я не парюсь. Изначально , как писал, просто хотел уточнить у мастеров про падения "стабилизированного ИП". И только, без лишних придирок.  
    • Вы вообще понимаете, что пишите? Запись: #define SEG_A (1<<7) равна записи #define SEG_A 0х80 С остальными аналогично. С такой записью все прекрасно меняется в дефайнах и нету бардака в виде бесконечных строк кода. И строка PORTB |= SEG_A|SEG_B|SEG_G; прекрасно будет работать.
    • да притом , в дифайнах описываются номера выводов  #define SEG_A (1<<7) // #define SEG_B (1<<6) // LED #define SEG_C (1<<5) // A #define SEG_D (1<<4) // F B #define SEG_E (1<<3) // G #define SEG_F (1<<2) // E C #define SEG_G (1<<1) // D H #define SEG_H (1<<0) в коде PORTB |= SEG_A|SEG_B|SEG_G; //или PORTB |= SEG_A+SEG_B+SEG_G; а не магические числа вида 0x73 , 0xC4 и тд и в случае переназначения выводов меняется восемь строк дефайнов , а не ползается по всему коду в поиске/замене магических чисел
    • как звучат простые усилки на 3 ватта мне понравилось, не ожидал от них такого звука, мощные не слушал. кто слушал хороший УСь класса А - лампы рулят качественно сделанный  TDA7294  и рядом не стоит с ламповой техникой, а если еще и хорошие дины, то сказка  
    • Это програмный глюк. У меня нечто подобное было с Дегеном и так же после длительного лежания без батарей. В памяти была сохранена частота попадавшая в предел "замолкшего диапазона". Только когда вызвал её менюшкой диапазон заиграл
    • По моему мнению - кто слушал хороший УСь класса А, тот ничего другого слушать не соглашается.