File tree Expand file tree Collapse file tree 2 files changed +56
-15
lines changed Expand file tree Collapse file tree 2 files changed +56
-15
lines changed Original file line number Diff line number Diff line change 2626#include < stdio.h>
2727#include < string.h>
2828#include < inttypes.h>
29+ #include < assert.h>
2930#include " Arduino.h"
3031#include " HardwareSerial.h"
3132
@@ -83,15 +84,32 @@ int HardwareSerial::_tx_complete_irq(serial_t* obj)
8384
8485void HardwareSerial::begin (unsigned long baud, byte config)
8586{
87+ uint32_t databits = 0 ;
88+
8689 _serial.baudrate = (uint32_t )baud;
8790
88- // Could be 8 or 9 bits. Could match with Arduino small data length?
89- _serial.databits = UART_WORDLENGTH_8B;
91+ // Manage databits
92+ switch (config & 0x07 ) {
93+ case 0x02 :
94+ databits = 6 ;
95+ break ;
96+ case 0x04 :
97+ databits = 7 ;
98+ break ;
99+ case 0x06 :
100+ databits = 8 ;
101+ break ;
102+ default :
103+ databits = 0 ;
104+ break ;
105+ }
90106
91107 if ((config & 0x30 ) == 0x30 ) {
92108 _serial.parity = UART_PARITY_ODD;
109+ databits++;
93110 } else if ((config & 0x20 ) == 0x20 ) {
94111 _serial.parity = UART_PARITY_EVEN;
112+ databits++;
95113 } else {
96114 _serial.parity = UART_PARITY_NONE;
97115 }
@@ -102,6 +120,25 @@ void HardwareSerial::begin(unsigned long baud, byte config)
102120 _serial.stopbits = UART_STOPBITS_1;
103121 }
104122
123+ switch (databits) {
124+ #ifdef UART_WORDLENGTH_7B
125+ case 7 :
126+ _serial.databits = UART_WORDLENGTH_7B;
127+ break ;
128+ #endif
129+ case 8 :
130+ _serial.databits = UART_WORDLENGTH_8B;
131+ break ;
132+ case 9 :
133+ _serial.databits = UART_WORDLENGTH_9B;
134+ break ;
135+ default :
136+ case 0 :
137+ databits = 0 ;
138+ break ;
139+ }
140+ assert (databits!=0 );
141+
105142 uart_init (&_serial);
106143 uart_attach_rx_callback (&_serial, _rx_complete_irq);
107144}
Original file line number Diff line number Diff line change @@ -57,28 +57,32 @@ typedef uint8_t rx_buffer_index_t;
5757#endif
5858
5959// Define config for Serial.begin(baud, config);
60- #define SERIAL_5N1 0x00
61- #define SERIAL_6N1 0x02
60+ // below configs are not supported by STM32
61+ // #define SERIAL_5N1 0x00
62+ // #define SERIAL_5N2 0x08
63+ // #define SERIAL_5E1 0x20
64+ // #define SERIAL_5E2 0x28
65+ // #define SERIAL_5O1 0x30
66+ // #define SERIAL_5O2 0x38
67+ // #define SERIAL_6N1 0x02
68+ // #define SERIAL_6N2 0x0A
69+
70+ #ifdef UART_WORDLENGTH_7B
6271#define SERIAL_7N1 0x04
63- #define SERIAL_8N1 0x06
64- #define SERIAL_5N2 0x08
65- #define SERIAL_6N2 0x0A
6672#define SERIAL_7N2 0x0C
67- #define SERIAL_8N2 0x0E
68- #define SERIAL_5E1 0x20
6973#define SERIAL_6E1 0x22
74+ #define SERIAL_6E2 0x2A
75+ #define SERIAL_6O1 0x32
76+ #define SERIAL_6O2 0x3A
77+ #endif
78+ #define SERIAL_8N1 0x06
79+ #define SERIAL_8N2 0x0E
7080#define SERIAL_7E1 0x24
7181#define SERIAL_8E1 0x26
72- #define SERIAL_5E2 0x28
73- #define SERIAL_6E2 0x2A
7482#define SERIAL_7E2 0x2C
7583#define SERIAL_8E2 0x2E
76- #define SERIAL_5O1 0x30
77- #define SERIAL_6O1 0x32
7884#define SERIAL_7O1 0x34
7985#define SERIAL_8O1 0x36
80- #define SERIAL_5O2 0x38
81- #define SERIAL_6O2 0x3A
8286#define SERIAL_7O2 0x3C
8387#define SERIAL_8O2 0x3E
8488
You can’t perform that action at this time.
0 commit comments