Hallo,
ich nutze eine abgewandelte Lib von ST um den STM32 als CDC Device zu
nutzen. Ich messe über VCOM Perioden (Interrupt) am PC. Funktioniert
eigentlich alles. Aber wenn ich einen Frequenzsweep mache, wobei die
erste Messung immer berücksichtigter Müll ist. Teilweise kommt wird bei
einem Sweep allerdings noch 64 vorherige Werte mitgemessen und dann ist
die 64*x Messung Müll, was sich nicht mehr so gut rausfiltern lässt. Ich
habe herausgefunden, dass es evtl. durch die usb config zustande kommt.
Wenn ich den Wert von CDC_DATA_MAX_PACKET_SIZE nämlich auf 32 ändere,
kommt die fehlerhafte Messung an 32ter Stelle. Jetzt würde mich
interessieren, was genau die defines in der usb config bedeuten, um das
Problem vielleich lösen zu können.
1 | //--------------------------------------------------------------
|
2 | // Includes
|
3 | //--------------------------------------------------------------
|
4 |
|
5 |
|
6 |
|
7 | #define USBD_CFG_MAX_NUM 1
|
8 | #define USBD_ITF_MAX_NUM 1
|
9 | #define USB_MAX_STR_DESC_SIZ 50
|
10 |
|
11 |
|
12 | #define CDC_IN_EP 0x81 /* EP1 for data IN */
|
13 | #define CDC_OUT_EP 0x01 /* EP1 for data OUT */
|
14 | #define CDC_CMD_EP 0x82 /* EP2 for CDC commands */
|
15 |
|
16 | /* CDC Endpoints parameters: you can fine tune these values depending on the needed baudrates and performance. */
|
17 |
|
18 | #define CDC_DATA_MAX_PACKET_SIZE 64 /* Endpoint IN & OUT Packet size */
|
19 | #define CDC_CMD_PACKET_SZE 8 /* Control Endpoint Packet size */
|
20 |
|
21 | #define CDC_IN_FRAME_INTERVAL 5 /* Number of frames between IN transfers */
|
22 | #define APP_RX_DATA_SIZE 2048 /* Total size of IN buffer:
|
23 | APP_RX_DATA_SIZE*8/MAX_BAUDARATE*1000 should be > CDC_IN_FRAME_INTERVAL */
|