Пример 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). может кто из местных объяснит.