File tree 2 files changed +56
-15
lines changed
2 files changed +56
-15
lines changed Original file line number Diff line number Diff line change 26
26
#include < stdio.h>
27
27
#include < string.h>
28
28
#include < inttypes.h>
29
+ #include < assert.h>
29
30
#include " Arduino.h"
30
31
#include " HardwareSerial.h"
31
32
@@ -83,15 +84,32 @@ int HardwareSerial::_tx_complete_irq(serial_t* obj)
83
84
84
85
void HardwareSerial::begin (unsigned long baud, byte config)
85
86
{
87
+ uint32_t databits = 0 ;
88
+
86
89
_serial.baudrate = (uint32_t )baud;
87
90
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
+ }
90
106
91
107
if ((config & 0x30 ) == 0x30 ) {
92
108
_serial.parity = UART_PARITY_ODD;
109
+ databits++;
93
110
} else if ((config & 0x20 ) == 0x20 ) {
94
111
_serial.parity = UART_PARITY_EVEN;
112
+ databits++;
95
113
} else {
96
114
_serial.parity = UART_PARITY_NONE;
97
115
}
@@ -102,6 +120,25 @@ void HardwareSerial::begin(unsigned long baud, byte config)
102
120
_serial.stopbits = UART_STOPBITS_1;
103
121
}
104
122
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
+
105
142
uart_init (&_serial);
106
143
uart_attach_rx_callback (&_serial, _rx_complete_irq);
107
144
}
Original file line number Diff line number Diff line change @@ -57,28 +57,32 @@ typedef uint8_t rx_buffer_index_t;
57
57
#endif
58
58
59
59
// 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
62
71
#define SERIAL_7N1 0x04
63
- #define SERIAL_8N1 0x06
64
- #define SERIAL_5N2 0x08
65
- #define SERIAL_6N2 0x0A
66
72
#define SERIAL_7N2 0x0C
67
- #define SERIAL_8N2 0x0E
68
- #define SERIAL_5E1 0x20
69
73
#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
70
80
#define SERIAL_7E1 0x24
71
81
#define SERIAL_8E1 0x26
72
- #define SERIAL_5E2 0x28
73
- #define SERIAL_6E2 0x2A
74
82
#define SERIAL_7E2 0x2C
75
83
#define SERIAL_8E2 0x2E
76
- #define SERIAL_5O1 0x30
77
- #define SERIAL_6O1 0x32
78
84
#define SERIAL_7O1 0x34
79
85
#define SERIAL_8O1 0x36
80
- #define SERIAL_5O2 0x38
81
- #define SERIAL_6O2 0x3A
82
86
#define SERIAL_7O2 0x3C
83
87
#define SERIAL_8O2 0x3E
84
88
You can’t perform that action at this time.
0 commit comments