HALMX :: MXBLUEPILLF103C8

Вассилис
Пн 18 апреля 2016 г., 6:46
В марте 2016 года я начал работать над Sheepdoll's (Джули С. Портье) Отличная работа над основными файлами HALMX. Я сосредоточился на STM32F103C8 MCU, потому что он широко используется членами STM32Duino. Я думаю, что участникам очень сложно посмотреть все сообщения на форуме и посмотреть, какая функция добавлена ​​в ядро ​​HALMX.
Я видел это Sheepdoll имеет общую дорожную карту Halmx, но изменения, которые я сделал до сих пор, тестируются только вариант mxbluepillf103c8. Не для всех вариантов HALMX. По этой причине я создал этот пост, который сообщает членам с изменениями, внесенными мной или любым другим участником, в MXBLUEPILLF103C8 вариант.



Вещи, которые работают:

[14 мая 2016 г.]
* USBERIAL. Добавлена ​​поддержка Virtual Com -порта USB.
* Загрузчик. Метод загрузки прошивки DFU Maple DFU используется для загрузки скомпилированных эскизов в HALMX.

[09 мая 2016 г.]
* Добавлена ​​функция последовательной передачи на основе прерываний в портах Serial1, 2 и 3.

[19 апреля 2016 г.]
* Wiling_analog.в Поддержка Анагрог () и Analogwrite () функции

[14 апреля 2016 г.]
* SPI библиотека
* проводка.час А задержкамикросекунд () был переписан для STM32. Предыдущий код сборки не работал правильно для тестов, которые я сделал.
* Wiling_digital.в Низкий и высокий был помещен в обратный DigitalRead (...). Зафиксированный!

[09 апреля 2016 г.]
* Аппаратные серийные порты. Serial 1, Serial 2 и Serial 3 работают в Режим прерывания.


Что делать:
* Проводка библиотека. Поддержка интерфейса I2C
* SPI библиотека в DMA и Прерывать режим.

Вассилис
Пн 18 апреля 2016 г., 17:43
А анагрог () и Analogwrite () функции готовы. Я пришлю пиар через 1-2 дня.

Rogerclark
Пн 18 апреля 2016 г., 22:27
Спасибо Вассилис

Извините, у меня нет времени, чтобы сделать большую часть этого самостоятельно.

Я не уверен, что вы сделали из моего репо, как я обновил некоторые файлы, чтобы разрешить использование с загрузчиком.

Re: загрузчик для всех STM32

Я не думаю, что мы можем написать один загрузчик, который будет работать для всех.

Я не уверен, есть ли у всех устройств STM32 поддержка USB ??

Мы могли бы написать серийный загрузчик для тех устройств, которые имеют только последовательный, но я сомневаюсь, что будет многое, так как я подозреваю.

F4 имеет встроенный DFU, но я не знаю, возможно ли ввести режим загрузчика DFU из кода, или можно ли получить доступ только к Boot0 и Boot1.

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

Вассилис
Вторник 19 апреля 2016 г., 8:59 вечера
Я сделал тягу и увидел твои файлы. Спасибо!
В марте я сделал несколько тестов, чтобы объединить загрузчик STM32Duino с CubeMX. Это был совершенно неудача. Я изменил адрес флэш -адреса с *.LD файл, но ... ничего. Загрузчик был частично работал. Я отключил блюпл из порта USP. Я нажал кнопку загрузки на Arduino IDE, и одновременно я подключил чертеж к USB -порту. С этим трюком BluePill был успешно запрограммирован.
Я думаю прямо сейчас еще один тест, но сейчас уже слишком поздно. Попробую завтра.

Rogerclark
Вторник 19 апреля 2016 г. 9:15 вечера
Вассилис

Единственный способ, которым я мог заставить BluePill работать с загрузчиком,-это отключить его, а затем подключить обратно, как раз тогда, когда DFU-UTIL искал устройства DFU.

Maple Mini работал лучше, так как я просто нажимаю кнопку сброса, когда DFU-UTIL ищет.

Я не знаю, почему кнопка сброса не сбрасывает USB на BluePill, но проблема также может быть из -за чипсета Skylake на моем новом компьюте.


Некоторая часть проблемы с чертежом заключается в том, что когда запускается эскиз, диспетчер устройств Windows по -прежнему показывает устройство DFU, даже если код DFU больше не работает в Bluepill.

Мы могли бы вызвать перечисление USB, когда начнется эскиз, но тогда он покажет, вероятно, покажет неизвестное устройство.

Я думаю, что нам нужно найти небольшой код CDC, чтобы обеспечить USB -серий.

Возможно, код LiboPencm3, используемый BMP, может быть использован для предоставления USB.
Интересная вещь о BMP в том, что у него есть 3 устройства одновременно, я.эн. он ведет себя как композитное устройство. Я думаю, что это путь вперед, так как я знаю, что есть большой интерес к USB MIDI, а также USB HID (мышь и клавиатура)

Если мы начнем с USB -композитного устройства, даже с 1 подключением, это значительно облегчит добавление дополнительных устройств.

Mrburnette
Ср 20 апреля 2016 12:34
Rogerclark написал: <...>
Maple Mini работал лучше, так как я просто нажимаю кнопку сброса, когда DFU-UTIL ищет.
<...>

Сжимать
Пн 25 апреля 2016 г. 9:11 утра
Я использовал Cubemx, чтобы добавить поддержку для последовательного устройства CDC. Мне удалось получить/поместить байты в USB -сериал, но, действительно, код намного больше, чем Libmaple.
Код, поднятый до 17 КБ, и сегмент BSS до 5 КБ!, Для типичной программы Blink с некоторой печати. Тот же код с Libmaple - около 14.5 КБ/1 КБ.
Хотя увеличение этого размера не является проблемой для более крупных устройств, является серьезным недостатком для маленького.
Я изучаю файл карты, чтобы увидеть, что выделяется и почему. Может быть, мы должны «коснуться» кода, сгенерированного MX, особенно в небольших устройствах, таких как «таблетки».

Rogerclark
Пн 25 апреля 2016 г., 10:28 утра
@slammer

Я полагаю, каким -то образом линкер связывает функции, которые на самом деле не используются.

Мы используем флаг-whole-archive на Libmaple, в коде «архив», чтобы гарантировать, что такие вещи, как аппаратный таймер ISR, правильно связаны.

Я попытался удалить его из ядра HALMX, но, к сожалению, это, похоже, не уменьшило размер кода.
Так что либо я изменил неправильный код на платформе.TXT, или не флаг-whole-archive, который может вызвать большой код.

Другая вещь, которую можно попробовать, - это каким -то образом составлять код из куба, используя только Makefile, и посмотрите, не слишком ли код CDC слишком большой.

Я думаю, что @sheepdoll пытается скомпилировать с помощью Eclipse на OSX, но я не уверен, использовала ли она плагин Arduino или просто файлы из куба.

Сжимать
Пн 25 апреля 2016 г. 10:39
Я строю код за пределами среды Arduino, используя Makefile. Сравнение проводится с использованием того же самого файла, и, возможно, результаты немного отличаются от системы сборки Arduino. Я буду играть с CFLAGS, чтобы увидеть, есть ли изменения в размере. Я почти уверен, что некоторая очистка требуется специально в файлах Arduino Core, так как многие функции почти реализованы в HAL.
Наиболее важным является то, что код работает! Хорошая работа Vassilis и Sheepdoll!

Вот размер отчета Libcore.A (библиотека всех источников): arm-none-eabi-size _build/g103c/libcore.a text data bss dec hex filename 49 0 0 49 31 dtostrf.o (ex _build/g103c/libcore.a) 200 0 0 200 c8 itoa.o (ex _build/g103c/libcore.a) 16 0 0 16 10 new.o (ex _build/g103c/libcore.a) 904 0 0 904 388 Print.o (ex _build/g103c/libcore.a) 56 0 0 56 38 RingBuffer.o (ex _build/g103c/libcore.a) 891 0 0 891 37b Stream.o (ex _build/g103c/libcore.a) 292 0 4 296 128 syscalls.o (ex _build/g103c/libcore.a) 594 0 2 596 254 UARTClass.o (ex _build/g103c/libcore.a) 94 0 0 94 5e USARTClass.o (ex _build/g103c/libcore.a) 6 0 0 6 6 wiring.o (ex _build/g103c/libcore.a) 132 0 0 132 84 wiring_digital.o (ex _build/g103c/libcore.a) 144 0 0 144 90 wiring_shift.o (ex _build/g103c/libcore.a) 78 0 0 78 4e WMath.o (ex _build/g103c/libcore.a) 1897 0 1 1898 76a WString.o (ex _build/g103c/libcore.a) 372 0 0 372 174 startup_stm32f103xb.o (ex _build/g103c/libcore.a) 184 4 0 188 bc system_stm32f1xx.o (ex _build/g103c/libcore.a) 342 0 4 346 15a stm32f1xx_hal.o (ex _build/g103c/libcore.a) 518 0 0 518 206 stm32f1xx_hal_cortex.o (ex _build/g103c/libcore.a) 1778 0 0 1778 6f2 stm32f1xx_hal_dma.o (ex _build/g103c/libcore.a) 826 0 0 826 33a stm32f1xx_hal_flash.o (ex _build/g103c/libcore.a) 1136 0 0 1136 470 stm32f1xx_hal_flash_ex.o (ex _build/g103c/libcore.a) 680 0 0 680 2a8 stm32f1xx_hal_gpio.o (ex _build/g103c/libcore.a) 7434 0 0 7434 1d0a stm32f1xx_hal_i2c.o (ex _build/g103c/libcore.a) 2146 0 0 2146 862 stm32f1xx_hal_pcd.o (ex _build/g103c/libcore.a) 50 0 0 50 32 stm32f1xx_hal_pcd_ex.o (ex _build/g103c/libcore.a) 524 0 0 524 20c stm32f1xx_hal_pwr.o (ex _build/g103c/libcore.a) 2716 0 0 2716 a9c stm32f1xx_hal_rcc.o (ex _build/g103c/libcore.a) 606 0 0 606 25e stm32f1xx_hal_rcc_ex.o (ex _build/g103c/libcore.a) 4440 0 0 4440 1158 stm32f1xx_hal_spi.o (ex _build/g103c/libcore.a) 128 0 1 129 81 stm32f1xx_hal_spi_ex.o (ex _build/g103c/libcore.a) 0 0 0 0 0 stm32f1xx_hal_tim.o (ex _build/g103c/libcore.a) 0 0 0 0 0 stm32f1xx_hal_tim_ex.o (ex _build/g103c/libcore.a) 2590 0 0 2590 a1e stm32f1xx_hal_uart.o (ex _build/g103c/libcore.a) 2054 0 0 2054 806 stm32f1xx_ll_usb.o (ex _build/g103c/libcore.a) 578 272 1 851 353 usbd_cdc.o (ex _build/g103c/libcore.a) 664 0 0 664 298 usbd_core.o (ex _build/g103c/libcore.a) 906 0 1 907 38b usbd_ctlreq.o (ex _build/g103c/libcore.a) 150 0 0 150 96 usbd_ioreq.o (ex _build/g103c/libcore.a) 396 0 0 396 18c _spi.o (ex _build/g103c/libcore.a) 128 0 0 128 80 gpio.o (ex _build/g103c/libcore.a) 184 0 0 184 b8 i2c.o (ex _build/g103c/libcore.a) 200 0 0 200 c8 main.o (ex _build/g103c/libcore.a) 116 0 0 116 74 stm32f1xx_hal_msp.o (ex _build/g103c/libcore.a) 98 0 0 98 62 stm32f1xx_it.o (ex _build/g103c/libcore.a) 360 0 0 360 168 usart.o (ex _build/g103c/libcore.a) 56 0 0 56 38 usb_device.o (ex _build/g103c/libcore.a) 124 16 0 140 8c usbd_cdc_if.o (ex _build/g103c/libcore.a) 588 0 544 1132 46c usbd_conf.o (ex _build/g103c/libcore.a) 243 52 0 295 127 usbd_desc.o (ex _build/g103c/libcore.a) 448 4 624 1076 434 variant.o (ex _build/g103c/libcore.a)

Rogerclark
Пн 25 апреля 2016 г., 10:49
Мммм

Возможно, есть несколько публикаций на собственных форумах STM о размере кода при использовании куба.

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

Сжимать
Пн 25 апреля 2016 г. 11:10
Если вы изучите размеры основных файлов, всегда *_ex.o Модули очень большие.
Это расширенные модули HAL, они обеспечивают расширенную функциональность на соответствующих основных модулях. Я не уверен, что нам нужна эта функциональность.

Rogerclark
Пн 25 апреля 2016 г., 11:19 утра
Сламмер написал:Я изучаю размеры основных файлов, всегда *_ex.o Модули очень большие.
Это расширенные модули HAL, они обеспечивают расширенную функциональность на соответствующих основных модулях. Я не уверен, что нам нужна эта функциональность (например, FIFO в I2C/SPI и т. Д....)

Sheepdoll
Пн 25 апреля 2016 г., 17:30
Rogerclark написал:
Я думаю, что @sheepdoll пытается скомпилировать с помощью Eclipse на OSX, но я не уверен, использовала ли она плагин Arduino или просто файлы из куба.

Сжимать
Пн 25 апреля 2016 г., 8:58 вечера
Я не знаком с системой строительной системы Arduino и делаю тесты, используя Makefile и сравниваю результаты. Есть заметные различия....
Насколько я понимаю, каждый файл исходного файла внутри ядер/каталог Maplemx составлен и помещен в ядро.Статическая библиотека, но каждый файл в каталоге вариантов (для выбранной платы) составлен и связан как файл объекта. Линкер очень способен найти необходимые функции из ядра.Отказ от всего ненужного кода, но когда они пытаются связать объекты, которые явно названные, в двоичный файл менее чувствителен, сохраняя гораздо больше функций (все объекты из вариантов явно названы) .

Я попытался поместить каждый исходный файл из каталогов как ядер/вариантов, в ядро.a Использование Makefile, и создайте двоичный, связывающий основной исходный файл (1 эскиз файла для простоты) с Core.а
Линкер выводит некоторые предупреждения о некоторых функциях LIBC, на самом деле есть некоторые проблемы с связью, и некоторые объекты должны быть явно связаны, а не как часть ядра.A (я все еще работаю над этим, чтобы выяснить, почему это происходит и для каких файлов).
Использование Makefile можно успешно скомпилировать и связать эскиз, а размер исполняемого двоичного файла меньше! Например, набросок мигания составляет около 11.5 КБ при использовании системы сборки Arduino и с Makefile и Big-Core.А составляет около 8 КБ, сохраняя то же самое.
Может быть, кто -то с более глубокими знаниями о внутренних веществах линкера может помочь прояснить эти проблемы, если источники MX должны быть включены в ядро.A для эффективной связи мы должны изменить структуру файлов. Кажется, что каталог вариантов предназначен для некоторых файлов заголовков или небольшого кусочка кода, а не для Frameworks.
Я сделаю еще несколько тестов, сохраняю эту информацию как предварительную, я все еще пытаюсь....


Пса. Роджер Небольшое исправление об именовании включает<Ардуино.час> в варианте.Файл CPP, Linux чувствителен к корпусу.... Я отправляю запрос на привлечение...

Сжимать
Вт 26 апреля 2016 г. 1:37
ХОРОШО!... Я думаю, что я решил «тайну» с линкером.....
Проблема заключается в файле с векторами прерывания STM32F1XX_IT.в. Все векторы прерываний слабо определены в стартапе.S к default_handler, если stm32f1xx_it.C включен в статическую библиотеку, линкер сохраняет определения запуска.S и все остальные определения отбрасываются. Программа не работает, поскольку default_handler - это время (1); петля. Я попытался изменить позицию библиотеки в командной строке Linker, но результат был таким же.
Когда STM32F1XX_IT включен в командную строку Linker в качестве объекта вместе со статической библиотекой (со всеми другими файлами) и объектом Sketch векторы прерывания получают правильные значения, а программа нормально выполняет. С этой конфигурацией нет необходимости использовать флаг -Whole -Archive (который включает в себя все библиотечные функции), а линкер правильно разрешает необходимые символы, отбрасывая никаких необходимых функций.
Я не нашел рабочее решение для использования STM32F1XX_IT.C внутри статической библиотеки.... Может быть, необходима какая -то модификация стартапа, но это позвонит автоматическому генерации кода из Cubemx.

Rogerclark
Вт 26 апреля 2016 г. 1:51 утра
@slammer

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

Мне уже нужно было изменить файл, который жесткие коды, вектор смещения начала на 0x00, так как нам нужно переместить вектор старта при использовании загрузчика, поэтому мне пришлось обернуть существующее определение в блоке IFNDEF, чтобы мы могли определить его как Аргумент командной строки компилятора.

Стевех
Вт 26 апреля 2016 г., 4:10 утра
Я использую Cubemx и...
Перемещение таблицы векторов исключений.. Я делаю это во время выполнения, написав регистр в STM32FXXX. При компиляции у меня есть файл скрипта конфигурации линкера. Поместите по умолчанию питания для таблицы в обычном месте, чтобы автоматически генерированный код будет работать.

Моя основная причина переезда таблицы состоит в том, чтобы иметь две версии приложения во вспышке и использовать одну в качестве по умолчанию питания, а затем решает, запустить ли другую версию (перемещение указателя векторной таблицы в оборудование на вспышку для этого 2-го Код), или для загрузки и повторного смены новой версии 2-й копии кода.

Это способ сделать две версии кода и на месте перепроекта, без присмотра, без необходимости STM32, который имеет двойной размер вспышки и аппаратное переиздание двух банков Flash. Сохраняет стоимость двойной вспышки, как и в STM32F42X, тогда как STM32F41X (или 40x) имеет половину, а не переключение банка.

Вассилис
Вт 26 апреля 2016 г., 13:40
@Роджер Я снова отправил пиар для поддержки Ananogread () и Analogwrite () функции (Wiling_analog.в файл).

Я послал пиар из моих Windows GitHub, но как кажется, вы никогда не получали его.
Я думаю, я сделаю PRS из GitHub на основе Интернета (наверняка).

Rogerclark
Вт 26 апреля 2016 г., 21:43
Привет, Вассилис

Я не получил другой пиар.

Я никогда не пытался отправлять пиар прямо из Windows. Возможно, это не работает.

Сжимать
Ср 27 апреля 2016 г. 11:10
Вот реализация MicroS (), переносимая из Libmaple с использованием HAL:
// Adopted from libmaple with Hal uint32_t micros(void) { uint32_t ms; uint32_t cycle_cnt; do { ms = HAL_GetTick(); cycle_cnt = SysTick->VAL; asm volatile("nop"); //allow interrupt to fire asm volatile("nop"); } while (ms != HAL_GetTick()); return ( ms * 1000 + ( SysTick->LOAD + 1 - cycle_cnt ) / ( SystemCoreClock / 1000000 ) ) ; }

Вассилис
Ср 27 апреля 2016 г. 12:12
Сламмер написал:Вот реализация MicroS (), переносимая из Libmaple с использованием HAL:
// Adopted from libmaple with Hal uint32_t micros(void) { uint32_t ms; uint32_t cycle_cnt; do { ms = HAL_GetTick(); cycle_cnt = SysTick->VAL; asm volatile("nop"); //allow interrupt to fire asm volatile("nop"); } while (ms != HAL_GetTick()); return ( ms * 1000 + ( SysTick->LOAD + 1 - cycle_cnt ) / ( SystemCoreClock / 1000000 ) ) ; }

Стевех
Ср 27 апреля 2016 г., 8:02 вечера
Я не являюсь веществом задержки для задержки микросекунды имеет смысл. Это будет прервано Systick et al al.

Тот, который я видел, использует micros (), в котором вычисляет время между ними, используя значение счетчика в реальном времени из таймера Systick, и знает скоростную скорость Systick Timer Clock Speed.

Но тем не менее, всегда есть надоедливое прерывание Systick, обычно каждые 1000 микросекунд.

Grumpyoldpizza
Ср 27 апреля 2016 г., 21:11
Стевех написал:Я не являюсь веществом задержки для задержки микросекунды имеет смысл. Это будет прервано Systick et al al.

Тот, который я видел, использует micros (), в котором вычисляет время между ними, используя значение счетчика в реальном времени из таймера Systick, и знает скоростную скорость Systick Timer Clock Speed.
.

Сжимать
Ср 27 апреля 2016 г. 22:15
Функция MicroS () является частью ARDUINO API, и хорошо иметь его в нашей реализации. Функция не предназначена для задержек, является общей функцией и может использоваться для измерения времени выполнения процедуры или любой другой цели.

Grumpyoldpizza, хороший код. Я включил в свою большую книгу снимков....

ZMEMW16
Чт 28 апреля 2016 г., 19:13
:?: Длинный размытый день, почему бы мне не следовать этой линии, это кажется потенциальной гонкой с первой линией в скобках.
while (ms != HAL_GetTick());

Racemaniac
Чт 28 апреля 2016 г., 19:17
ZMEMW16 написал:@racemanic сделал вашу кукурузу прибыть (10Off 1G) ?

Стивен

ZMEMW16
Чт 28 апреля 2016 г., 19:19
Аполы, не поняли, действительно долго и размыто : oops:
SRP

Grumpyoldpizza
Чт 28 апреля 2016 г., 21:01
ZMEMW16 написал::?: Длинный размытый день, почему бы мне не следовать этой линии, это кажется потенциальной гонкой с первой линией в скобках.
while (ms != HAL_GetTick());

Сжимать
Чт 28 апреля 2016 г., 21:02
ZMEMW16 написал::?: Длинный размытый день, почему бы мне не следовать этой линии, это кажется потенциальной гонкой с первой линией в скобках.
while (ms != HAL_GetTick());

Вассилис
Пт 29 апреля 2016 г., 7:18 утра
А Serialusb Библиотека почти готова.

Rogerclark
Пт 29 апреля 2016 г., 7:54 утра
@Vassilis я объединил пиар

У меня еще один пиар https: // github.com/rogerclarkmelbourne/ ... M32/pull/7, Но я жду ответа от @sheepdoll, так как это может повлиять на Mac

У нас также есть код для Micros (), который должен быть объединен вручную, поскольку он не PR

Grumpyoldpizza
Пт 29 апреля 2016 г. 12:56
Сламмер написал:ZMEMW16 написал::?: Длинный размытый день, почему бы мне не следовать этой линии, это кажется потенциальной гонкой с первой линией в скобках.
Спасибо Grumpyoldpizza за прояснить это.... Да, это значение очень быстро меняется. Я не уверен, требуются ли два NOP.... В любом случае нет большой разницы.

Sheepdoll
Сб 7 мая 2016 г. 1:02
Я думаю, что узнал, почему я не смог запустить свой Nuleo F103RB с ноутбука, используя OS X 10.10.5

Когда я сравнил выходной выход сборки с OS x 10.7.5 Я обнаружил, что файл startup_stm32f103xb.S не был включен. Я заметил это на 10.7.5 Суффикс был в верхнем регионе «Изменить это на 10.10.5 Машина пробегает эскиз мигания.

Я заметил это на платформах.Файл TXT Рецепт для ассемблера - это верхний заглав, я также замечаю, что на варианте F4 я скопировал этот файл в верхнюю часть варианта дерева и должен был переименовать его, поскольку есть оба файла с небольшим водители..Путь GCC и тот, у кого есть прописное, то есть вариант.CPP и .Файл IOC. Поэтому я, должно быть, столкнулся с этим раньше и забыл об этом.

Rogerclark
Сб 07 мая 2016 г., 2:12
@sheepdoll

Я думаю, что @vassilis имеет файл Bat Windows, который меняет случай расширения файла ассемблера (или, возможно, это был сценарий, я определенно помню, как видел сценарий, который его изменил)

Сжимать
Сб 07 мая 2016 г. 12:18
У меня те же проблемы с UARTS. Кодекс HALMX не обрабатывает IRQ, передает таким образом, совместим с Arduino Core Lib, на самом деле ядро ​​отправляет байты один за другим, не используя IRQ Nature of HAL. Необходима передовая работа, но я буду ждать Василиса, чтобы закончить «партию» его работы перед любой модификацией.

Вассилис
Сб, 07 мая 2016 г., 21:08
Я постараюсь закончить последовательную передачу на основе прерывания, как только возможно.

Стевех
Сб 07 мая 2016 г., 21:21
Сламмер написал:У меня те же проблемы с UARTS. Кодекс HALMX не обрабатывает IRQ, передает таким образом, совместим с Arduino Core Lib, на самом деле ядро ​​отправляет байты один за другим, не используя IRQ Nature of HAL. Необходима передовая работа, но я буду ждать Василиса, чтобы закончить «партию» его работы перед любой модификацией.

Сжимать
Сб, 07 мая 2016 г., 22:13
Да, Стевех, вы правы, передача UART через DMA/IRQ проста и правильная, как вы знаете длину данных, проблема в том, что API Arduino вызывает функцию передачи, чтобы отправлять только один байт за раз, делая DMA/IRQ бесполезным как Следующая передача байтов в ожидании предыдущего (по крайней мере, с текущей реализацией HALMX).

Вассилис
Пн, 09 мая 2016 г., 15:44
Добавляется функция передачи на основе прерываний на Serial1, 2 и 3 порты.
Я отправил пиар Роджер.

Стевех
Пн, 09 мая 2016 г., 19:58
Сламмер написал:Да, Стевех, вы правы, передача UART через DMA/IRQ проста и правильная, как вы знаете длину данных, проблема в том, что API Arduino вызывает функцию передачи, чтобы отправлять только один байт за раз, делая DMA/IRQ бесполезным как Следующая передача байтов в ожидании предыдущего (по крайней мере, с текущей реализацией HALMX).

Сжимать
Пн, 09 мая 2016 г., 22:31
«Ворота» Ардуино в более низкие процедуры (например,. HAL передача) - это функция записи, которая проходит только один байт для передачи функции. Любые процедуры более высокого уровня, такие как Writeln (String), вызывает функцию записи, отправляя байты один за другим.
Обычно функция записи «толкает» байт к кольцевому буферу и запускает вручную прерывание передачи, если передача неактивна. Следующий вызов функции записи просто подталкивает новый байт для кольцевого буфера, если предыдущий не завершен. Функция передачи IRQ проверяет кольцевой буфер, а если не пусто, отправляет следующий байт. Таким образом, каждая записи требует только времени, когда в нашем случае выталкивает байт в кольцевой буфер (меньше, чем USEC), а передача на самом деле является цепочкой передачи, инициированных первой записи и контролируемой самой функцией IRQ, конечно, где -то там чек, чтобы избежать переполнения буфера (например,. Запись проверяет, буфер заполнен и если он есть, ожидает или отбрасывает новый байт).

Пса. Я еще не проверял новую версию...

Вассилис
Вторник 10 мая 2016 г. 10:05
А Сброс последовательности (1) почти готов.

(1) Программировать F103 Arduino Ide через maple_upload файл отправляет Дтдр управляющий сигнал и строка символов "1 -е"Через серийный порт CDC USB в MCU. Если этот «волшебный пакет» верен, MCU перезапускается по адресу запуска памяти загрузчика.

Вассилис
Ср 11 мая 2016 г. 16:55
- А USBERIAL готов (известный как »Сериал").
- А USB -сериал Порт появляется как «USB -последовательное устройство» в диспетчере устройств. Я не тестировал его на Linux или Mac, но ожидается, что он будет работать вне коробки.
- USB-повторные работы работает.

- А загрузчик работает и это STM32duino Bootloader v2.0

Есть вариант в чип.в Файл, который говорит: #define USE_USBSerial

Jonr
Ср 11 мая 2016 г. 18:18
Приятно - спасибо.

Rogerclark
Ср 11 мая 2016 г., 19:27
Спасибо

Вассилис
Ср 11 мая 2016 г. 8:04 вечера
Пожалуйста :)

Сжимать
Ср 11 мая 2016 г., 21:32
Хорошая работа, Вашилис

Вассилис
Пт 13 мая 2016 г., 9:29
Я нашел ошибку. Если я подключаю USB -кабель к USB -хосту (ПК), USB обычно распознается хостом. Затем я даю власть доски из внешнего источника (3.3 В).
Если я отключаюсь, а затем повторно подключаю USB-кабель с STM32, USB-хост рассматривает STM как «неизвестное устройство».
Я пытался воспроизвести USB -код атоличному Truestudio и имеет такой же симптом.
Когда я использую Keil uvision 5 Код работает правильно. Каждый раз, когда я отключаю / подключаю STM к USB -хосту, STM появляется правильно в диспетчере устройств. Я думаю, что это происходит потому, что UVISION использует свой собственный компилятор ARM. Truestudio использует компилятор GNU GCC C/C ++, такой же, как и Arduino, используя :?

Я отлаживал с Truestudio и увидел, что он придерживается Hardfault_handler
void HardFault_Handler(void) { /* USER CODE BEGIN HardFault_IRQn 0 */ /* USER CODE END HardFault_IRQn 0 */ while (1) { } /* USER CODE BEGIN HardFault_IRQn 1 */ /* USER CODE END HardFault_IRQn 1 */ }

Rogerclark
Пт 13 мая 2016 г., 9:35 утра
Vassilis, какая версия GCC вы используете ?

Были проблемы в ядре Libmaple, с GCC 4.9 и я заметил, что загрузчик не будет работать, если составлен с 4.9

Так что, возможно, это проблема с настройкой оптимизации.

На самом деле это больше похоже на проблему о том, когда PA12 потянут низко.

Возможно, это случилось слишком поздно, и USB уже код уже работает

Grumpyoldpizza
Пт 13 мая 2016 г., 11:58
Вассилис написал:Я нашел ошибку. Если я подключаю USB -кабель к USB -хосту (ПК), USB обычно распознается хостом. Затем я даю власть доски из внешнего источника (3.3 В).
Если я отключаюсь, а затем повторно подключаю USB-кабель с STM32, USB-хост рассматривает STM как «неизвестное устройство».
Я пытался воспроизвести USB -код атоличному Truestudio и имеет такой же симптом.
Когда я использую Keil uvision 5 Код работает правильно. Каждый раз, когда я отключаю / подключаю STM к USB -хосту, STM появляется правильно в диспетчере устройств. Я думаю, что это происходит потому, что UVISION использует свой собственный компилятор ARM. Truestudio использует компилятор GNU GCC C/C ++, такой же, как и Arduino, используя :?

Я отлаживал с Truestudio и увидел, что он придерживается Hardfault_handler
void HardFault_Handler(void) { /* USER CODE BEGIN HardFault_IRQn 0 */ /* USER CODE END HardFault_IRQn 0 */ while (1) { } /* USER CODE BEGIN HardFault_IRQn 1 */ /* USER CODE END HardFault_IRQn 1 */ }

Вассилис
Пт 13 мая 2016 г., 13:12
@Grumpyoldpizza
Спасибо! Я попробую это.

Странно то, что я произвел тот же код с STM32Cubemx (идентичным) для UVISION и TRUESTUDIO.
Первый работает правильно, но у второй есть проблема, которую я упоминал ранее.

Сжимать
Сб 14 мая 2016 г. 1:20 утра
Попробуйте скомпилировать его с GCC и оптимизацией -O1

Вассилис
Сб 14 мая 2016 г. 8:41
Проблема временно решена : D
Я использовал отладчик в Truestudio Чтобы узнать, где была проблема.
Я обнаружил, что проблема была в указателе PDEV в файле USBD_CDC.в Это, кажется, имеет недействительный/неправильный адрес оперативной памяти (?). Я временно поместил эту строку в комментарии, и USB работал, как и ожидалось ! : D
static uint8_t USBD_CDC_DeInit (USBD_HandleTypeDef *pdev, uint8_t cfgidx) { uint8_t ret = 0; /* Open EP IN */ USBD_LL_CloseEP(pdev, CDC_IN_EP); /* Open EP OUT */ USBD_LL_CloseEP(pdev, CDC_OUT_EP); /* Open Command IN EP */ USBD_LL_CloseEP(pdev, CDC_CMD_EP); /* DeInit physical Interface components */ if(pdev->pClassData != NULL) { ((USBD_CDC_ItfTypeDef *)pdev->pUserData)->DeInit(); //USBD_free(pdev->pClassData); //<========================== THIS LINE ============= USBD_free(NULL); pdev->pClassData = NULL; } return ret; }

Grumpyoldpizza
Сб 14 мая 2016 г. 12:28
Вассилис написал:Проблема временно решена : D
Я использовал отладчик в Truestudio Чтобы узнать, где была проблема.
Я обнаружил, что проблема была в указателе PDEV в файле USBD_CDC.в Это, кажется, имеет недействительный/неправильный адрес оперативной памяти (?). Я временно поместил эту строку в комментарии, и USB работал, как и ожидалось ! : D
static uint8_t USBD_CDC_DeInit (USBD_HandleTypeDef *pdev, uint8_t cfgidx) { uint8_t ret = 0; /* Open EP IN */ USBD_LL_CloseEP(pdev, CDC_IN_EP); /* Open EP OUT */ USBD_LL_CloseEP(pdev, CDC_OUT_EP); /* Open Command IN EP */ USBD_LL_CloseEP(pdev, CDC_CMD_EP); /* DeInit physical Interface components */ if(pdev->pClassData != NULL) { ((USBD_CDC_ItfTypeDef *)pdev->pUserData)->DeInit(); //USBD_free(pdev->pClassData); //<========================== THIS LINE ============= USBD_free(NULL); pdev->pClassData = NULL; } return ret; }

Вассилис
Сб 14 мая 2016 г. 14:26
Спасибо!

Ekawahyu
Солнце 15 мая 2016 г. 6:00 утра
@Slammer: @sheepdoll: не могли бы вы поделиться мне ссылкой на репозиторий halmx_arduino_stm32 с помощью makefiles? Я получил рабочие драйверы CMSIS, HAL и USB для STM32F072 и хотел бы добавить свой драйвер HAL в HALMX_ARDUINO_STM32. Для целей тестирования я бы предпочел использовать Makefile.

Rogerclark
Солнце 15 мая 2016 г., 6:08
@Vassilis

Я пытаюсь скомпилировать с помощью 1.6.9 (что прекрасно работает с репозитором Libmaple - без каких -либо изменений)

И теперь я получаю эту ошибку
arm-none-eabi-g++: error: unrecognized command line option '-CC -mcpu=cortex-m3'

Rogerclark
Солнце 15 мая 2016 г. 6:25
Исправил это

@Vassilis сделаю из моего репо, чтобы получить эти исправления

Проблема, верьте или нет... Похоже, вкладка или пространства перед -MCPU !!!

Я также изменил путь мастер -компилятора, чтобы использовать во время выполнения.инструменты... переменная, а не жестко закодированная
compiler.path={runtime.tools.arm-none-eabi-gcc.path}/bin/

Вассилис
Солнце 15 мая 2016 г. 9:11
@Роджер
Я сделал PR и начал использовать Arduino 1.6.9. Теперь все работает нормально.
Я проверил 1.6.9 с Halmx несколько дней назад, и я получил гору ошибок/предупреждений : D

Rogerclark
Солнце 15 мая 2016 г. 10:15 утра
Прохладный

Единственной реальной ошибкой была проблема с пространствами перед -MCPU, все остальное было просто предупреждениями

Если вы переходите на 1.6.9 (как и у меня), вы также можете изменить путь архива сборки на платформе.TXT, предупреждение говорит вам, что именно изменить, оно только на 2 строках на платформе.TXT, так что это легко изменить.

КСТАТИ. Как единственный совет, который в настоящее время работает, вы можете прокомментировать вас другие доски в досках.txt, поместив # перед всеми их настройками

Я думаю, что это может сохранить путаницу до тех пор, пока другие варианты совета не работают, так как в досках будет несколько досок STM32F103C.текст
(Вам не нужно удалять папки вариантов)

Я могу это сделать. Но только до вторника

Вассилис
Солнце 15 мая 2016 г. 11:40
Rogerclark написал:Если вы переходите на 1.6.9 (как и у меня), вы также можете изменить путь архива сборки на платформе.TXT, предупреждение говорит вам, что именно изменить, оно только на 2 строках на платформе.TXT, так что это легко изменить.

Rogerclark
Солнце 15 мая 2016 г., 19:46
Спасибо

Ekawahyu
Солнце 15 мая 2016 г. 11:18
Я пытаюсь построить MXBLUEPILLF103C8 с помощью SW4STM32. Я импортировал проект, и была ошибка, в которой говорилось, что он не может найти вариант.час. Я добавил корневую папку MXBLUEPILLF103C8 и получаю еще одну ошибку: Documents/Arduino/hardware/HALMX_Arduino_STM32/HALMX/variants/MXBluePillF103C8/variant.h:36:21: fatal error: Arduino.h: No such file or directory

Вассилис
Пн 16 мая 2016 г. 12:40
Вы используете Arduino IDE 1.6.5 или 1.6.9 ?

Ekawahyu
Пн 16 мая 2016 г. 12:54
Это работает просто отлично, когда я строю с Arduino Ide 1.6.5 или 1.6.9. Но нет успеха, чтобы построить в SW4STM32. Есть ли какое -либо определение, которое мне нужно добавить, когда я звоню?

Ekawahyu
Ср 18 мая 2016 г. 12:04
@Vassilis: У меня есть один вопрос об этом постоянном объявлении переменной: extern const Pin2PortMapArray g_Pin2PortMapArray[]

Sheepdoll
Ср 18 мая 2016 г. 1:31
Экавахю написал:@Vassilis: У меня есть один вопрос об этом постоянном объявлении переменной: extern const Pin2PortMapArray g_Pin2PortMapArray[]

Ekawahyu
Ср 18 мая 2016 г. 3:36 утра
@sheepdoll: Спасибо, что объяснили его подробно. Мне наконец удалось сделать набросок мигания для работы с Makefile!

Мне пришлось прокомментировать эти две строки из -за конфликта (Itoa.час):
#if 0 extern void itoa( int n, char s[] ) ; #else extern char* itoa( int value, char *string, int radix ) ; extern char* ltoa( long value, char *string, int radix ) ; //extern char* utoa( unsigned long value, char *string, int radix ) ; //extern char* ultoa( unsigned long value, char *string, int radix ) ; #endif /* 0 */

Sheepdoll
Ср 18 мая 2016 г., 4:40
Случайно я нахожусь в местном пространстве производителя, это "Arduino Night."Итак, я сливался в некоторых из кода Vasslils, и мой проект Nuleo прекратил компиляцию. Поэтому я обнаружил, что Pin2portMaparray был расширен для обработки настройки АЦП и таймера. Так много для быстрого выбора, слияния и толкать.

Хорошо, что Вассилис сделал изменение мирового, которое я планировал, и экономит меня много времени. Ура для сотрудничества.

Теперь я должен внести эти изменения вручную для булавок F103.

Здесь была еще одна ветка о том, что Итоа добавил много раздувания в код. Вероятно, потому что большинство крупных реализаций железа просто называют Sprintf, чтобы сделать Itoa. Не эффективно, но эффективно.

Когда я изучал код 40 лет назад, вам пришлось научиться кодировать ITOA и FTOA из первых принципов. Намек на это включает в себя модуль и делить на 10. Таким образом, хороший код должен использовать FPU, если таковой имеется. FTOA намного сложнее. Разница между Возником и Гейтсом как в соответствии с биографией Иссаксона, это может быть единственным, что Гейтс сделал в MIT. С другой стороны, мой пример был из руководства HP2100, так что это был скорее случай знания, куда смотреть.

Ekawahyu
Ср 18 мая 2016 г., 6:35
Чертовски! Я бы никогда не смог победить тебя, медведь металл! Я только недавно начал играть с 32-битными платформами. В основном то, что я сделал на 8-битном MCS51 и его производных. Я могу делать C очень хорошо, но никогда не делал ничего, что вроде смешивания C и C ++ или вызовов C с помощью C ++ (или наоборот).

В любом случае, я попытался снова построить код с GCC 4.8.3 и эти прокомментированные строки в порядке, чтобы быть включенными. Я предполагаю, что с новейшим компилятором (или, может быть, новой библиотекой), нам нужно поместить #F #endif, чтобы исключить эти строки.

Сжимать
Ср 18 мая 2016 г., 7:21
Экавахю написал: ...
Мне пришлось прокомментировать эти две строки из -за конфликта (Itoa.час):
...

Ekawahyu
Ср 18 мая 2016 г., 7:34
Хорошо, это работает! Я использую 5.2.1

Ekawahyu
Чт 19 мая 2016 г., 5:33 утра
У меня есть небольшая проблема с STM32Cubemx, вы, ребята, вероятно, уже знаете ответ. Я пытаюсь настроить таймер автоматической загрузки с прерыванием. Я могу включить/отключить его, но номер приоритета вытеснения всегда серо. Я мог бы изменить исходный код, но это победило бы цель создания кода из STM32Cubemx. Нужно ли мне настраивать что -то еще, чтобы этот приоритет преодоления мог быть изменен?

Стевех
Чт 19 мая 2016 г. 16:00
Редко нужно преодолеть. Есть ли особое обоснование для этого?

У меня есть одна ситуация, когда это необходимо, из -за высокочастотных прерываний exti от ASIC, чем требует нескольких десятков задержки прерывания микросекундов. Cubemx позволяет мне установить этот приоритет.

Для повторяющихся прерываний таймера, как я помню, аппаратное обеспечение таймера (не ISR) автоматически перерабатывает интервал, если настраивается для такого.

Вассилис
Чт 19 мая 2016 г. 18:52
Экавахю написал:У меня есть небольшая проблема с STM32Cubemx, вы, ребята, вероятно, уже знаете ответ. Я пытаюсь настроить таймер автоматической загрузки с прерыванием. Я могу включить/отключить его, но номер приоритета вытеснения всегда серо. Я мог бы изменить исходный код, но это победило бы цель создания кода из STM32Cubemx. Нужно ли мне настраивать что -то еще, чтобы этот приоритет преодоления мог быть изменен?

Ekawahyu
Чт 19 мая 2016 г., 19:59
Я был там и включил прерывание, но оно все еще серо. Даже я пытался сохранить его, сгенерировать код и т. Д. Не могли бы вы показать это точными шагами, которые вы сделали на Bluepill? Я, должно быть, куда -нибудь пропустил один шаг.

Вассилис
Чт 19 мая 2016 г., 20:47
nvic_.jpg
nvic_.JPG (145.94 киб) просмотрено 1036 раз

Ekawahyu
Чт 19 мая 2016 г., 21:49
Понятно! Мой плохой, я не смотрел на вкладку «Система» для NVIC. Все хорошо! Спасибо Вассилис!

Ekawahyu
Пт 27 мая 2016 г. 6:24
@Vassilis: Я вижу, что у USBSerial есть буферы RX (и потенциально TX), но я также вижу, что USB_CDC_IF.C, как RX, так и TX -буферы объявлены вместо того, чтобы указывать на USBERIAL. Какой у вас план с этим? От чего вы избавились бы?

Вассилис
Пт 27 мая 2016 г., 11:35 утра
Экавахю написал:@Vassilis: Я вижу, что у USBSerial есть буферы RX (и потенциально TX), но я также вижу, что USB_CDC_IF.C, как RX, так и TX -буферы объявлены вместо того, чтобы указывать на USBERIAL. Какой у вас план с этим? От чего вы избавились бы?

Ekawahyu
Пт 27 мая 2016 г., 17:11
У меня есть оба реализации буферированного TX и RX с использованием сгенерированного кода с помощью STM32Cubemx. Я только увеличил размер APP_TX_DATA_SIZE и APP_RX_DATA_SIZE с 4 до 128. Затем я добавил __io_putchar () и __io_getchar (), чтобы он работал с printf () и getChar (). Я могу попытаться указать rx_buffer для использования userrxbufferfs и посмотреть, сможем ли мы работать так же с TX_Buffer. Что вы думаете?

Новая структура Ring_buffer должна выглядеть так:
struct ring_buffer{ //uint8_t buffer[CDC_SERIAL_BUFFER_SIZE]; uint8_t *buffer; volatile uint16_t iHead; volatile uint16_t iTail; };

Вассилис
Пт 27 мая 2016 г., 17:23
Экавахю написал:У меня есть оба реализации буферированного TX и RX с использованием сгенерированного кода с помощью STM32Cubemx. Я только увеличил размер APP_TX_DATA_SIZE и APP_RX_DATA_SIZE с 4 до 128. Затем я добавил __io_putchar () и __io_getchar (), чтобы он работал с printf () и getChar (). Я могу попытаться указать rx_buffer для использования userrxbufferfs и посмотреть, сможем ли мы работать так же с TX_Buffer. Что вы думаете?

Ekawahyu
Сб 28 мая 2016 г., 7:34 утра
Не такая чистая реализация, но она работает!

https: // github.com/ekawahyu/halmx_ardui ... 3d850ba75d

Протестировано с быстрым автоматическим переходом через AppleScript, все кажется в порядке. Я также поместил периодический cdc_transmit на каждые 20 мс через обратный вызов Systick.

Вассилис
Сб 28 мая 2016 г., 9:49
Экавахю написал:На момент обнаружения волшебного слова мы можем прочитать из буфера вместо этого. Я решил использовать «@boot» вместо «1EAF» для волшебного слова. Вы знаете, вероятность получить «1EAF», поскольку данные выше, чем последовательность «@boot».

Ekawahyu
Сб 28 мая 2016 г. 16:24
Я забыл упомянуть, что "1 -е"Волшебное слово это не просто простая 4-байтовая упаковка. Он в сочетании с Дтдр сигнал, который отправляется из IDE (maple_upload файл).
Итак, не важно, если волшебное слово простое или нет ;)
Что ж, у меня возникает беспокойство по поводу «1EAF» на STM32F072 Discovery, потому что я использую встроенную систему DFU и хотел, чтобы он прыгнул в System DFU с помощью программного обеспечения, а не нажав любую кнопку. Нет никакого вмешательства. Таким образом, он постоянно слушает эти USB -поток данных для волшебного слова. Нет DTR или любого другого механизма сброса. USB D+ даже имеет встроенный резистор подтягивания.

Я представляю, что «1EAF», скорее всего, будет запечатлен из потока данных, чем «@boot». Может быть, я ошибаюсь, но это как минимум 5 букв против 4, в последовательности есть двойные символы и т. Д. Возможно, мне понадобится волшебное предложение, такое как «@Aladin Open Sesame» вместо одного слова, просто чтобы быть уверенным, что это не является частью потока данных. : D

По крайней мере, это работает на данный момент. Смотри, ма, без рук!

Rogerclark
Сб 28 мая 2016 г. 16:42
1 -е - это историческое наследие из Leaflabs E.G, потому что лист выглядит немного как 1 -е

Но я не вижу никакого способа получить серийный код для прослушивания этой последовательности плюс строка DRT

Чтобы изменить этот код, нам нужно будет восстановить все инструменты загрузки. Основная проблема с этим - Java Windows "Maple_upload", так как у нас нет первоначального источника для этой утилиты, у нас только декомпиляция - и я не уверен, что он перекомпилируется

Учитывая, что никто не сообщил о каких -либо проблемах с существующей 2 -байтовой последовательности, я не вижу большой проблемы с остановкой с ней, и это отдает дань уважения Lefflabs, которые в первую очередь проиграли это всем ;-)

Ekawahyu
Сб 28 мая 2016 г., 17:05
Хорошо, я могу положить 1EAF для STM32F072 Discovery, пока не будет необходимость заменить его. На данный момент я тоже в порядке с этим. Кто -то должен придумать решение с открытым исходным кодом для этого инструмента загрузки Java, хотя.

@Rogerclark: может немного объяснить, как этот maple_loader.Jar работает на Windows? Мне трудно понять, что эти %1 %2 ... параметры, которые мне нужно передать. Я вижу, что он использует JSSC. Я мог бы переписать код для него.

Rogerclark
Сб 28 мая 2016 г., 17:28
Я думаю, что вы имеете в виду параметры, передаваемые Arduino IDE на «Инструменты»

Посмотрите в дне платформы.TXT, как я думаю, эти значения только что передаются командами в разделе «Инструменты».текст
(Обратите внимание, что некоторые параметры, вероятно, избыточные E.глин. Возможно, USB VID PID вещи)

Rogerclark
Чт, 02 июня 2016 г. 1:49
Поддержка Maple Mini (и аналогичный) USB -сброс.CPP, который находится в общем кодексе Core I.e halmx/cores/maplemx/usbserial.CPP

Я не уверен, что лучший способ сделать это и сделать это общим, но пока кто -нибудь не сможет придумать лучшую идею ;-)

Я собираюсь определить

Usb_disc_port

и

Usb_disc_pin

Что -то вроде этого
void USBSerial::init(void){ /* Re-enumerate the USB */ GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; #if defined(USB_DISC_PORT) GPIO_InitStruct.Pin = USB_DISC_PIN; HAL_GPIO_Init(USB_DISC_PORT, &GPIO_InitStruct); HAL_GPIO_WritePin(USB_DISC_PORT, USB_DISC_PIN, GPIO_PIN_RESET); #else GPIO_InitStruct.Pin = GPIO_PIN_12; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); HAL_GPIO_WritePin(GPIOA, GPIO_PIN_12, GPIO_PIN_RESET); for(volatile unsigned int i=0;i<512;i++); HAL_GPIO_WritePin(GPIOA, GPIO_PIN_12, GPIO_PIN_SET); #endif MX_USB_DEVICE_Init(); }

Rogerclark
Чт, 02 июня 2016 г., 6:35
Еще один пост об этом ядре

Я запустил куб, и у него были обновления, поэтому я применил обновления, а USB больше не компилируется :-(
HALMX_Arduino_STM32\HALMX\variants\MXBluePillF103C8\Src\usbd_cdc_if.c:143:24: error: 'hUsbDevice_0' undeclared (first use in this function)

Вассилис
Чт, 02 июня 2016 г., 14:27
@Роджер

Для использования диска на Maple Mini замените инициатор код в USBERIAL.CPP файл

USBERIAL.CPPvoid USBSerial::init(void){ /* Re-enumerate the USB */ volatile unsigned int i; #ifdef USB_DISC_PIN pinMode(USB_DISC_PIN, OUTPUT); digitalWrite(USB_DISC_PIN, HIGH); for(i=0;i<512;i++); digitalWrite(USB_DISC_PIN, LOW); #else pinMode(USBDP_PIN, OUTPUT); digitalWrite(USBDP_PIN, LOW); for(i=0;i<512;i++); digitalWrite(USBDP_PIN, HIGH); #endif MX_USB_DEVICE_Init(); }

Rogerclark
Чт, 02 июня 2016 г., 22:33
Вассилис

Спасибо
Я не понял, что булавка была определена в другом месте, а также в USBERIAL.CPP

Возможно, мы сможем получить USBERIAL.CPP для использования того же #Define, поэтому его нужно изменить только в одном месте


Я думаю, что скучаю по твоему публикации.

Я думал, что вы говорили, что это уже определено в чипе.H, но теперь я понял, что это новый код.

Я посмотрел на код в Libmaple, и он просто, кажется, поднимает линию диска USB и держит его низко.

Но я вижу, что ваш код приводит его к низкому. Я не уверен, почему есть разница, но я полагаю, что пока она работает (на данный момент), это лучше, чем он вообще не работает, так как это позволит людям с Maple Mini использовать ядро.

Единственная небольшая проблема заключается в том, что мне нужно полностью дублировать весь файл куба для MXBluePill, чтобы сделать Maple Mini, но в действительности есть очень немногие различия. (только размер вспышки и сброс USB)



Спасибо

Роджер

Вассилис
Пт, 03 июня 2016 г., 5:27 утра
Ну, код, который я написал.

Первый код #ifdef USB_DISC_PIN pinMode(USB_DISC_PIN, OUTPUT); digitalWrite(USB_DISC_PIN, HIGH); for(i=0;i<512;i++); digitalWrite(USB_DISC_PIN, LOW); #else

Rogerclark
Пт, 03 июня 2016 г., 7:16 утра
Я думаю, у меня есть другая проблема

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

Мне нужно вернуть код в репо, так как я думаю, что что-то пошло не так ;-(

Ekawahyu
Пн, 06 июня 2016 г. 12:31 утра
Ребята, я запутался с HAL между UART и USART. STM32F103C8 явно имеет USART1, 2, 3, но некоторые вызовы функций и обратные вызовы явно написаны отдельно как UART и USART. Я настроил USART1 как Async и USART3 как синхронизация. Сгенерированный код кубом:
/* USART1 init function */ static void MX_USART1_UART_Init(void) { huart1.Instance = USART1; huart1.Init.BaudRate = 38400; huart1.Init.WordLength = UART_WORDLENGTH_7B; 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; huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE; huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT; if (HAL_UART_Init(&huart1) != HAL_OK) { Error_Handler(); } } /* USART3 init function */ static void MX_USART3_Init(void) { husart3.Instance = USART3; husart3.Init.BaudRate = 38400; husart3.Init.WordLength = USART_WORDLENGTH_7B; husart3.Init.StopBits = USART_STOPBITS_1; husart3.Init.Parity = USART_PARITY_NONE; husart3.Init.Mode = USART_MODE_TX_RX; husart3.Init.CLKPolarity = USART_POLARITY_LOW; husart3.Init.CLKPhase = USART_PHASE_1EDGE; husart3.Init.CLKLastBit = USART_LASTBIT_DISABLE; if (HAL_USART_Init(&husart3) != HAL_OK) { Error_Handler(); } }

Rogerclark
Пн, 06 июня 2016 г. 12:39
Функция init в main () всегда вызывает mx_usartx_init () независимо от того, что это Uart или USART. Но HAL, он вызывает HAL_UART_INIT () для USART1 и HAL_USART_INIT () для USART3. Это сбивает с толку, особенно когда дело доходит до разделения ядра Maplex. Я вижу, что uartclass.CPP используется прямо сейчас для всего UART/USART, но какой план с USARTCLASS.CPP в ядре? Я думаю, что это наоборот, не так ли?

Я думал, что первые 3 были USARTS, а 4 и 5 - UARTS

В любом случае...

В Libmaple все они изначально называли одно и то же имя, хотя некоторые были USARTS, а некоторые UARTS

Для базовой функциональности это не имеет значения, поскольку USART имеют функциональность UART, но это проблема для продвинутых функций.

В Libmaple я думаю, что он просто использует #ifdef, чтобы вызвать соответствующий код настройки, в зависимости от номера устройства.

Так что, возможно, мы сможем сделать то же самое.

Это не может быть идеальным или окончательным решением, но это такая небольшая деталь в общем масштабе ядра, что, возможно, мы сможем сделать это с #ifdef, пока у нас не появится лучшие проблемы с потенциалом изображения на других вариантах процессора e.G версии L и F7 и F0 и т. Д. - которые могут быть более разными, чем просто USART против UART

Олли
Пн июня 06, 2016, 2:31
В некоторых распределенных системах, где между центральным контроллером и периферическими контроллерами используются выделенные последовательные линии, это позволит более надежную конструкцию, когда используются провода RTS/CTS для поддержки синхронизации между контроллерами.

В идеальном случае библиотека F103 будет иметь поддержку RTS/CTS и связанных с ними прерываний. Даже когда они доступны только с первыми тремя серийными устройствами.

Ekawahyu
Пн, 06 июня 2016 г., 3:05 утра
Rogerclark написал:Я думаю, что это наоборот, не так ли?

Я думал, что первые 3 были USARTS, а 4 и 5 - UARTS

Grumpyoldpizza
Чт, 09 июня 2016 г. 14:27
Экавахю написал:Rogerclark написал:Я думаю, что это наоборот, не так ли?

Я думал, что первые 3 были USARTS, а 4 и 5 - UARTS

ZMEMW16
Чт, 09 июня 2016 г., 16:28
Чтение ISTR, что использование USART в режиме SPI позволяет отправлять странные числа битов; эн.глин. 9 ?

Стивен

Grumpyoldpizza
Чт, 09 июня 2016 г. 18:02
ZMEMW16 написал:Чтение ISTR, что использование USART в режиме SPI позволяет отправлять странные числа битов; эн.глин. 9 ?

Стивен

ZMEMW16
Чт, 09 июня 2016 г. 11:07
Apols, некоторые устройства используют нечетный формат - 9 Я думал, что биты данных и USART были способом взаимодействия с ними.

Ведь в Google на эту тему stm32 usart spi 9 data bits

Rogerclark
Sun 19 июня 2016 г., 11:15 вечера
Просто примечание для будущей ссылки

Ядро для звезды Arduino Star Otto, кажется, имеет код i2c (провода), встроенный в ядро ​​(не как библиотека), в котором используется HAL

Я подозреваю, что это будет самый быстрый способ добавить проволоку в ядро ​​HAL MX.

Вассилис
Пн 20 июня 2016 г. 11:13
Спасибо!

Вассилис
Пн 20 июня 2016 г., 19:43
Сегодня я слегка изменил звезду Ардуино Отто Проволока Основная библиотека для удовлетворения потребностей серии F1. На данный момент набросок примера провода скомпилируется без ошибок. Завтра я протестирую библиотеку на реальном подчиненном компоненте I2C.
Есть некоторые имена определений в STM32F469XX.час библиотека, которая используется с разными именами в библиотеках F1, такими как Hal_i2c1 (F469) вместо I2c1 (F103) .

Rogerclark
Пн 20 июня 2016 г., 21:37
Привет, Вассилис

Я надеюсь, что библиотека проводов не мешала исследованиям на экзаменах.

Я собирался посмотреть на библиотеку проводов на выходных, но у меня сейчас не так много свободного времени.

Вассилис
Вт 21 июня 2016 г. 12:38
@Роджер
Не волнуйся. Мне нужен перерыв в учебе.

Я послал вам пиар с помощью библиотеки Core Wire (I2C). Основная библиотека была протестирована только на устройстве DS1307 с использованием RTCX библиотека. Библиотека RTCX может быть загружена с «менеджера библиотеки» на Arduino IDE (Набросок -> Включите библиотеку -> Управлять библиотеками).

-= Библиотека проводов не была проверена на 100%. Я отправил запрос на привлечение только для цели тестирования. =-

Rogerclark
Вт 21 июня 2016 г. 22:39
Вассилис

Не беспокойся....

Я приму запрос на вытягивание и тестируется на модуле барометра BMP085.

Пса. Я получил электронное письмо от Франческо в Arduino.CC, и он почти закончил функцию SDIO.

Так что, возможно, мы сможем добавить это как библиотеку.

Надеюсь, он по электронной почте по электронной почте, когда его подтолкнут к GitHub.

Ekawahyu
Ср. 27 июля 2016 г. 16:41
Я пытаюсь использовать интерфейс SPI и хотел бы знать, будет ли это как -то интегрировано в ядре в будущем, или он останется как библиотека навсегда? В чем причина сохранить его как библиотеку?

Вассилис
Ср. 27 июля 2016 г., 17:32
Экавахю написал:Я пытаюсь использовать интерфейс SPI и хотел бы знать, будет ли это как -то интегрировано в ядре в будущем, или он останется как библиотека навсегда? В чем причина сохранить его как библиотеку?

Ekawahyu
Ср. 27 июля 2016 г., 19:24
Хорошо, так что I2C также предоставлен как библиотека? Таким образом, все дополнительное будет предоставлено в виде библиотек, кроме UART, PWM и ADC, это правильно?

Мы могли бы фактически предоставить #ifdef в ядре, чтобы удалить SPI, объявив макрос, такой как use_spi1, use_spi2 и т. Д.

Сжимать
Ср. 27 июля 2016 г., 8:33
Мы должны оставаться как можно ближе к официальному API Arduino для Uno/Due/Zero, по причинам совместимости. В официальном API SPI/I2C загружаются как внешние библиотеки.

Сенсортильный