serial_usart.h (4649B)
1 // Copyright 2021 QMK 2 // SPDX-License-Identifier: GPL-2.0-or-later 3 4 #pragma once 5 6 #include "serial.h" 7 #include <hal.h> 8 9 #if defined(SOFT_SERIAL_PIN) 10 # define SERIAL_USART_TX_PIN SOFT_SERIAL_PIN 11 #endif 12 13 #if !defined(SERIAL_USART_TX_PIN) 14 # define SERIAL_USART_TX_PIN A9 15 #endif 16 17 #if !defined(SERIAL_USART_RX_PIN) 18 # define SERIAL_USART_RX_PIN A10 19 #endif 20 21 #if !defined(SELECT_SOFT_SERIAL_SPEED) 22 # define SELECT_SOFT_SERIAL_SPEED 1 23 #endif 24 25 #if defined(SERIAL_USART_SPEED) 26 // Allow advanced users to directly set SERIAL_USART_SPEED 27 #elif SELECT_SOFT_SERIAL_SPEED == 0 28 # define SERIAL_USART_SPEED 460800 29 #elif SELECT_SOFT_SERIAL_SPEED == 1 30 # define SERIAL_USART_SPEED 230400 31 #elif SELECT_SOFT_SERIAL_SPEED == 2 32 # define SERIAL_USART_SPEED 115200 33 #elif SELECT_SOFT_SERIAL_SPEED == 3 34 # define SERIAL_USART_SPEED 57600 35 #elif SELECT_SOFT_SERIAL_SPEED == 4 36 # define SERIAL_USART_SPEED 38400 37 #elif SELECT_SOFT_SERIAL_SPEED == 5 38 # define SERIAL_USART_SPEED 19200 39 #else 40 # error invalid SELECT_SOFT_SERIAL_SPEED value 41 #endif 42 43 #if !defined(SERIAL_USART_TIMEOUT) 44 # define SERIAL_USART_TIMEOUT 20 45 #endif 46 47 #if HAL_USE_SERIAL 48 49 typedef SerialDriver QMKSerialDriver; 50 typedef SerialConfig QMKSerialConfig; 51 52 # if !defined(SERIAL_USART_DRIVER) 53 # define SERIAL_USART_DRIVER SD1 54 # endif 55 56 #elif HAL_USE_SIO 57 58 typedef SIODriver QMKSerialDriver; 59 typedef SIOConfig QMKSerialConfig; 60 61 # if !defined(SERIAL_USART_DRIVER) 62 # define SERIAL_USART_DRIVER SIOD1 63 # endif 64 65 #endif 66 67 #if !defined(USE_GPIOV1) 68 /* The default PAL alternate modes are used to signal that the pins are used for USART. */ 69 # if !defined(SERIAL_USART_TX_PAL_MODE) 70 # define SERIAL_USART_TX_PAL_MODE 7 71 # endif 72 # if !defined(SERIAL_USART_RX_PAL_MODE) 73 # define SERIAL_USART_RX_PAL_MODE 7 74 # endif 75 #endif 76 77 #if defined(MCU_STM32) /* STM32 MCUs */ 78 # if !defined(USART_CR1_M0) 79 # define USART_CR1_M0 USART_CR1_M // some platforms (f1xx) dont have this so 80 # endif 81 82 # if !defined(SERIAL_USART_CR1) 83 # define SERIAL_USART_CR1 (USART_CR1_PCE | USART_CR1_PS | USART_CR1_M0) // parity enable, odd parity, 9 bit length 84 # endif 85 86 # if !defined(SERIAL_USART_CR2) 87 # define SERIAL_USART_CR2 (USART_CR2_STOP_1) // 2 stop bits 88 # endif 89 90 # if !defined(SERIAL_USART_CR3) 91 # define SERIAL_USART_CR3 0 92 # endif 93 94 # if defined(USART1_REMAP) 95 # define USART_REMAP \ 96 do { \ 97 (AFIO->MAPR |= AFIO_MAPR_USART1_REMAP); \ 98 } while (0) 99 # elif defined(USART2_REMAP) 100 # define USART_REMAP \ 101 do { \ 102 (AFIO->MAPR |= AFIO_MAPR_USART2_REMAP); \ 103 } while (0) 104 # elif defined(USART3_PARTIALREMAP) 105 # define USART_REMAP \ 106 do { \ 107 (AFIO->MAPR |= AFIO_MAPR_USART3_REMAP_PARTIALREMAP); \ 108 } while (0) 109 # elif defined(USART3_FULLREMAP) 110 # define USART_REMAP \ 111 do { \ 112 (AFIO->MAPR |= AFIO_MAPR_USART3_REMAP_FULLREMAP); \ 113 } while (0) 114 # endif 115 #elif defined(MCU_AT32) /* AT32 MCUs */ 116 # if !defined(USART_CTRL1_DBN0) 117 # define USART_CTRL1_DBN0 USART_CTRL1_DBN 118 # endif 119 120 # if !defined(SERIAL_USART_CTRL1) 121 # define SERIAL_USART_CTRL1 (USART_CTRL1_PEN | USART_CTRL1_PSEL | USART_CTRL1_DBN0) // parity enable, odd parity, 9 bit length 122 # endif 123 124 # if !defined(SERIAL_USART_CTRL2) 125 # define SERIAL_USART_CTRL2 (USART_CTRL2_STOPBN_1) // 2 stop bits 126 # endif 127 128 # if !defined(SERIAL_USART_CTRL3) 129 # define SERIAL_USART_CTRL3 0 130 # endif 131 132 # if defined(USART1_REMAP) 133 # define USART_REMAP \ 134 do { \ 135 (IOMUX->REMAP |= IOMUX_REMAP_USART1_MUX); \ 136 } while (0) 137 # elif defined(USART3_PARTIALREMAP) 138 # define USART_REMAP \ 139 do { \ 140 (IOMUX->REMAP |= IOMUX_REMAP_USART3_MUX_MUX1); \ 141 } while (0) 142 # elif defined(USART3_FULLREMAP) 143 # define USART_REMAP \ 144 do { \ 145 (IOMUX->REMAP |= IOMUX_REMAP_USART3_MUX_MUX2); \ 146 } while (0) 147 # endif 148 #endif