/** * @brief Deactivates the UART peripheral. * * @param[in] uartp pointer to the @p UARTDriver object * * @notapi */ void uart_lld_stop(UARTDriver *uartp) { if (uartp->state == UART_READY) { usart_stop(uartp); dmaStreamRelease(uartp->dmarx); dmaStreamRelease(uartp->dmatx); #if STM32_UART_USE_USART1 if (&UARTD1 == uartp) { nvicDisableVector(STM32_USART1_NUMBER); rccDisableUSART1(); return; } #endif #if STM32_UART_USE_USART2 if (&UARTD2 == uartp) { nvicDisableVector(STM32_USART2_NUMBER); rccDisableUSART2(); return; } #endif #if STM32_UART_USE_USART3 if (&UARTD3 == uartp) { nvicDisableVector(STM32_USART3_NUMBER); rccDisableUSART3(); return; } #endif #if STM32_UART_USE_UART4 if (&UARTD4 == uartp) { nvicDisableVector(STM32_UART4_NUMBER); rccDisableUART4(); return; } #endif #if STM32_UART_USE_UART5 if (&UARTD5 == uartp) { nvicDisableVector(STM32_UART5_NUMBER); rccDisableUART5(); return; } #endif #if STM32_UART_USE_USART6 if (&UARTD6 == uartp) { nvicDisableVector(STM32_USART6_NUMBER); rccDisableUSART6(); return; } #endif } }
/** * @brief Low level serial driver stop. * @details De-initializes the USART, stops the associated clock, resets the * interrupt vector. * * @param[in] sdp pointer to a @p SerialDriver object * * @notapi */ void sd_lld_stop(SerialDriver *sdp) { if (sdp->state == SD_READY) { /* UART is de-initialized then clocks are disabled.*/ usart_deinit(sdp->usart); #if STM32_SERIAL_USE_USART1 if (&SD1 == sdp) { rccDisableUSART1(FALSE); return; } #endif #if STM32_SERIAL_USE_USART2 if (&SD2 == sdp) { rccDisableUSART2(FALSE); return; } #endif #if STM32_SERIAL_USE_USART3 if (&SD3 == sdp) { rccDisableUSART3(FALSE); return; } #endif #if STM32_SERIAL_USE_UART4 if (&SD4 == sdp) { rccDisableUART4(FALSE); return; } #endif #if STM32_SERIAL_USE_UART5 if (&SD5 == sdp) { rccDisableUART5(FALSE); return; } #endif #if STM32_SERIAL_USE_USART6 if (&SD6 == sdp) { rccDisableUSART6(FALSE); return; } #endif #if STM32_SERIAL_USE_UART7 if (&SD7 == sdp) { rccDisableUART7(FALSE); return; } #endif #if STM32_SERIAL_USE_UART8 if (&SD8 == sdp) { rccDisableUART8(FALSE); return; } #endif } }
/** * @brief Low level serial driver stop. * @details De-initializes the USART, stops the associated clock, resets the * interrupt vector. * * @param[in] sdp pointer to a @p SerialDriver object * * @notapi */ void sd_lld_stop(SerialDriver *sdp) { if (sdp->state == SD_READY) { usart_deinit(sdp->usart); #if STM32_SERIAL_USE_USART1 if (&SD1 == sdp) { rccDisableUSART1(FALSE); nvicDisableVector(STM32_USART1_NUMBER); return; } #endif #if STM32_SERIAL_USE_USART2 if (&SD2 == sdp) { rccDisableUSART2(FALSE); nvicDisableVector(STM32_USART2_NUMBER); return; } #endif #if STM32_SERIAL_USE_USART3 if (&SD3 == sdp) { rccDisableUSART3(FALSE); nvicDisableVector(STM32_USART3_NUMBER); return; } #endif #if STM32_SERIAL_USE_UART4 if (&SD4 == sdp) { rccDisableUART4(FALSE); nvicDisableVector(STM32_UART4_NUMBER); return; } #endif #if STM32_SERIAL_USE_UART5 if (&SD5 == sdp) { rccDisableUART5(FALSE); nvicDisableVector(STM32_UART5_NUMBER); return; } #endif #if STM32_SERIAL_USE_USART6 if (&SD6 == sdp) { rccDisableUSART6(FALSE); nvicDisableVector(STM32_USART6_NUMBER); return; } #endif } }