/**
******************************************************************************
* @file com.c
* @author MCD Application Team
* @brief COM module.
* This file provides set of firmware functions to manage Com
* functionalities.
******************************************************************************
* @attention
*
*
© Copyright (c) 2020 STMicroelectronics.
* All rights reserved.
*
* This software component is licensed by ST under Ultimate Liberty license
* SLA0044, the "License"; You may not use this file except in compliance with
* the License. You may obtain a copy of the License at:
* www.st.com/SLA0044
*
******************************************************************************
*/
/* Includes ------------------------------------------------------------------*/
#include "com.h"
#include "stm32wlxx_hal.h"
/** @addtogroup USER_APP User App Example
* @{
*/
/** @addtogroup USER_APP_COMMON Common
* @{
*/
/** @defgroup COM_Private_Defines Private Defines
* @{
*/
#if defined (__ICCARM__) || (__ARMCC_VERSION)
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#elif defined(__GNUC__) && !defined(__ARMCC_VERSION)
/* With GCC, small printf (option LD Linker->Libraries->Small printf
set to 'Yes') calls __io_putchar() */
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#endif /* __GNUC__ */
/**
* @}
*/
/** @defgroup COM_Private_Variables Exported Variables
* @{
*/
static UART_HandleTypeDef UartHandle; /*!< Uart Handler*/
/**
* @}
*/
/** @defgroup COM_Exported_Functions Exported Functions
* @{
*/
/** @defgroup COM_Initialization_Functions Initialization Functions
* @{
*/
/**
* @brief Initialize COM module.
* @param None.
* @retval HAL Status.
*/
HAL_StatusTypeDef COM_Init(void)
{
#if defined(__GNUC__)
setvbuf(stdout, NULL, _IONBF, 0);
#endif /* __GNUC__ */
/* USART resources configuration (Clock, GPIO pins and USART registers) ----*/
/* USART configured as follow:
- BaudRate = 115200 baud
- Word Length = 8 Bits
- One Stop Bit
- No parity
- Hardware flow control disabled (RTS and CTS signals)
- Receive and transmit enabled
*/
UartHandle.Instance = COM_UART;
UartHandle.Init.BaudRate = 115200U;
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_RX | UART_MODE_TX;
UartHandle.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_RXOVERRUNDISABLE_INIT;
UartHandle.AdvancedInit.OverrunDisable = UART_ADVFEATURE_OVERRUN_DISABLE;
return HAL_UART_Init(&UartHandle);
}
/**
* @brief DeInitialize COM module.
* @retval None.
* @retval HAL Status.
*/
HAL_StatusTypeDef COM_DeInit(void)
{
/*
* ADD SRC CODE HERE
* ...
*/
return HAL_OK;
}
/**
* @brief UART MSP Init.
* @param huart: UART handler pointer.
* @retval None.
*/
void HAL_UART_MspInit(UART_HandleTypeDef *huart)
{
GPIO_InitTypeDef GPIO_InitStruct;
if (huart->Instance == COM_UART)
{
/* Peripheral Clock Enable */
COM_UART_CLK_ENABLE();
/* GPIO Ports Clock Enable */
COM_UART_TX_GPIO_CLK_ENABLE();
COM_UART_RX_GPIO_CLK_ENABLE();
/*Configure GPIO pins : COM_UART_TX_Pin */
GPIO_InitStruct.Pin = COM_UART_TX_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.Alternate = COM_UART_TX_AF;
HAL_GPIO_Init(COM_UART_TX_GPIO_PORT, &GPIO_InitStruct);
/*Configure GPIO pins : COM_UART_RX_Pin */
GPIO_InitStruct.Pin = COM_UART_RX_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.Alternate = COM_UART_RX_AF;
HAL_GPIO_Init(COM_UART_RX_GPIO_PORT, &GPIO_InitStruct);
}
}
/**
* @brief UART MSP DeInit.
* @param huart: UART handler pointer.
* @retval None.
*/
void HAL_UART_MspDeInit(UART_HandleTypeDef *huart)
{
if (huart->Instance == COM_UART)
{
/* Peripheral clock disable */
COM_UART_CLK_DISABLE();
HAL_GPIO_DeInit(COM_UART_TX_GPIO_PORT, COM_UART_TX_PIN);
HAL_GPIO_DeInit(COM_UART_RX_GPIO_PORT, COM_UART_RX_PIN);
}
}
/**
* @}
*/
/** @defgroup COM_Control_Functions Control Functions
* @{
*/
/**
* @brief Transmit Data.
* @param uDataLength: Data pointer to the Data to transmit.
* @param uTimeout: Timeout duration.
* @retval Status of the Transmit operation.
*/
HAL_StatusTypeDef COM_Transmit(uint8_t *Data, uint16_t uDataLength, uint32_t uTimeout)
{
return HAL_UART_Transmit(&UartHandle, (uint8_t *)Data, uDataLength, uTimeout);
}
/**
* @brief Receive Data.
* @param uDataLength: Data pointer to the Data to receive.
* @param uTimeout: Timeout duration.
* @retval Status of the Receive operation.
*/
HAL_StatusTypeDef COM_Receive(uint8_t *Data, uint16_t uDataLength, uint32_t uTimeout)
{
return HAL_UART_Receive(&UartHandle, (uint8_t *)Data, uDataLength, uTimeout);
}
/**
* @brief Flush COM Input.
* @param None.
* @retval HAL_Status.
*/
HAL_StatusTypeDef COM_Flush(void)
{
/* Clean the input path */
__HAL_UART_FLUSH_DRREGISTER(&UartHandle);
return HAL_OK;
}
/**
* @}
*/
/** @addtogroup COM_Private_Functions
* @{
*/
/**
* @}
*/
/** @defgroup COM_Callback_Functions Callback Functions
* @{
*/
/**
* @brief Retargets the C library printf function to the USART.
* @param None
* @retval ch
*/
PUTCHAR_PROTOTYPE
{
/* Place your implementation of fputc here */
/* e.g. write a character to the USART1 and Loop until the end of transmission */
HAL_UART_Transmit(&UartHandle, (uint8_t *)&ch, 1U, 0xFFFFU);
return ch;
}
/**
* @brief Ymodem Header Packet Transfer completed callback.
* @param FileSize Dimension of the file that will be received.
* @retval None
*/
__weak HAL_StatusTypeDef Ymodem_HeaderPktRxCpltCallback(uint32_t uFileSize)
{
/* NOTE : This function should not be modified, when the callback is needed,
the Ymodem_HeaderPktRxCpltCallback could be implemented in the user file
*/
return HAL_OK;
}
/**
* @brief Ymodem Data Packet Transfer completed callback.
* @param pData Pointer to the buffer.
* @param Size Packet dimension.
* @retval None
*/
__weak HAL_StatusTypeDef Ymodem_DataPktRxCpltCallback(uint8_t *pData, uint32_t uFlashDestination, uint32_t uSize)
{
/* NOTE : This function should not be modified, when the callback is needed,
the Ymodem_DataPktRxCpltCallback could be implemented in the user file
*/
return HAL_OK;
}
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/