X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2Fstm%2Fao_serial_stm.c;h=3cebc0944d1359ecc828d6b8e34ca72382cbb062;hb=51aef5d4fc29986353ad887f4a67ed2fe35f8c8e;hp=95189f0c6704d1080b5dcbc947e82b55293810f1;hpb=c9e61a4f1f0ce5e5177a2252e8b7a02a578e77f1;p=fw%2Faltos diff --git a/src/stm/ao_serial_stm.c b/src/stm/ao_serial_stm.c index 95189f0c..3cebc094 100644 --- a/src/stm/ao_serial_stm.c +++ b/src/stm/ao_serial_stm.c @@ -116,16 +116,16 @@ static const struct { uint32_t brr; } ao_usart_speeds[] = { [AO_SERIAL_SPEED_4800] = { - STM_APB1 / 4800 + AO_PCLK1 / 4800 }, [AO_SERIAL_SPEED_9600] = { - STM_APB1 / 9600 + AO_PCLK1 / 9600 }, [AO_SERIAL_SPEED_19200] = { - STM_APB1 / 19200 + AO_PCLK1 / 19200 }, [AO_SERIAL_SPEED_57600] = { - STM_APB1 / 57600 + AO_PCLK1 / 57600 }, }; @@ -134,7 +134,7 @@ ao_usart_set_speed(struct ao_stm_usart *usart, uint8_t speed) { if (speed > AO_SERIAL_SPEED_57600) return; - stm_usart1.brr = ao_usart_speeds[speed].brr; + usart->reg->brr = ao_usart_speeds[speed].brr; } void @@ -189,7 +189,6 @@ struct ao_stm_usart ao_stm_usart1; void stm_usart1_isr(void) { ao_usart_isr(&ao_stm_usart1, USE_SERIAL_1_STDIN); } -#if USE_SERIAL_1_STDIN char ao_serial1_getchar(void) { @@ -207,7 +206,12 @@ ao_serial1_pollchar(void) { return ao_usart_pollchar(&ao_stm_usart1); } -#endif /* USE_SERIAL_1_STDIN */ + +void +ao_serial1_set_speed(uint8_t speed) +{ + ao_usart_set_speed(&ao_stm_usart1, speed); +} #endif /* HAS_SERIAL_1 */ #if HAS_SERIAL_2 @@ -216,7 +220,6 @@ struct ao_stm_usart ao_stm_usart2; void stm_usart2_isr(void) { ao_usart_isr(&ao_stm_usart2, USE_SERIAL_2_STDIN); } -#if USE_SERIAL_2_STDIN char ao_serial2_getchar(void) { @@ -234,7 +237,12 @@ ao_serial2_pollchar(void) { return ao_usart_pollchar(&ao_stm_usart2); } -#endif /* USE_SERIAL_2_STDIN */ + +void +ao_serial2_set_speed(uint8_t speed) +{ + ao_usart_set_speed(&ao_stm_usart2, speed); +} #endif /* HAS_SERIAL_2 */ #if HAS_SERIAL_3 @@ -243,7 +251,6 @@ struct ao_stm_usart ao_stm_usart3; void stm_usart3_isr(void) { ao_usart_isr(&ao_stm_usart3, USE_SERIAL_3_STDIN); } -#if USE_SERIAL_3_STDIN char ao_serial3_getchar(void) { @@ -259,9 +266,14 @@ ao_serial3_putchar(char c) char ao_serial3_pollchar(void) { - return ao_usart_pollchar(&ao_stm_usart2); + return ao_usart_pollchar(&ao_stm_usart3); +} + +void +ao_serial3_set_speed(uint8_t speed) +{ + ao_usart_set_speed(&ao_stm_usart3, speed); } -#endif /* USE_SERIAL_3_STDIN */ #endif /* HAS_SERIAL_3 */ void @@ -291,8 +303,8 @@ ao_serial_init(void) #endif /* Enable USART */ stm_rcc.apb2enr |= (1 << STM_RCC_APB2ENR_USART1EN); - ao_stm_usart1.reg = &stm_usart1; + ao_stm_usart1.reg = &stm_usart1; ao_usart_init(&ao_stm_usart1); stm_nvic_set_enable(STM_ISR_USART1_POS); @@ -370,7 +382,6 @@ ao_serial_init(void) #endif #endif #endif - /* Enable USART */ stm_rcc.apb1enr |= (1 << STM_RCC_APB1ENR_USART3EN);