/****************************************************************************** * @file vcom.c * @author MCD Application Team * @version V1.1.2 * @date 08-September-2017 * @brief manages virtual com port ****************************************************************************** * @attention * *

© Copyright (c) 2017 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. * ****************************************************************************** */ #include "hw.h" #include "vcom.h" #include /* Private typedef -----------------------------------------------------------*/ /* Private define ------------------------------------------------------------*/ #define BUFSIZE 256 #define USARTX_IRQn USART2_IRQn /* Private macro -------------------------------------------------------------*/ /* Private variables ---------------------------------------------------------*/ /* buffer */ static char buff[BUFSIZE]; /* buffer write index*/ __IO uint16_t iw=0; /* buffer read index*/ static uint16_t ir=0; /* Uart Handle */ static UART_HandleTypeDef UartHandle; /* Private function prototypes -----------------------------------------------*/ /* Functions Definition ------------------------------------------------------*/ void vcom_Init(void) { /*## Configure the UART peripheral ######################################*/ /* Put the USART peripheral in the Asynchronous mode (UART Mode) */ /* UART1 configured as follow: - Word Length = 8 Bits - Stop Bit = One Stop bit - Parity = ODD parity - BaudRate = 921600 baud - Hardware flow control disabled (RTS and CTS signals) */ UartHandle.Instance = USARTX; UartHandle.Init.BaudRate = 115200; UartHandle.Init.WordLength = UART_WORDLENGTH_8B; UartHandle.Init.StopBits = UART_STOPBITS_1; UartHandle.Init.Parity = UART_PARITY_NONE; UartHandle.Init.HwFlowCtl = UART_HWCONTROL_NONE; UartHandle.Init.Mode = UART_MODE_TX_RX; if(HAL_UART_Init(&UartHandle) != HAL_OK) { /* Initialization Error */ Error_Handler(); } HAL_NVIC_SetPriority(USARTX_IRQn, 0x1, 0); HAL_NVIC_EnableIRQ(USARTX_IRQn); } void vcom_DeInit(void) { #if 1 HAL_UART_DeInit(&UartHandle); #endif } void vcom_Send( char *format, ... ) { va_list args; va_start(args, format); uint8_t len; uint8_t lenTop; char tempBuff[128]; BACKUP_PRIMASK(); DISABLE_IRQ(); /*convert into string at buff[0] of length iw*/ len = vsprintf(&tempBuff[0], format, args); if (iw+len0 ) { BACKUP_PRIMASK(); DISABLE_IRQ(); CurChar = &buff[ir]; ir= (ir+1) %BUFSIZE; RESTORE_PRIMASK(); HAL_UART_Transmit(&UartHandle,(uint8_t *) CurChar, 1, 300); } HAL_NVIC_ClearPendingIRQ(USARTX_IRQn); } void vcom_Send_Lp( char *format, ... ) { va_list args; va_start(args, format); uint8_t len; uint8_t lenTop; char tempBuff[128]; BACKUP_PRIMASK(); DISABLE_IRQ(); /*convert into string at buff[0] of length iw*/ len = vsprintf(&tempBuff[0], format, args); if (iw+len