STM32G031은 2개의 UART를 가지고 있다.
UART를 하나 더 추가 해 보자
UART1, UART2 핀맵은 아래와 같이 할당 가능하다.
Aruino 폴더에서 소스 파일을 열어 보면 시리얼 클레스를 확인 할 수 있다.
\arduino\HardwareSerial.cpp
HardwareSerial::HardwareSerial(uint32_t _rx, uint32_t _tx)
{
init(digitalPinToPinName(_rx), digitalPinToPinName(_tx));
}
HardwareSerial::HardwareSerial(PinName _rx, PinName _tx)
{
init(_rx, _tx);
}
HardwareSerial::HardwareSerial(void *peripheral, HalfDuplexMode_t halfDuplex)
{
// If PIN_SERIALy_RX is not defined assume half-duplex
_serial.pin_rx = NC;
// If Serial is defined in variant set
// the Rx/Tx pins for com port if defined
#if defined(Serial) && defined(PIN_SERIAL_TX)
if ((void *)this == (void *)&Serial) {
#if defined(PIN_SERIAL_RX)
setRx(PIN_SERIAL_RX);
#endif
setTx(PIN_SERIAL_TX);
} else
#endif
#if defined(PIN_SERIAL1_TX) && defined(USART1_BASE)
if (peripheral == USART1) {
#if defined(PIN_SERIAL1_RX)
setRx(PIN_SERIAL1_RX);
#endif
setTx(PIN_SERIAL1_TX);
} else
#endif
여러 방법이 있겠지만 아래와 같이 설정하니 문제 없이 두개의 시리얼 포트가 동작 한다.
HardwareSerial Serial1(USART1);
void setup() {
Serial.begin(9600);
Serial.println("Serial Init");
Serial1.setRx(PA3);
Serial1.setTx(PA2);
Serial1.begin(115200);
Serial1.println("Serial1 Init");
}
시리얼 핀맵을 생성자에서 세팅 하는 방법도 있다.
HardwareSerial Serial1(PA3, PA2);
void setup() {
Serial.begin(9600);
Serial.println("Serial Init");
Serial1.begin(115200);
Serial1.println("Serial1 Init");
}
반응형