реклама на сайте
подробности

 
 
> STM32F0xxx USB без HAL
alexf
сообщение Oct 23 2016, 03:03
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 420
Регистрация: 22-12-04
Пользователь №: 1 608



Делаю устройство на STM32F070. Сгенерировал код с USB CDC на кубе, и USB работает (пока) без нареканий. А вот попытки использовать HAL для других целей, скажем USART, создают больше проблем, чем решают. Для меня. Наверное, пользоваться не умею. В результате мешанина из HAL с прямыми обращениями к регистрам. Боюсь это меня рано или поздно узусит за задницу.

Так вот вопрос. Есть ли пример USB CDC без HAL? На F103 легко находится. Уже давно использовал. А для F0? Много ли надо менять, если нет готового кода?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
johnshadow
сообщение Oct 25 2016, 06:30
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 31
Регистрация: 25-09-08
Пользователь №: 40 477



Пример CDC для F072 можно подсмотреть в форке kuldeepdhaka/libopencm3-examples в ветке example/pwm/stm32f07.
под stm32f0xx пришлось в паре мест слегка поправить, т.к. получал hardfault по доступу к невыравненным данным.
типа такого:
Код
diff --git a/libopencm3/usb/usb_standard.c b/libopencm3/usb/usb_standard.c
index d94ceed..da47391 100644
--- a/libopencm3/usb/usb_standard.c
+++ b/libopencm3/usb/usb_standard.c
@@ -130,7 +130,9 @@ static uint16_t build_config_descriptor(usbd_device *usbd_dev,
    }

    /* Fill in wTotalLength. */
-    *(uint16_t *)(tmpbuf + 2) = totallen;
+    //*(uint16_t *)(tmpbuf + 2) = totallen;
+    *(tmpbuf + 2) = totallen & 0xFF;
+    *(tmpbuf + 3) = totallen >> 8;

    return total;
}

я так и не понял почему компилятор не обрабатывает такие ситуации сам (gcc-arm-embedded 5.4 2016q2). может кто из местных объяснит.
Go to the top of the page
 
+Quote Post
Kabdim
сообщение Oct 25 2016, 08:10
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 558
Регистрация: 26-11-14
Из: Зеленоград
Пользователь №: 83 842



Цитата(johnshadow @ Oct 25 2016, 09:30) *
я так и не понял почему компилятор не обрабатывает такие ситуации сам (gcc-arm-embedded 5.4 2016q2). может кто из местных объяснит.

Потому что компилятор априори верит что программист знает что делает, если есть явное указание на операцию. Зря конечно верит biggrin.gif . Ну а вы сами же и привели к указателю на 2ухбайтное значение, которое опять же должно быть выровнено. Кстати патч на мой вкус не очень. В таких случая лучше либо использовать memcpy (в релизе его соптимизируют в инлайн), либо код вроде такого:
Код
typedef struct {
    uint16_t value;
} __attribute__((packed)) unaligned_uint16;

((unaligned_uint16*)bla_bla).value = ...;

В вашем решении много битовых операций на ровном месте.
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Oct 25 2016, 10:21
Сообщение #4


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(Kabdim @ Oct 25 2016, 13:10) *
Код
typedef struct {
    uint16_t value;
} __attribute__((packed)) unaligned_uint16;

((unaligned_uint16*)bla_bla).value = ...;

В вашем решении много битовых операций на ровном месте.

Да ладно вам стращатьsm.gif Современные компиляторы отлично оптимизируют конструкции вида
Код
    *(tmpbuf + 2) = totallen & 0xFF;
    *(tmpbuf + 3) = totallen >> 8;

Думаю, что код, сгенерированный компилятором в вашем варианте и в этом будет эквивалентен. Зато этот вариант понятнее, к тому же он переносим.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- alexf   STM32F0xxx USB без HAL   Oct 23 2016, 03:03
- - Allregia   Цитата(alexf @ Oct 23 2016, 04:03) В резу...   Oct 23 2016, 05:14
- - AHTOXA   Цитата(alexf @ Oct 23 2016, 08:03) Есть л...   Oct 23 2016, 07:36
|- - alexf   Цитата(AHTOXA @ Oct 23 2016, 00:36) Приме...   Oct 23 2016, 19:19
- - Genadi Zawidowski   USBD_LL_Transmit вообще-то вызывается в обработчик...   Oct 24 2016, 08:02
- - johnshadow   использую libopencm3 на stm32f072 - CDC (для основ...   Oct 24 2016, 08:20
|- - Сергей Борщ   QUOTE (johnshadow @ Oct 24 2016, 11:20) и...   Oct 24 2016, 10:01
|- - johnshadow   Цитата(Сергей Борщ @ Oct 24 2016, 13:01) ...   Oct 24 2016, 10:07
|- - esaulenka   Цитата(Сергей Борщ @ Oct 24 2016, 13:01) ...   Oct 24 2016, 20:16
|- - Allregia   Цитата(johnshadow @ Oct 25 2016, 07:30) я...   Oct 25 2016, 07:10
|- - Сергей Борщ   QUOTE (johnshadow @ Oct 25 2016, 09:30) я...   Oct 25 2016, 07:41
||- - johnshadow   Цитата(Сергей Борщ @ Oct 25 2016, 10:41) ...   Oct 25 2016, 08:49
||- - Kabdim   Цитата(johnshadow @ Oct 25 2016, 11:49) m...   Oct 25 2016, 09:01
||- - Сергей Борщ   QUOTE (johnshadow @ Oct 25 2016, 11:49) m...   Oct 25 2016, 10:26
||- - johnshadow   Цитата(Сергей Борщ @ Oct 25 2016, 13:26) ...   Oct 25 2016, 13:03
|- - Kabdim   Цитата(AHTOXA @ Oct 25 2016, 13:21) Да ла...   Oct 25 2016, 11:41
- - Kabdim   Удалил, попутал со знаковым переполнением.   Oct 25 2016, 13:11


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 28th July 2025 - 10:53
Рейтинг@Mail.ru


Страница сгенерированна за 0.01392 секунд с 7
ELECTRONIX ©2004-2016