From 2a543d1139ea01c105b4d1e2d846d5b58541d2f8 Mon Sep 17 00:00:00 2001 From: ZYQ-FEIYUE <1404806582@qq.com> Date: Sun, 25 Dec 2022 21:27:14 +0800 Subject: [PATCH] Serial port to rectify odd and even check problems --- cores/arduino/HardwareSerial.cpp | 35 ++++---- cores/arduino/HardwareSerial.h | 27 +++---- cores/arduino/Print.cpp | 20 ++--- cores/arduino/Print.h | 4 +- .../examples/01.Basics/Blink/Blink.ino | 81 ++++++++++++------- 5 files changed, 87 insertions(+), 80 deletions(-) diff --git a/cores/arduino/HardwareSerial.cpp b/cores/arduino/HardwareSerial.cpp index 4ff30a3..2ee85c8 100644 --- a/cores/arduino/HardwareSerial.cpp +++ b/cores/arduino/HardwareSerial.cpp @@ -34,31 +34,32 @@ typedef struct static const SERIAL_ConfigGrp_t SERIAL_ConfigGrp[] = { + {USART_DATA_8BITS, USART_PARITY_EVEN, USART_STOP_1_BIT}, // SERIAL_7E1 + {USART_DATA_8BITS, USART_PARITY_EVEN, USART_STOP_2_BIT}, // SERIAL_7E2 + {USART_DATA_8BITS, USART_PARITY_ODD, USART_STOP_1_BIT}, // SERIAL_7O1 + {USART_DATA_8BITS, USART_PARITY_ODD, USART_STOP_2_BIT}, // SERIAL_7O2 + {USART_DATA_8BITS, USART_PARITY_EVEN, USART_STOP_0_5_BIT}, // SERIAL_7E0_5 + {USART_DATA_8BITS, USART_PARITY_EVEN, USART_STOP_1_5_BIT}, // SERIAL_7E1_5 + {USART_DATA_8BITS, USART_PARITY_ODD, USART_STOP_0_5_BIT}, // SERIAL_7O0_5 + {USART_DATA_8BITS, USART_PARITY_ODD, USART_STOP_1_5_BIT}, // SERIAL_7O1_5 + {USART_DATA_8BITS, USART_PARITY_NONE, USART_STOP_1_BIT}, // SERIAL_8N1 {USART_DATA_8BITS, USART_PARITY_NONE, USART_STOP_2_BIT}, // SERIAL_8N2 - {USART_DATA_8BITS, USART_PARITY_EVEN, USART_STOP_1_BIT}, // SERIAL_8E1 - {USART_DATA_8BITS, USART_PARITY_EVEN, USART_STOP_2_BIT}, // SERIAL_8E2 - {USART_DATA_8BITS, USART_PARITY_ODD, USART_STOP_1_BIT}, // SERIAL_8O1 - {USART_DATA_8BITS, USART_PARITY_ODD, USART_STOP_2_BIT}, // SERIAL_8O2 + {USART_DATA_9BITS, USART_PARITY_EVEN, USART_STOP_1_BIT}, // SERIAL_8E1 + {USART_DATA_9BITS, USART_PARITY_EVEN, USART_STOP_2_BIT}, // SERIAL_8E2 + {USART_DATA_9BITS, USART_PARITY_ODD, USART_STOP_1_BIT}, // SERIAL_8O1 + {USART_DATA_9BITS, USART_PARITY_ODD, USART_STOP_2_BIT}, // SERIAL_8O2 {USART_DATA_8BITS, USART_PARITY_NONE, USART_STOP_0_5_BIT}, // SERIAL_8N0_5 {USART_DATA_8BITS, USART_PARITY_NONE, USART_STOP_1_5_BIT}, // SERIAL_8N1_5 - {USART_DATA_8BITS, USART_PARITY_EVEN, USART_STOP_0_5_BIT}, // SERIAL_8E0_5 - {USART_DATA_8BITS, USART_PARITY_EVEN, USART_STOP_1_5_BIT}, // SERIAL_8E1_5 - {USART_DATA_8BITS, USART_PARITY_ODD, USART_STOP_0_5_BIT}, // SERIAL_8O0_5 - {USART_DATA_8BITS, USART_PARITY_ODD, USART_STOP_1_5_BIT}, // SERIAL_8O1_5 + {USART_DATA_9BITS, USART_PARITY_EVEN, USART_STOP_0_5_BIT}, // SERIAL_8E0_5 + {USART_DATA_9BITS, USART_PARITY_EVEN, USART_STOP_1_5_BIT}, // SERIAL_8E1_5 + {USART_DATA_9BITS, USART_PARITY_ODD, USART_STOP_0_5_BIT}, // SERIAL_8O0_5 + {USART_DATA_9BITS, USART_PARITY_ODD, USART_STOP_1_5_BIT}, // SERIAL_8O1_5 {USART_DATA_9BITS, USART_PARITY_NONE, USART_STOP_1_BIT}, // SERIAL_9N1 {USART_DATA_9BITS, USART_PARITY_NONE, USART_STOP_2_BIT}, // SERIAL_9N2 - {USART_DATA_9BITS, USART_PARITY_EVEN, USART_STOP_1_BIT}, // SERIAL_9E1 - {USART_DATA_9BITS, USART_PARITY_EVEN, USART_STOP_2_BIT}, // SERIAL_9E2 - {USART_DATA_9BITS, USART_PARITY_ODD, USART_STOP_1_BIT}, // SERIAL_9O1 - {USART_DATA_9BITS, USART_PARITY_ODD, USART_STOP_2_BIT}, // SERIAL_9O2 {USART_DATA_9BITS, USART_PARITY_NONE, USART_STOP_0_5_BIT}, // SERIAL_9N0_5 {USART_DATA_9BITS, USART_PARITY_NONE, USART_STOP_1_5_BIT}, // SERIAL_9N1_5 - {USART_DATA_9BITS, USART_PARITY_EVEN, USART_STOP_0_5_BIT}, // SERIAL_9E0_5 - {USART_DATA_9BITS, USART_PARITY_EVEN, USART_STOP_1_5_BIT}, // SERIAL_9E1_5 - {USART_DATA_9BITS, USART_PARITY_ODD, USART_STOP_0_5_BIT}, // SERIAL_9O0_5 - {USART_DATA_9BITS, USART_PARITY_ODD, USART_STOP_1_5_BIT}, // SERIAL_9O1_5 }; /** * @brief 串口对象构造函数 @@ -392,4 +393,4 @@ extern "C" SERIAL_8_IRQ_HANDLER_DEF() { Serial8.IRQHandler(); } -#endif \ No newline at end of file +#endif diff --git a/cores/arduino/HardwareSerial.h b/cores/arduino/HardwareSerial.h index 11e8f6c..00f5fe8 100644 --- a/cores/arduino/HardwareSerial.h +++ b/cores/arduino/HardwareSerial.h @@ -29,6 +29,15 @@ typedef enum { + SERIAL_7E1, + SERIAL_7E2, + SERIAL_7O1, + SERIAL_7O2, + SERIAL_7E0_5, + SERIAL_7E1_5, + SERIAL_7O0_5, + SERIAL_7O1_5, + SERIAL_8N1, SERIAL_8N2, SERIAL_8E1, @@ -44,16 +53,8 @@ typedef enum SERIAL_9N1, SERIAL_9N2, - SERIAL_9E1, - SERIAL_9E2, - SERIAL_9O1, - SERIAL_9O2, SERIAL_9N0_5, SERIAL_9N1_5, - SERIAL_9E0_5, - SERIAL_9E1_5, - SERIAL_9O0_5, - SERIAL_9O1_5, } SERIAL_Config_t; class HardwareSerial : public Stream @@ -134,14 +135,4 @@ extern HardwareSerial Serial4; extern HardwareSerial Serial5; #endif -#if SERIAL_6_ENABLE -extern HardwareSerial Serial6; -#endif -#if SERIAL_7_ENABLE -extern HardwareSerial Serial7; -#endif -#if SERIAL_8_ENABLE -extern HardwareSerial Serial8; -#endif - #endif diff --git a/cores/arduino/Print.cpp b/cores/arduino/Print.cpp index 09223c4..525d70a 100644 --- a/cores/arduino/Print.cpp +++ b/cores/arduino/Print.cpp @@ -294,22 +294,16 @@ extern "C" { return len; } } - +#ifdef SUPPORTS_PRINTF int Print::printf (const char *__restrict __format, ...) { - // char printf_buff[PRINT_PRINTF_BUFFER_LENGTH]; + char printf_buff[PRINT_PRINTF_BUFFER_LENGTH]; - // va_list args; - // va_start(args, __format); - // int ret_status = vsnprintf(printf_buff, sizeof(printf_buff), __format, args); - // va_end(args); - // print(printf_buff); - // return ret_status; - FILE *__restrict __stream; - int ret_status = 0; va_list args; - va_start(args,__format); - ret_status = vfprintf(__stream, __format, args); + va_start(args, __format); + int ret_status = vsnprintf(printf_buff, sizeof(printf_buff), __format, args); va_end(args); - return ret_status; + print(printf_buff); + return ret_status; } +#endif diff --git a/cores/arduino/Print.h b/cores/arduino/Print.h index 343cae6..03dfc0a 100644 --- a/cores/arduino/Print.h +++ b/cores/arduino/Print.h @@ -100,9 +100,9 @@ public: size_t println(double, int = 2); size_t println(const Printable&); size_t println(void); - +#ifdef SUPPORTS_PRINTF int printf(const char * format, ...); - +#endif virtual void flush() { /* Empty implementation for backward compatibility */ } }; diff --git a/libraries/Generic_Examples/examples/01.Basics/Blink/Blink.ino b/libraries/Generic_Examples/examples/01.Basics/Blink/Blink.ino index 32d7b88..9164f3b 100644 --- a/libraries/Generic_Examples/examples/01.Basics/Blink/Blink.ino +++ b/libraries/Generic_Examples/examples/01.Basics/Blink/Blink.ino @@ -1,37 +1,58 @@ -/* - Blink +// base class GxEPD2_GFX can be used to pass references or pointers to the display instance as parameter, uses ~1.2k more code +// enable or disable GxEPD2_GFX base class +#define ENABLE_GxEPD2_GFX 0 - Turns an LED on for one second, then off for one second, repeatedly. +#include +#include +#include - Most Arduinos have an on-board LED you can control. On the UNO, MEGA and ZERO - it is attached to digital pin 13, on MKR1000 on pin 6. LED_BUILTIN is set to - the correct LED pin independent of which board is used. - If you want to know what pin the on-board LED is connected to on your Arduino - model, check the Technical Specs of your board at: - https://www.arduino.cc/en/Main/Products +// ESP32-C3 SS=7,SCL(SCK)=4,SDA(MOSI)=6,BUSY=3,RST=2,DC=1 +GxEPD2_BW display(GxEPD2_213_B74(/*CS=5*/ SS, /*DC=*/ 1, /*RST=*/ 2, /*BUSY=*/ 3)); // GDEM0213B74 122x250, SSD1680 +//GxEPD2_3C display(GxEPD2_213_Z98c(/*CS=5*/ SS, /*DC=*/ 1, /*RST=*/ 2, /*BUSY=*/ 3)); // GDEY0213Z98 122x250, SSD1680 - modified 8 May 2014 - by Scott Fitzgerald - modified 2 Sep 2016 - by Arturo Guadalupi - modified 8 Sep 2016 - by Colby Newman - - This example code is in the public domain. - - https://www.arduino.cc/en/Tutorial/BuiltInExamples/Blink -*/ - -// the setup function runs once when you press reset or power the board -void setup() { - // initialize digital pin LED_BUILTIN as an output. - pinMode(PC13, OUTPUT); +void setup() +{ + pinMode(8, OUTPUT); + digitalWrite(8, HIGH); + + display.init(115200,true,50,false); + helloWorld(); + display.hibernate(); +} + +const char HelloWorld[] = "Hello World!"; +const char HelloWeACtStudio[] = "Hello WeAct Studio!"; + +void helloWorld() +{ + display.setRotation(1); + display.setFont(&FreeMonoBold9pt7b); + display.setTextColor(GxEPD_BLACK); + int16_t tbx, tby; uint16_t tbw, tbh; + display.getTextBounds(HelloWorld, 0, 0, &tbx, &tby, &tbw, &tbh); + // center the bounding box by transposition of the origin: + uint16_t x = ((display.width() - tbw) / 2) - tbx; + uint16_t y = ((display.height() - tbh) / 2) - tby; + display.setFullWindow(); + display.firstPage(); + do + { + display.fillScreen(GxEPD_WHITE); + display.setCursor(x, y-tbh); + display.print(HelloWorld); + display.setTextColor(display.epd2.hasColor ? GxEPD_RED : GxEPD_BLACK); + display.getTextBounds(HelloWeACtStudio, 0, 0, &tbx, &tby, &tbw, &tbh); + x = ((display.width() - tbw) / 2) - tbx; + display.setCursor(x, y+2*tbh); + display.print(HelloWeACtStudio); + } + while (display.nextPage()); } -// the loop function runs over and over again forever void loop() { - digitalWrite(PC13, HIGH); // turn the LED on (HIGH is the voltage level) - delay(1000); // wait for a second - digitalWrite(PC13, LOW); // turn the LED off by making the voltage LOW - delay(1000); // wait for a second + // put your main code here, to run repeatedly: + digitalWrite(8, HIGH); + delay(1000); + digitalWrite(8, LOW); + delay(1000); }