#include #include #include #include "py32f0xx_bsp_printf.h" /** * @brief DEBUG_USART GPIO Config,Mode Config,115200 8-N-1 * @param None * @retval None */ void BSP_USART_Config(uint32_t baudRate) { DEBUG_USART_CLK_ENABLE(); /* USART Init */ LL_USART_SetBaudRate(DEBUG_USART, SystemCoreClock, LL_USART_OVERSAMPLING_16, baudRate); LL_USART_SetDataWidth(DEBUG_USART, LL_USART_DATAWIDTH_8B); LL_USART_SetStopBitsLength(DEBUG_USART, LL_USART_STOPBITS_1); LL_USART_SetParity(DEBUG_USART, LL_USART_PARITY_NONE); LL_USART_SetHWFlowCtrl(DEBUG_USART, LL_USART_HWCONTROL_NONE); LL_USART_SetTransferDirection(DEBUG_USART, LL_USART_DIRECTION_TX_RX); LL_USART_Enable(DEBUG_USART); LL_USART_ClearFlag_TC(DEBUG_USART); /**USART GPIO Configuration PA2 ------> USART1_TX PA3 ------> USART1_RX */ DEBUG_USART_RX_GPIO_CLK_ENABLE(); DEBUG_USART_TX_GPIO_CLK_ENABLE(); LL_GPIO_SetPinMode(DEBUG_USART_TX_GPIO_PORT, DEBUG_USART_TX_PIN, LL_GPIO_MODE_ALTERNATE); LL_GPIO_SetPinSpeed(DEBUG_USART_TX_GPIO_PORT, DEBUG_USART_TX_PIN, LL_GPIO_SPEED_FREQ_VERY_HIGH); LL_GPIO_SetPinPull(DEBUG_USART_TX_GPIO_PORT, DEBUG_USART_TX_PIN, LL_GPIO_PULL_UP); LL_GPIO_SetAFPin_0_7(DEBUG_USART_TX_GPIO_PORT, DEBUG_USART_TX_PIN, DEBUG_USART_TX_AF); LL_GPIO_SetPinMode(DEBUG_USART_RX_GPIO_PORT, DEBUG_USART_RX_PIN, LL_GPIO_MODE_ALTERNATE); LL_GPIO_SetPinSpeed(DEBUG_USART_RX_GPIO_PORT, DEBUG_USART_RX_PIN, LL_GPIO_SPEED_FREQ_VERY_HIGH); LL_GPIO_SetPinPull(DEBUG_USART_RX_GPIO_PORT, DEBUG_USART_RX_PIN, LL_GPIO_PULL_UP); LL_GPIO_SetAFPin_0_7(DEBUG_USART_RX_GPIO_PORT, DEBUG_USART_RX_PIN, DEBUG_USART_RX_AF); } #if defined (__GNUC__) && !defined (__clang__) #define GETCHAR_PROTOTYPE int __io_getchar (void) #define PUTCHAR_PROTOTYPE int __io_putchar(int ch) #else #define GETCHAR_PROTOTYPE int fgetc(FILE * f) #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f) #endif /** * @brief retargets the c library printf function to the usart. * @param none * @retval none */ PUTCHAR_PROTOTYPE { /* Send a byte to USART */ LL_USART_TransmitData8(DEBUG_USART, ch); while (!LL_USART_IsActiveFlag_TC(DEBUG_USART)); LL_USART_ClearFlag_TC(DEBUG_USART); return (ch); } GETCHAR_PROTOTYPE { int ch; while (!LL_USART_IsActiveFlag_RXNE(DEBUG_USART)); ch = LL_USART_ReceiveData8(DEBUG_USART); return (ch); } #if defined (__GNUC__) && !defined (__clang__) __attribute__((weak)) int _write(int file, char *ptr, int len) { (void)file; int DataIdx; for (DataIdx = 0; DataIdx < len; DataIdx++) { __io_putchar(*ptr++); } return len; } #endif __attribute__((weak)) int _read(int file, char *ptr, int len) { (void)file; int DataIdx; for (DataIdx = 0; DataIdx < len; DataIdx++) { *ptr++ = __io_getchar(); } return len; } __attribute__((weak)) int _isatty(int fd) { if (fd >= STDIN_FILENO && fd <= STDERR_FILENO) return 1; errno = EBADF; return 0; } __attribute__((weak)) int _close(int fd) { if (fd >= STDIN_FILENO && fd <= STDERR_FILENO) return 0; errno = EBADF; return -1; } __attribute__((weak)) int _lseek(int fd, int ptr, int dir) { (void)fd; (void)ptr; (void)dir; errno = EBADF; return -1; } __attribute__((weak)) int _fstat(int fd, struct stat *st) { if (fd >= STDIN_FILENO && fd <= STDERR_FILENO) { st->st_mode = S_IFCHR; return 0; } errno = EBADF; return 0; } __attribute__((weak)) int _getpid(void) { errno = ENOSYS; return -1; } __attribute__((weak)) int _kill(pid_t pid, int sig) { (void)pid; (void)sig; errno = ENOSYS; return -1; }