2024.06.15
오늘 SKR V1.4가 도착해서 이리저리 보다가 WiFi 연결단자 확인.
ESP-01 연결하도록 되어 있다.
3.3V, GND, RX, TX
연결하고 USB 꽂으니 아무런 반응이 없다. -> 보드 중앙에 USB/VCC 선택 점퍼가 있어 USB로 변경
-> 전원은 들어오나 LED 변화가 없다.
LPC1768 의 Serial Port 를 이용해서 ESP-01과 연결시도
1. Arduino IDE를 열어서 확인 했으나 보드나 칩이 없다
-> NXP LPC1768은 지원안함
2. PlatformIO에서 platformio.ini를 수정하면 자동으로 nxplpc 관련 라이브러리가 추가된다.
[platformio]
[env:lpc1768]
platform = nxplpc
board = lpc1768
upload_protocol = mbed
Copilot 을 통해서 multiple serial 코드 작성
#include "mbed.h"
// Define UART pins (TXD0 and RXD0)
Serial uart_usb(USBTX, USBRX); // USB serial for debugging
Serial uart_sw(P4_28, P4_29); // UART0 (pins P0.2 and P0.3)
int main() {
uart_usb.baud(115200); // Set baud rate for USB serial
uart_sw.baud(115200); // Set baud rate for UART0
while (1) {
// Read data from UART0 and send it via USB serial
if (uart_sw.readable()) {
char data = uart_sw.getc();
uart_usb.putc(data);
}
// Read data from USB serial and send it via UART0
if (uart_usb.readable()) {
char data = uart_usb.getc();
uart_sw.putc(data);
}
}
}
문제는 mbed.h가 없다고 나온다 -> mbedos = ARM용 IOT OS
mbed.h를 다운받았으나 파일 하나로 안된다.
전체 라이브러리를 받았으나 엄청크로 include하기 힘들다.
검색후 framework를 추가 했더니 mbed관련 라이브러리가 자동 설치된다.
[platformio]
[env:lpc1768]
platform = nxplpc
framework = mbed
board = lpc1768
upload_protocol = mbed
그러나 Serial 타입이 없다고 에러
mbed 안쓰는 환경 코드 추천 받음
#include <LPC17xx.h>
// Define software serial pins (P4_28 and P4_29)
#define SW_SERIAL_TX P4_28
#define SW_SERIAL_RX P4_29
void initSoftwareSerial() {
// Initialize GPIO pins for software serial
LPC_PINCON->PINSEL9 &= ~(0xF << 24); // Clear bits for P4_28
LPC_PINCON->PINSEL9 &= ~(0xF << 28); // Clear bits for P4_29
LPC_PINCON->PINSEL9 |= (0x1 << 24); // Set P4_28 as GPIO
LPC_PINCON->PINSEL9 |= (0x1 << 28); // Set P4_29 as GPIO
// Set pins as outputs (TX) and inputs (RX)
LPC_GPIO4->FIODIR |= (1 << 28); // TX (output)
LPC_GPIO4->FIODIR &= ~(1 << 29); // RX (input)
}
void sendViaSoftwareSerial(char data) {
// Send data via software serial (bit-banging)
for (int i = 0; i < 8; ++i) {
// Set TX pin high or low based on data bit
if (data & (1 << i)) {
LPC_GPIO4->FIOSET = (1 << 28); // Set TX high
} else {
LPC_GPIO4->FIOCLR = (1 << 28); // Set TX low
}
// Delay (adjust as needed)
for (volatile int j = 0; j < 1000; ++j) {
// Wait
}
}
}
char receiveViaSoftwareSerial() {
// Receive data via software serial
char receivedData = 0;
for (int i = 0; i < 8; ++i) {
// Sample RX pin (adjust timing as needed)
if (LPC_GPIO4->FIOPIN & (1 << 29)) {
receivedData |= (1 << i); // Set corresponding data bit
}
// Delay (adjust as needed for baud rate)
for (volatile int j = 0; j < 1000; ++j) {
// Wait
}
}
return receivedData;
}
void initUSBSerial() {
// Initialize USB serial (Virtual COM Port)
// No specific pins needed for USB serial
// Configure USB serial settings (baud rate, etc.)
LPC_UART0->LCR = 0x83; // 8-bit data, 1 stop bit, no parity
LPC_UART0->DLL = 9; // Set baud rate (115200 bps for PCLK = 25 MHz)
LPC_UART0->DLM = 0;
// Enable USB serial
LPC_UART0->LCR &= ~(1 << 7); // Clear DLAB to enable UART
}
void sendViaUSBSerial(char data) {
while (!(LPC_UART0->LSR & (1 << 5))); // Wait until TX buffer empty
LPC_UART0->THR = data; // Send data via USB serial
}
int main() {
initSoftwareSerial();
initUSBSerial();
while (1) {
// Read data from UART0 and send it via UART1
if (LPC_UART0->LSR & 1) {
char data = LPC_UART0->RBR; // Read received data from UART0
LPC_UART1->THR = data; // Send data via UART1
}
// Read data from UART1 and send it via UART0
if (LPC_UART1->LSR & 1) {
char data = LPC_UART1->RBR; // Read received data from UART1
LPC_UART0->THR = data; // Send data via UART0
}
}
}
#endif
UART0는 HW고 UART1은 SW 인데 엉망이 코드가 되버렸다.
BTT SKR V1.4 회로도를 다시 확인하니 WiFi용 Serial이 RXD3/TXD3로 HW UART다.
#include <LPC17xx.h>
void initUART0() {
// Initialize UART0 pins (P0.2 as TXD0, P0.3 as RXD0)
// Set pin modes and functions (consult the datasheet)
// Configure UART0 settings (baud rate, etc.)
LPC_UART0->LCR = 0x83; // 8-bit data, 1 stop bit, no parity
LPC_UART0->DLL = 9; // Set baud rate (115200 bps for PCLK = 25 MHz)
LPC_UART0->DLM = 0;
// Enable UART0
LPC_UART0->LCR &= ~(1 << 7); // Clear DLAB to enable UART
}
void initUART3() {
// Initialize UART3 pins (P4.28 as TXD3, P4.29 as RXD3)
// Set pin modes and functions (consult the datasheet)
// Configure UART3 settings (baud rate, etc.)
LPC_UART3->LCR = 0x83; // 8-bit data, 1 stop bit, no parity
LPC_UART3->DLL = 9; // Set baud rate (115200 bps for PCLK = 25 MHz)
LPC_UART3->DLM = 0;
// Enable UART3
LPC_UART3->LCR &= ~(1 << 7); // Clear DLAB to enable UART
}
int main() {
initUART0();
initUART3();
while (1) {
// Read data from UART0 and send it via UART3
if (LPC_UART0->LSR & 1) {
char data = LPC_UART0->RBR; // Read received data from UART0
LPC_UART3->THR = data; // Send data via UART3
}
// Read data from UART3 and send it via UART0
if (LPC_UART3->LSR & 1) {
char data = LPC_UART3->RBR; // Read received data from UART3
LPC_UART0->THR = data; // Send data via UART0
}
}
}
src 디렉토리에 LPC17xx.h 와 platform = mbed로 해야 컴파일 에러가 안난다.
빌드가 되어 업로드 하려고 하니 Port 에러 발생
오토를 COM3로 했는데 이제는 *.bin이 없다고 나온다.
업로드 포트 관련 검색하니 이렇게 나온다
https://doitnow-man.tistory.com/entry/3D-printer-firmware-%EA%B0%81%EC%A2%85-%EB%AC%B8%EC%A0%9C-%ED%95%B4%EA%B2%B0
framework을 아두이노로 하고 뭔가를 많이 설정.