Skip to content

Commit fe950a3

Browse files
Merge branch 'master' of https://github.com/stevstrong/Arduino_STM32 into stevstrong-master
2 parents e48ff38 + b920cdc commit fe950a3

3 files changed

Lines changed: 23 additions & 21 deletions

File tree

STM32F1/cores/maple/HardwareSerial.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,11 +141,11 @@ void HardwareSerial::begin(uint32 baud, uint8_t config)
141141

142142
disable_timer_if_necessary(txi->timer_device, txi->timer_channel);
143143

144+
usart_init(this->usart_device);
144145
usart_config_gpios_async(this->usart_device,
145146
rxi->gpio_device, rxi->gpio_bit,
146147
txi->gpio_device, txi->gpio_bit,
147148
config);
148-
usart_init(this->usart_device);
149149
usart_set_baud_rate(this->usart_device, USART_USE_PCLK, baud);
150150
usart_enable(this->usart_device);
151151
}

STM32F1/cores/maple/HardwareSerial.h

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -83,22 +83,25 @@ struct usart_dev;
8383
*/
8484
// Define config for Serial.begin(baud, config);
8585
// Note. STM32 doesn't support as many different Serial modes as AVR or SAM cores.
86+
// The word legth bit M must be set when using parity bit.
8687

8788
#define SERIAL_8N1 0B00000000
8889
#define SERIAL_8N2 0B00100000
8990
#define SERIAL_9N1 0B00001000
9091
#define SERIAL_9N2 0B00101000
9192

92-
#define SERIAL_8E1 0B00000010
93-
#define SERIAL_8E2 0B00100010
93+
#define SERIAL_8E1 0B00001010
94+
#define SERIAL_8E2 0B00101010
95+
/* not supported:
9496
#define SERIAL_9E1 0B00001010
9597
#define SERIAL_9E2 0B00101010
96-
97-
#define SERIAL_8O1 0B00000011
98-
#define SERIAL_8O2 0B00100011
98+
*/
99+
#define SERIAL_8O1 0B00001011
100+
#define SERIAL_8O2 0B00101011
101+
/* not supported:
99102
#define SERIAL_9O1 0B00001011
100103
#define SERIAL_9O2 0B00101011
101-
104+
*/
102105

103106
/* Roger Clark
104107
* Moved macros from hardwareSerial.cpp

STM32F1/cores/maple/libmaple/usart_f1.c

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -108,13 +108,14 @@ void usart_config_gpios_async(usart_dev *udev,
108108
gpio_set_mode(rx_dev, rx, GPIO_INPUT_FLOATING);
109109
gpio_set_mode(tx_dev, tx, GPIO_AF_OUTPUT_PP);
110110
/*
111-
112111
CR1 bit 12 Word length 0=8 1=9
113112
CR1 bit 11 wake (default value is 0) we can safely set this value to 0 (zero) each time
114113
CR1 bit 10 parity enable (1 = enabled)
115114
CR1 bit 9 Parity selection 0 = Even 1 = Odd
116115
CR2 bits 13 and 12 00 = 1 01 = 0.5 10 = 2 11 = 1.5
117116
Not all USARTs support 1.5 or 0.5 bits so its best to avoid them.
117+
When parity enabled the word length must be increased (CR1 bit 12 set).
118+
Word length of 9 bit with parity is not supported.
118119
CR2 CR1
119120
0B00 0000
120121
0B10 0000
@@ -136,21 +137,19 @@ Not all USARTs support 1.5 or 0.5 bits so its best to avoid them.
136137
#define SERIAL_9N1 0B 0000 1000
137138
#define SERIAL_9N2 0B 0010 1000
138139
139-
#define SERIAL_8E1 0B 0000 0010
140-
#define SERIAL_8E2 0B 0010 0010
141-
#define SERIAL_9E1 0B 0000 1010
142-
#define SERIAL_9E2 0B 0010 1010
143-
144-
#define SERIAL_8O1 0B 0000 0011
145-
#define SERIAL_8O2 0B 0010 0011
146-
#define SERIAL_9O1 0B 0000 1011
147-
#define SERIAL_9O2 0B 0010 1011
148-
149-
*/
140+
#define SERIAL_8E1 0B 0000 1010
141+
#define SERIAL_8E2 0B 0010 1010
142+
//#define SERIAL_9E1 0B 0000 1010
143+
//#define SERIAL_9E2 0B 0010 1010
150144
145+
#define SERIAL_8O1 0B 0000 1011
146+
#define SERIAL_8O2 0B 0010 1011
147+
//#define SERIAL_9O1 0B 0000 1011
148+
//#define SERIAL_9O2 0B 0010 1011
149+
*/
151150

152-
udev->regs->CR1 = udev->regs->CR1 ^ ((udev->regs->CR1 ^ (flags&0x0F)<<9 ) & 0B0001111000000000);
153-
udev->regs->CR2 = udev->regs->CR2 ^ ((udev->regs->CR2 ^ (flags&0xF0)<<8 ) & 0B0011000000000000);
151+
udev->regs->CR1 = (udev->regs->CR1 & 0B1110000111111111) | ((uint32_t)(flags&0x0F)<<9);
152+
udev->regs->CR2 = (udev->regs->CR2 & 0B1100111111111111) | ((uint32_t)(flags&0x30)<<8);
154153
}
155154

156155
void usart_set_baud_rate(usart_dev *dev, uint32 clock_speed, uint32 baud) {

0 commit comments

Comments
 (0)