2016-07-01 02:04 AM
I'm using STM32F072 MCU in USB Device mode. The USB enumerates nicely creating 1 interface and 2 bulk endpoints. One input and one output. Both with the maximum transfer size 64 bytes.
The problem occurs when I try to transfer more than 16 bytes of data. The transfer data is OK when I transfer less than 16 bytes but gibberish when I transfer more than 16 bytes in a single packet. I am analyzing the stream on a USB analyzer. I have opened the endpoints and I transfer data with USBD_LL_Transmit function. I am using HAL librariesAny ideas what I am doing wrong ? #stmf0 #hal #usb #usb #stm32f02016-07-02 04:56 AM
Hi martin,
Sound like a problem around assignment of endpoint buffer address for the bulk endpoint, using HAL_PCDEx_PMAConfig(). Using ''search files'' function of your editor, find code lines like this one, HAL_PCDEx_PMAConfig(&hpcd , 0x00 , PCD_SNG_BUF, 0x18); // EP0 OUT HAL_PCDEx_PMAConfig(&hpcd , 0x80 , PCD_SNG_BUF, 0x58); // EP0 IN HAL_PCDEx_PMAConfig(&hpcd , 0x01 , PCD_SNG_BUF, 0x100); // EP1 OUT HAL_PCDEx_PMAConfig(&hpcd , 0x81 , PCD_SNG_BUF, 0x140); // EP1 IN HAL_PCDEx_PMAConfig() assigns starting address of endpoint buffer on USB RAM to each endpoint. - You should have four lines of HAL_PCDEx_PMAConfig(), for the default EPs (EP0 IN/OUT) and the two bulk EPs. Above example assumes EP1 IN/OUT for the bulk EPs. To keep 64 bytes buffer for EP1 OUT (starting at 0x100), EP1 IN starts at 0x140. Modify your code like above one. Tsuneo2018-10-30 01:55 AM
I Modify my code like above,but the problem also occurs .what can i do ? the mcu is stm32l433rct.