Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
1 / 1 / 0
Регистрация: 14.08.2017
Сообщений: 61

stm32f103, Keil, USB, CDC

08.12.2023, 09:32. Показов 3312. Ответов 32

Студворк — интернет-сервис помощи студентам
Всем доброго времени суток, товарищи!
Подсобите разобраться в проекте, пожалуйста.
Я использую Keil V5.38.0.0 с 6-тым компилятором.

Нашёл на просторах проект:
https://github.com/saewave/STM32F103-USB-CDC-CMSIS

Хочу его прикрутить в свой Keil, но мне постоянно выдаёт: "Сбой запроса дескриптора устройства".

Сначала разбирался с ошибками в коде, потому что проект рассчитан, как я понял, на 5-тый компилятор. Проблемы были с атрибутом "at" и "__weak".
"__weak" я поправил через #define, записав его в usblib.h, опираясь сюда:
https://www.programmersought.c... 628304747/

Далее я начал разбираться с атрибутом "at". Так же, я поправил код с:
C
1
2
volatile USBLIB_EPBuf EPBufTable[EPCOUNT] __attribute__((at(USB_PBUFFER)));
volatile uint32_t     USBEP[EPCOUNT] __attribute__((at(USB_BASE)));
На:
C
1
2
volatile USBLIB_EPBuf EPBufTable[EPCOUNT] __attribute__((section("USB_PBUFFER")));  //0x40006000
volatile uint32_t     USBEP[EPCOUNT] __attribute__((section("USB_BASE")));                  //0x40005C00
В файле usblib.c.
Мне непонятно, работает ли это или нет.

Пытаясь написать вот так:
C
1
2
volatile USBLIB_EPBuf EPBufTable[EPCOUNT] __attribute__((section(".ARM.__at_0x40006000")));
volatile uint32_t     USBEP[EPCOUNT] __attribute__((section(".ARM.__at_0x40005C00")));
при компиляции выдаёт то, что на первом изображении.

Числа, которые вписаны в IRAM1 я вписал из проекта с гитхаба(второе изображение).

Отсюда:
https://www.mcu.by/%D1%81%D1%8... C-usb-cdc/

попробовал привязать дескриптор, но всё равно не вышло.

Подскажите, что делаю не так?

Архив с проектом приложил.
Миниатюры
stm32f103, Keil, USB, CDC   stm32f103, Keil, USB, CDC  
Вложения
Тип файла: rar tst.rar (604.8 Кб, 0 просмотров)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.12.2023, 09:32
Ответы с готовыми решениями:

STM32F103 CubeMX USB composite CDC + CDC (2xCDC)
Добрый день! Задача сделать на STM32F103 два виртуальных СОМ-порта. Сгенерировал проект через CubeMX, вставил в код эхо, все...

Keil, STM32F103
Здравствуйте, подскажите пожалуйста, как мне настроить Keil? Я скачал uVision V5.38.0.0, скачал Keil.STM32F1xx_DFP.2.4.1.pack и...

Fast Interrupts keil stm32f103
Здравствуйте. Подскажите, как правильно объявить в кейле внешние прерывания как "быстрые" (fast interrupts) ? Желательно на...

32
1 / 1 / 0
Регистрация: 14.08.2017
Сообщений: 61
11.12.2023, 09:47  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Возможно, поможет моя реализация (под gcc): https://github.com/COKPOWEHEU/... n/5.CDC_F1
И описание USB: https://habr.com/ru/articles/548150/
Спасибо, посмотрю, но такое ощущение, что косяк где-то в дескрипторе. Система не может нормально драйвер подтянуть. Коллега по работе сказал сегодня, что у него тоже с восклицательным знаком определяется контроллер. Полагаю, что 5-ый компилятор, что 6-ой, уже не важно, работает одинаково. Остаётся разобраться в другом каком-то месте...
0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,876
11.12.2023, 11:16
Цитата Сообщение от uswer312 Посмотреть сообщение
У меня файл startup_stm32f10x_md.s, это как-то влияет?
конечно влияет. у тебя размер стека
Цитата Сообщение от uswer312 Посмотреть сообщение
Stack_Size      EQU     0x00000400
всего 1 килобайт, стека не хватает он рушится
Цитата Сообщение от ValeryS Посмотреть сообщение
Stack_Size EQU 0x1000
я же привел на 4 килобайта, может быть тоже нужно увеличить например до 8 килобайт, мне например хватало
Assembler
1
Stack_Size EQU 0x2000
Цитата Сообщение от uswer312 Посмотреть сообщение
но такое ощущение, что косяк где-то в дескрипторе.
Цитата Сообщение от uswer312 Посмотреть сообщение
67,   /* wTotalLength:no of returned bytes */
размер дескриптора точно 67 байт?
рекомендую книгу Агурова "Интерфейс USB. Практика использования и программирования" https://ibooks.ru/products/333639
"Практика программирования USB" https://www.litres.ru/book/pav... b-6654271/
0
1 / 1 / 0
Регистрация: 14.08.2017
Сообщений: 61
11.12.2023, 11:27  [ТС]
Цитата Сообщение от ValeryS Посмотреть сообщение
размер дескриптора точно 67 байт?
Ну, наверное. Это можно как-то проверить?
Цитата Сообщение от ValeryS Посмотреть сообщение
я же привел на 4 килобайта, может быть тоже нужно увеличить например до 8 килобайт, мне например хватало
Увеличил, но не прокатывает...
0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,876
11.12.2023, 12:03
Цитата Сообщение от uswer312 Посмотреть сообщение
Ну, наверное. Это можно как-то проверить?
посчитать ручками

скинь проект, посмотрю
заархивируй и скинь сюда
0
1 / 1 / 0
Регистрация: 14.08.2017
Сообщений: 61
11.12.2023, 12:07  [ТС]
Цитата Сообщение от ValeryS Посмотреть сообщение
скинь проект, посмотрю
заархивируй и скинь сюда
Вот. Ну, я посчитал, получилось 67.
Вложения
Тип файла: rar hzz.rar (606.4 Кб, 6 просмотров)
0
 Аватар для COKPOWEHEU
4149 / 2727 / 433
Регистрация: 09.09.2017
Сообщений: 12,084
11.12.2023, 14:25
Цитата Сообщение от uswer312 Посмотреть сообщение
Спасибо, посмотрю, но такое ощущение, что косяк где-то в дескрипторе.
Если вы взяли пример откуда-то, и не трогали дескриптор, скорее всего дело не в нем. У автора ведь он работал. Более вероятно, что не обрабатываются какие-то запросы. А это надо смотреть в анализаторе.
0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,876
11.12.2023, 14:34
uswer312, пока нашел один косяк
в 6 версии компилятора дает warning в 5 error
на вот эту функцию uUSBLIB_DataReceivedHandler в файле usblib.c
на строке 440 она обозвана как "слабая"
C++
1
__weak void uUSBLIB_DataReceivedHandler(uint16_t *Data, uint16_t Length)
но! __weak переопределён в файле usblib.h на 23 строке
C
1
#define __weak __attribute__((weak))
вот из-за этого он говорит двойное определение функции


вот как у меня определено
C
1
2
3
4
5
6
7
8
#if  defined ( __GNUC__ )
  #ifndef __weak
    #define __weak   __attribute__((weak))
  #endif /* __weak */
  #ifndef __packed
    #define __packed __attribute__((__packed__))
  #endif /* __packed */
#endif /* __GNUC__ */
проще пока просто заремарить
C
1
//#define __weak __attribute__((weak))
попробуй может поможет
платы у меня пока нет найду попытаюсь проверить
0
 Аватар для COKPOWEHEU
4149 / 2727 / 433
Регистрация: 09.09.2017
Сообщений: 12,084
11.12.2023, 15:10
ValeryS, выложите бинарник, могу залить посмотреть. Это компилировать исходник ТСа мне нечем, а платка и wireshark есть.
0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,876
11.12.2023, 16:16
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
ValeryS, выложите бинарник
держи
5 и 6 версия компилятора
Вложения
Тип файла: zip hzz_output.zip (6.8 Кб, 5 просмотров)
0
 Аватар для COKPOWEHEU
4149 / 2727 / 433
Регистрация: 09.09.2017
Сообщений: 12,084
11.12.2023, 17:41
Wireshark говорит что какие-то проблемы с целостностью пакетов. Не с первого раза передается DeviceDescriptor (в первый раз - 8 байт), а ConfigurationDescriptor целиком, похоже, вообще не удается принять (передается всегда по 8 байт). Еще спамит QualiferDescriptor'ами (рекомендую выставить bcdUSB в 0x0110)
0
1 / 1 / 0
Регистрация: 14.08.2017
Сообщений: 61
12.12.2023, 04:55  [ТС]
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Если вы взяли пример откуда-то, и не трогали дескриптор, скорее всего дело не в нем. У автора ведь он работал.
У автора, вероятнее всего, и работал, но у меня коллега, когда скачал, открыл у себя в keil'е с 5-тым компилятором, собрал, зашил и у него так же определялся ком порт с восклицательным знаком в диспетчере устройств. Не знаю, как там автор видит свой проект, но он почему-то не шибко рабочий...
Ну и, собственно, под 6-ой компилятор я у себя переделал немного и добился того же, что и у коллеги.

Цитата Сообщение от ValeryS Посмотреть сообщение
но! __weak переопределён в файле usblib.h на 23 строке
Да, это я написал
Цитата Сообщение от ValeryS Посмотреть сообщение
#define __weak __attribute__((weak))
иначе keil не понимает что это такое. В приложенной картинке написано по поводу __weak.
Миниатюры
stm32f103, Keil, USB, CDC  
0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,876
12.12.2023, 08:34
Цитата Сообщение от uswer312 Посмотреть сообщение
В приложенной картинке написано по поводу
дай ссылку на весь документ
0
1 / 1 / 0
Регистрация: 14.08.2017
Сообщений: 61
12.12.2023, 08:38  [ТС]
Цитата Сообщение от ValeryS Посмотреть сообщение
дай ссылку на весь документ
https://www.programmersought.c... 628304747/
https://www.keil.com/appnotes/files/apnt_298.pdf
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.12.2023, 08:38

stm32f103 spi sd card keil
доброго времени суток. ктото может ткнуть носом, где можно взять пример работы с сд картой под кейл. уже сломал голову.

stm32f103 + nokia 5110 + keil
Начал постепенное обучение на STM32. Решил подключить экран от Nokyo 5110. Поигрался с "ногодрыганием" и решил перейти на SPI....

USB Audio + USB CDC на одной STM32F4
Итак, есть ЦАП с входом I2S, есть FMприёмник с выходом I2S, есть STM32F405 с двумя I2S. Задача сделать USB аудиокарту/FMприёмник в одном...

Assembler Keil stm32f103 общие вопросы
Приветствую форумчане. Есть несколько вопросов по асму Сообщения-вопросы я предлагаю выделять жирным а вопросы к вопросам - нет. ...

STM32F4Discovery USB CDC
Всем добрый день. Вопрос такой. Есть плата STM32F4Dyscovery, начал осваивать USB, с теорией интерфейса ознакомился.В Ref Man на данный МК...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
33
Ответ Создать тему
Новые блоги и статьи
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru