diff --git a/MyDrivers/MyUSART.c b/MyDrivers/MyUSART.c new file mode 100644 index 0000000..5a20a14 --- /dev/null +++ b/MyDrivers/MyUSART.c @@ -0,0 +1,71 @@ +#include "MyUSART.h" +#include "stm32f1xx_ll_bus.h" // Pour l'activation des horloges +#include "stm32f1xx_ll_usart.h" + + +/** + * @brief Active l'horloge et règle les paramètres de transmission + * @note Fonction à lancer avant toute autre. + * @param USART_TypeDef UsDollar : indique le usart à utiliser par le uC, USART1, USART2 ou USART3 + * @retval None + */ +void MyUSART_Conf(USART_TypeDef * USART, int TransferDir) +{ + LL_USART_InitTypeDef My_LL_USART_Init_Struct; + LL_USART_ClockInitTypeDef My_LL_USART_Clock; + + // Validation horloge locale + if (USART==USART1) LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_USART1); + else if (USART==USART2) LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_USART2); + else LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_USART3); + + //Activation clk de l'USART en entrée et sortie + LL_USART_ClockStructInit(&My_LL_USART_Clock); + My_LL_USART_Clock.ClockOutput = LL_USART_CLOCK_ENABLE; + LL_USART_ClockInit(USART, &My_LL_USART_Clock); + + //Initialisation de l'USART + LL_USART_StructInit(&My_LL_USART_Init_Struct); + + //My_LL_USART_Init_Struct.TransferDirection = TransferDir; + + LL_USART_Init(USART, &My_LL_USART_Init_Struct); + + LL_USART_Enable(USART); +} + +/** + * @brief Autorise les interruptions de TXE + * @note + * @param USART_TypeDef UsDollar : indique le usart à utiliser par le uC, USART1, USART2 ou USART3 + * @retval None + */ +void MyUSART_IT_Enable(USART_TypeDef * USART) +{ + LL_USART_EnableIT_TXE(USART); +} + + +/** + * @brief Interdit les interruptions de TXE + * @note + * @param USART_TypeDef UsDollar : indique le usart à utiliser par le uC, USART1, USART2 ou USART3 + * @retval None + */ +void MyUSART_IT_Disable(USART_TypeDef * USART) +{ + LL_USART_DisableIT_TXE(USART); +} + + +/** + * @brief Transmet 8bits de donnée + * @note + * @param USART_TypeDef UsDollar : indique le usart à utiliser par le uC, USART1, USART2 ou USART3 + * @retval None + */ +void MyUSART_Transmit_Data_8b(USART_TypeDef * USART, int data) +{ + LL_USART_TransmitData8(USART, data); + while (LL_USART_IsActiveFlag_TC(USART) != 1){} +} diff --git a/MyDrivers/MyUSART.h b/MyDrivers/MyUSART.h new file mode 100644 index 0000000..691a3b3 --- /dev/null +++ b/MyDrivers/MyUSART.h @@ -0,0 +1,44 @@ +#ifndef MY_USART_H +#define MY_USART_H + +/* +Driver pour USART 1 à 3 du STM32F103RB + +*/ + +#include "stm32f103xb.h" + +/** + * @brief Active l'horloge et règle les paramètres de transmission + * @note Fonction à lancer avant toute autre. + * @param USART_TypeDef UsDollar : indique le usart à utiliser par le uC, USART1, USART2 ou USART3 + * @retval None + */ +void MyUSART_Conf(USART_TypeDef * USART, int TransferDir); + +/** + * @brief Autorise les interruptions de TXE + * @note + * @param USART_TypeDef UsDollar : indique le usart à utiliser par le uC, USART1, USART2 ou USART3 + * @retval None + */ +void MyUSART_IT_Enable(USART_TypeDef * USART); + +/** + * @brief Interdit les interruptions de TXE + * @note + * @param USART_TypeDef UsDollar : indique le usart à utiliser par le uC, USART1, USART2 ou USART3 + * @retval None + */ +void MyUSART_IT_Disable(USART_TypeDef * USART); + +/** + * @brief Transmet 8bits de donnée + * @note + * @param USART_TypeDef UsDollar : indique le usart à utiliser par le uC, USART1, USART2 ou USART3 + * @retval None + */ +void MyUSART_Transmit_Data_8b(USART_TypeDef * USART, int data); + + +#endif