From 556bf7b88887934002f456f623bf0e05349666b9 Mon Sep 17 00:00:00 2001 From: cpq Date: Thu, 19 Jan 2023 10:31:26 +0000 Subject: [PATCH] Fix uart_init(), use correct AF for UART1/UART2 --- examples/stm32/nucleo-f429zi-baremetal/mcu.h | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/examples/stm32/nucleo-f429zi-baremetal/mcu.h b/examples/stm32/nucleo-f429zi-baremetal/mcu.h index 6c7e70b0..213feafa 100644 --- a/examples/stm32/nucleo-f429zi-baremetal/mcu.h +++ b/examples/stm32/nucleo-f429zi-baremetal/mcu.h @@ -106,7 +106,7 @@ static inline int gpio_read(uint16_t pin) { } static inline void gpio_write(uint16_t pin, bool val) { struct gpio *gpio = gpio_bank(pin); - gpio->BSRR |= BIT(PINNO(pin)) << (val ? 0 : 16); + gpio->BSRR = BIT(PINNO(pin)) << (val ? 0 : 16); } static inline void gpio_init(uint16_t pin, uint8_t mode, uint8_t type, uint8_t speed, uint8_t pull, uint8_t af) { @@ -161,16 +161,16 @@ struct uart { static inline void uart_init(struct uart *uart, unsigned long baud) { // https://www.st.com/resource/en/datasheet/stm32f429zi.pdf - uint8_t af = 0; // Alternate function + uint8_t af = 7; // Alternate function uint16_t rx = 0, tx = 0; // pins if (uart == UART1) RCC->APB2ENR |= BIT(4); if (uart == UART2) RCC->APB1ENR |= BIT(17); if (uart == UART3) RCC->APB1ENR |= BIT(18); - if (uart == UART1) af = 4, tx = PIN('A', 9), rx = PIN('A', 10); - if (uart == UART2) af = 4, tx = PIN('A', 2), rx = PIN('A', 3); - if (uart == UART3) af = 7, tx = PIN('D', 8), rx = PIN('D', 9); + if (uart == UART1) tx = PIN('A', 9), rx = PIN('A', 10); + if (uart == UART2) tx = PIN('A', 2), rx = PIN('A', 3); + if (uart == UART3) tx = PIN('D', 8), rx = PIN('D', 9); gpio_init(tx, GPIO_MODE_AF, GPIO_OTYPE_PUSH_PULL, GPIO_SPEED_HIGH, 0, af); gpio_init(rx, GPIO_MODE_AF, GPIO_OTYPE_PUSH_PULL, GPIO_SPEED_HIGH, 0, af);