mirror of
https://github.com/STMicroelectronics/STM32CubeF7.git
synced 2025-05-09 19:29:34 +08:00
229 lines
13 KiB
Plaintext
229 lines
13 KiB
Plaintext
/**
|
||
@page CDC_Standalone USB Device Communication (CDC) application
|
||
|
||
@verbatim
|
||
******************************************************************************
|
||
* @file USB_Device/CDC_Standalone/readme.txt
|
||
* @author MCD Application Team
|
||
* @brief Description of the USB Device CDC application.
|
||
******************************************************************************
|
||
*
|
||
* Copyright (c) 2016 STMicroelectronics International N.V. All rights reserved.
|
||
*
|
||
* Redistribution and use in source and binary forms, with or without
|
||
* modification, are permitted, provided that the following conditions are met:
|
||
*
|
||
* 1. Redistribution of source code must retain the above copyright notice,
|
||
* this list of conditions and the following disclaimer.
|
||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||
* this list of conditions and the following disclaimer in the documentation
|
||
* and/or other materials provided with the distribution.
|
||
* 3. Neither the name of STMicroelectronics nor the names of other
|
||
* contributors to this software may be used to endorse or promote products
|
||
* derived from this software without specific written permission.
|
||
* 4. This software, including modifications and/or derivative works of this
|
||
* software, must execute solely and exclusively on microcontroller or
|
||
* microprocessor devices manufactured by or for STMicroelectronics.
|
||
* 5. Redistribution and use of this software other than as permitted under
|
||
* this license is void and will automatically terminate your rights under
|
||
* this license.
|
||
*
|
||
* THIS SOFTWARE IS PROVIDED BY STMICROELECTRONICS AND CONTRIBUTORS "AS IS"
|
||
* AND ANY EXPRESS, IMPLIED OR STATUTORY WARRANTIES, INCLUDING, BUT NOT
|
||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
|
||
* PARTICULAR PURPOSE AND NON-INFRINGEMENT OF THIRD PARTY INTELLECTUAL PROPERTY
|
||
* RIGHTS ARE DISCLAIMED TO THE FULLEST EXTENT PERMITTED BY LAW. IN NO EVENT
|
||
* SHALL STMICROELECTRONICS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||
*
|
||
******************************************************************************
|
||
@endverbatim
|
||
|
||
@par Application Description
|
||
|
||
Use of the USB device application based on the Device Communication Class (CDC) and
|
||
following the PSTN subprotocol. This application uses the USB Device and UART peripherals.
|
||
|
||
This is a typical application on how to use the STM32F7xx USB OTG Device peripheral where the STM32 MCU
|
||
behaves as a USB-to-RS232 bridge following the Virtual COM Port (VCP) implementation.
|
||
- On one side, the STM32 exchanges data with a PC host through USB interface in Device mode.
|
||
- On the other side, the STM32 exchanges data with other devices (same host, other host,
|
||
other devices<65>) through the UART interface (RS232).
|
||
|
||
At the beginning of the main program the HAL_Init() function is called to reset all the peripherals,
|
||
initialize the Flash interface and the systick. The user is provided with the SystemClock_Config()
|
||
function to configure the system clock (SYSCLK) to run at 216 MHz. The Full Speed (FS) USB module uses
|
||
internally a 48-MHz clock which is coming from a specific output of two PLLs: main PLL or PLL SAI.
|
||
In the High Speed (HS) mode the USB clock (60 MHz) is driven by the ULPI.
|
||
|
||
The 48 MHz clock for the USB FS can be derived from one of the two following sources:
|
||
<20> PLL clock (clocked by the HSE): If the USB uses the PLL as clock source, the PLL VCO clock must be programmed
|
||
to output 432 MHz frequency (USBCLK = PLLVCO/PLLQ).
|
||
<20> PLLSAI clock (clocked by the HSE): If the USB uses the PLLSAI as clock source, the PLLSAI VCO clock must be programmed
|
||
to output 384 MHz frequency (USBCLK = PLLSAIVCO/PLLSAIP).
|
||
|
||
When the VCP application is started, the STM32 MCU is enumerated as serial communication port and is
|
||
configured in the same way (baudrate, data format, parity, stop bit) as it would configure a standard
|
||
COM port. The 7-bit data length with no parity control is NOT supported.
|
||
|
||
During enumeration phase, three communication pipes "endpoints" are declared in the CDC class
|
||
implementation (PSTN sub-class):
|
||
- 1 x Bulk IN endpoint for receiving data from STM32 device to PC host:
|
||
When data are received over UART they are saved in the buffer "UserTxBuffer". Periodically, in a
|
||
timer callback the state of the buffer "UserTxBuffer" is checked. If there are available data, they
|
||
are transmitted in response to IN token otherwise it is NAKed.
|
||
The polling period depends on "CDC_POLLING_INTERVAL" value.
|
||
|
||
- 1 x Bulk OUT endpoint for transmitting data from PC host to STM32 device:
|
||
When data are received through this endpoint they are saved in the buffer "UserRxBuffer" then they
|
||
are transmitted over UART using interrupt mode and in meanwhile the OUT endpoint is NAKed.
|
||
Once the transmission is over, the OUT endpoint is prepared to receive next packet in
|
||
HAL_UART_TxCpltCallback().
|
||
|
||
- 1 x Interrupt IN endpoint for setting and getting serial-port parameters:
|
||
When control setup is received, the corresponding request is executed in CDC_Itf_Control().
|
||
In this application, two requests are implemented:
|
||
- Set line: Set the bit rate, number of Stop bits, parity, and number of data bits
|
||
- Get line: Get the bit rate, number of Stop bits, parity, and number of data bits
|
||
The other requests (send break, control line state) are not implemented.
|
||
|
||
@note Receiving data over UART is handled by interrupt while transmitting is handled by DMA allowing
|
||
hence the application to receive data at the same time it is transmitting another data (full-
|
||
duplex feature).
|
||
|
||
The support of the VCP interface is managed through the ST Virtual COM Port driver available for
|
||
download from www.st.com.
|
||
|
||
@note The user has to check the list of the COM ports in Device Manager to find out the number of the
|
||
COM ports that have been assigned (by OS) to the VCP interface.
|
||
|
||
This application uses UART as a communication interface. The UART instance and associated resources
|
||
(GPIO, NVIC) can be tailored in "usbd_cdc_interface.h" header file according to your hardware
|
||
configuration. Moreover, this application can be customized to communicate with interfaces other than UART.
|
||
For that purpose a template CDC interface is provided in:
|
||
Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Src directory.
|
||
|
||
In High Speed (HS) mode, enabling USB-DMA will result in data being sent only by multiple of 4 packet
|
||
sizes. This is due to the fact that USB DMA does not allow sending data from non word-aligned addresses.
|
||
For this specific application, it is advised to not enable the DMA capability unless required.
|
||
|
||
To run this application, the user can use one of the following configurations:
|
||
|
||
- Configuration 1:
|
||
Connect USB cable to host and UART (RS232) to a different host (PC or other device) or to same host.
|
||
In this case, you can open two hyperterminals to send/receive data to/from host to/from device.
|
||
|
||
- Configuration 2:
|
||
Connect USB cable to Host and connect UART TX pin to UART RX pin on the STM32F769I-EVAL board
|
||
(Loopback mode). In this case, you can open one terminal (relative to USB com port or UART com port)
|
||
and all data sent from this terminal will be received by the same terminal in loopback mode.
|
||
This mode is useful for test and performance measurements.
|
||
|
||
Hyperterminal configuration:
|
||
- Word Length = 8 Bits
|
||
- One Stop Bit
|
||
- None parity
|
||
- BaudRate = 115200
|
||
- flow control: None
|
||
|
||
@note Care must be taken when using HAL_Delay(), this function provides accurate delay (in milliseconds)
|
||
based on variable incremented in SysTick ISR. This implies that if HAL_Delay() is called from
|
||
a peripheral ISR process, then the SysTick interrupt must have higher priority (numerically lower)
|
||
than the peripheral interrupt. Otherwise the caller ISR process will be blocked.
|
||
To change the SysTick interrupt priority you have to use HAL_NVIC_SetPriority() function.
|
||
|
||
@note The application needs to ensure that the SysTick time base is always set to 1 millisecond
|
||
to have correct HAL operation.
|
||
|
||
For more details about the STM32Cube USB Device library, please refer to UM1734
|
||
"STM32Cube USB Device library".
|
||
|
||
|
||
@par USB Library Configuration
|
||
|
||
To select the appropriate USB Core to work with, user must add the following macro defines within the
|
||
compiler preprocessor (already done in the preconfigured projects provided with this application):
|
||
- "USE_USB_HS" when using USB High Speed (HS) Core
|
||
- "USE_USB_FS" when using USB Full Speed (FS) Core
|
||
- "USE_USB_HS" and "USE_USB_HS_IN_FS" when using USB High Speed (HS) Core in FS mode
|
||
|
||
@par Keywords
|
||
|
||
Connectivity, USB Device, Full Speed, High Speed, CDC, PSTN, UART, USB-to-RS232, Bridge, VCP, Com port,
|
||
|
||
@Note<74>If the user code size exceeds the DTCM-RAM size or starts from internal cacheable memories (SRAM1 and SRAM2),that is shared between several processors,
|
||
<20><><EFBFBD><EFBFBD><EFBFBD>then it is highly recommended to enable the CPU cache and maintain its coherence at application level.
|
||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>The address and the size of cacheable buffers (shared between CPU and other masters) must be properly updated to be aligned to cache line size (32 bytes).
|
||
|
||
@Note It is recommended to enable the cache and maintain its coherence, but depending on the use case
|
||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> It is also possible to configure the MPU as "Write through", to guarantee the write access coherence.
|
||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>In that case, the MPU must be configured as Cacheable/Bufferable/Not Shareable.
|
||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Even though the user must manage the cache coherence for read accesses.
|
||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Please refer to the AN4838 <20>Managing memory protection unit (MPU) in STM32 MCUs<55>
|
||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Please refer to the AN4839 <20>Level 1 cache on STM32F7 Series<65>
|
||
|
||
@par Directory contents
|
||
|
||
- USB_Device/CDC_Standalone/Src/main.c Main program
|
||
- USB_Device/CDC_Standalone/Src/system_stm32f7xx.c STM32F7xx system clock configuration file
|
||
- USB_Device/CDC_Standalone/Src/stm32f7xx_it.c Interrupt handlers
|
||
- USB_Device/CDC_Standalone/Src/stm32f7xx_hal_msp.c HAL MSP module
|
||
- USB_Device/CDC_Standalone/Src/usbd_cdc_interface.c USBD CDC interface
|
||
- USB_Device/CDC_Standalone/Src/usbd_conf.c General low level driver configuration
|
||
- USB_Device/CDC_Standalone/Src/usbd_desc.c USB device CDC descriptor
|
||
- USB_Device/CDC_Standalone/Inc/main.h Main program header file
|
||
- USB_Device/CDC_Standalone/Inc/stm32f7xx_it.h Interrupt handlers header file
|
||
- USB_Device/CDC_Standalone/Inc/stm32f7xx_hal_conf.h HAL configuration file
|
||
- USB_Device/CDC_Standalone/Inc/usbd_conf.h USB device driver Configuration file
|
||
- USB_Device/CDC_Standalone/Inc/usbd_desc.h USB device MSC descriptor header file
|
||
- USB_Device/CDC_Standalone/Inc/usbd_cdc_interface.h USBD CDC interface header file
|
||
|
||
|
||
@par Hardware and Software environment
|
||
|
||
- This application runs on STM32F767xx/STM32F769xx/STM32F777xx/STM32F779xx devices.
|
||
|
||
- This application has been tested with STMicroelectronics STM32F769I-EVAL
|
||
evaluation boards and can be easily tailored to any other supported device
|
||
and development board.
|
||
|
||
- STM32F769I-EVAL Set-up
|
||
- Connect the STM32F769I_EVAL board to the PC through 'USB micro A-Male
|
||
to A-Male' cable to the connector:
|
||
- CN8 : to use USB High Speed (HS)
|
||
- CN13: to use USB Full Speed (FS)
|
||
- CN14: to use USB HS-IN-FS.
|
||
Note that some FS signals are shared with the HS ULPI bus, so some PCB rework is needed.
|
||
For more details, refer to section "USB OTG2 HS & FS" in STM32F769I_EVAL Evaluation Board
|
||
User Manual.
|
||
|
||
- Connect the STM32F769I-EVAL board to the PC (or to another evaluation board) through RS232 (USART)
|
||
serial cable CN7 (USART1) connector.
|
||
@note Make sure that jumper JP11 is fitted.
|
||
- For loopback mode test: remove RS232 cable on CN7 and connect directly USART TX and RX pins:
|
||
PA9 and PA10 (with a cable or a jumper)
|
||
|
||
|
||
@par How to use it ?
|
||
|
||
In order to make the program work, you must do the following :
|
||
- Open your preferred toolchain
|
||
- Rebuild all files and load your image into target memory
|
||
- In the workspace toolbar select the project configuration:
|
||
- STM327x6G_EVAL_USBH-HS: to configure the project for STM32F7xx devices using USB OTG HS peripheral
|
||
- STM327x6G_EVAL_USBH-FS: to configure the project for STM32F7xx devices using USB OTG FS peripheral
|
||
- STM327x6G_EVAL_USBH-HS-IN-FS: to configure the project for STM32F7xx devices and use USB OTG HS
|
||
peripheral In FS (using embedded PHY).
|
||
- Run the application
|
||
- Install the USB virtual COM port driver
|
||
- Find out the number of the COM port assigned to the STM32 CDC device
|
||
- Open a serial terminal application and start the communication
|
||
|
||
* <h3><center>© COPYRIGHT STMicroelectronics</center></h3>
|
||
*/
|