mirror of
				https://github.com/IcedRooibos/py32f0-template.git
				synced 2025-10-30 17:32:05 -07:00 
			
		
		
		
	
		
			
				
	
	
		
			161 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			161 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| #include <sys/stat.h>
 | |
| #include <unistd.h>
 | |
| #include <errno.h>
 | |
| #include "py32f0xx_bsp_printf.h"
 | |
| 
 | |
| #ifdef HAL_UART_MODULE_ENABLED
 | |
| UART_HandleTypeDef DebugUartHandle;
 | |
| 
 | |
| /**
 | |
|   * @brief  DEBUG_USART GPIO Config,Mode Config,115200 8-N-1
 | |
|   * @param  None
 | |
|   * @retval None
 | |
|   */
 | |
| void BSP_USART_Config(void)
 | |
| {
 | |
|   GPIO_InitTypeDef  GPIO_InitStruct;
 | |
| 
 | |
|   DEBUG_USART_CLK_ENABLE();
 | |
| 
 | |
|   DebugUartHandle.Instance          = DEBUG_USART;
 | |
| 
 | |
|   DebugUartHandle.Init.BaudRate     = DEBUG_USART_BAUDRATE;
 | |
|   DebugUartHandle.Init.WordLength   = UART_WORDLENGTH_8B;
 | |
|   DebugUartHandle.Init.StopBits     = UART_STOPBITS_1;
 | |
|   DebugUartHandle.Init.Parity       = UART_PARITY_NONE;
 | |
|   DebugUartHandle.Init.HwFlowCtl    = UART_HWCONTROL_NONE;
 | |
|   DebugUartHandle.Init.Mode         = UART_MODE_TX_RX;
 | |
| 
 | |
|   HAL_UART_Init(&DebugUartHandle);
 | |
| 
 | |
|   DEBUG_USART_RX_GPIO_CLK_ENABLE();
 | |
|   DEBUG_USART_TX_GPIO_CLK_ENABLE();
 | |
| 
 | |
|   /**USART GPIO Configuration
 | |
|     PA2     ------> USART2_TX
 | |
|     PA3     ------> USART2_RX
 | |
|     */
 | |
|   GPIO_InitStruct.Pin = DEBUG_USART_TX_PIN;
 | |
|   GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
 | |
|   GPIO_InitStruct.Pull = GPIO_PULLUP;
 | |
|   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
 | |
|   GPIO_InitStruct.Alternate = DEBUG_USART_TX_AF;
 | |
|   HAL_GPIO_Init(DEBUG_USART_TX_GPIO_PORT, &GPIO_InitStruct);
 | |
| 
 | |
|   GPIO_InitStruct.Pin = DEBUG_USART_RX_PIN;
 | |
|   GPIO_InitStruct.Alternate = DEBUG_USART_RX_AF;
 | |
| 
 | |
|   HAL_GPIO_Init(DEBUG_USART_RX_GPIO_PORT, &GPIO_InitStruct);
 | |
| 
 | |
|   /* ENABLE NVIC */
 | |
|   HAL_NVIC_SetPriority(DEBUG_USART_IRQ,0,1);
 | |
|   HAL_NVIC_EnableIRQ(DEBUG_USART_IRQ );
 | |
| }
 | |
| 
 | |
| #endif
 | |
| 
 | |
| 
 | |
| #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
 | |
| {
 | |
|     HAL_UART_Transmit(&DebugUartHandle, (uint8_t *)&ch, 1, 1000);
 | |
|     return (ch);
 | |
| }
 | |
| 
 | |
| GETCHAR_PROTOTYPE
 | |
| {
 | |
|     int ch;
 | |
|     HAL_UART_Receive(&DebugUartHandle, (uint8_t *)&ch, 1, 1000);
 | |
|     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;
 | |
| }
 | 
