@@ -30,7 +30,46 @@ using namespace arduino;
30
30
31
31
void UART::begin (unsigned long baudrate, uint16_t config) {
32
32
begin (baudrate);
33
- _serial->format ();
33
+ int bits = 8 ;
34
+ mbed::SerialBase::Parity parity = mbed::SerialBase::None;
35
+ int stop_bits = 1 ;
36
+
37
+ switch (config & SERIAL_DATA_MASK) {
38
+ case SERIAL_DATA_7:
39
+ bits = 7 ;
40
+ break ;
41
+ case SERIAL_DATA_8:
42
+ bits = 8 ;
43
+ break ;
44
+ /*
45
+ case SERIAL_DATA_9:
46
+ bits = 9;
47
+ break;
48
+ */
49
+ }
50
+
51
+ switch (config & SERIAL_STOP_BIT_MASK) {
52
+ case SERIAL_STOP_BIT_1:
53
+ stop_bits = 1 ;
54
+ break ;
55
+ case SERIAL_STOP_BIT_2:
56
+ stop_bits = 2 ;
57
+ break ;
58
+ }
59
+
60
+ switch (config & SERIAL_PARITY_MASK) {
61
+ case SERIAL_PARITY_EVEN:
62
+ parity = mbed::SerialBase::Even;
63
+ break ;
64
+ case SERIAL_PARITY_ODD:
65
+ parity = mbed::SerialBase::Odd;
66
+ break ;
67
+ case SERIAL_PARITY_NONE:
68
+ parity = mbed::SerialBase::None;
69
+ break ;
70
+ }
71
+
72
+ _serial->format (bits, parity, stop_bits);
34
73
}
35
74
36
75
void UART::begin (unsigned long baudrate) {
@@ -40,7 +79,9 @@ void UART::begin(unsigned long baudrate) {
40
79
if (rts != NC) {
41
80
_serial->set_flow_control (mbed::SerialBase::Flow::RTSCTS, rts, cts);
42
81
}
43
- _serial->attach (mbed::callback (this , &UART::on_rx), mbed::SerialBase::RxIrq);
82
+ if (_serial != NULL ) {
83
+ _serial->attach (mbed::callback (this , &UART::on_rx), mbed::SerialBase::RxIrq);
84
+ }
44
85
}
45
86
46
87
void UART::on_rx () {
@@ -52,6 +93,7 @@ void UART::on_rx() {
52
93
void UART::end () {
53
94
if (_serial != NULL ) {
54
95
delete _serial;
96
+ _serial = NULL ;
55
97
}
56
98
}
57
99
0 commit comments