@@ -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-
112111CR1 bit 12 Word length 0=8 1=9
113112CR1 bit 11 wake (default value is 0) we can safely set this value to 0 (zero) each time
114113CR1 bit 10 parity enable (1 = enabled)
115114CR1 bit 9 Parity selection 0 = Even 1 = Odd
116115CR2 bits 13 and 12 00 = 1 01 = 0.5 10 = 2 11 = 1.5
117116Not 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
156155void usart_set_baud_rate (usart_dev * dev , uint32 clock_speed , uint32 baud ) {
0 commit comments