From fff46d3a159ed37373d603546a2aa13af62ae62a Mon Sep 17 00:00:00 2001 From: Neluji <38362829+Neluji@users.noreply.github.com> Date: Wed, 4 Nov 2020 09:27:31 +0100 Subject: [PATCH 1/2] USART init --- MyDrivers/MyUSART.c | 63 +++++++++++++++++++++++++++++++++++++++++++++ MyDrivers/MyUSART.h | 44 +++++++++++++++++++++++++++++++ 2 files changed, 107 insertions(+) create mode 100644 MyDrivers/MyUSART.c create mode 100644 MyDrivers/MyUSART.h diff --git a/MyDrivers/MyUSART.c b/MyDrivers/MyUSART.c new file mode 100644 index 0000000..57caff4 --- /dev/null +++ b/MyDrivers/MyUSART.c @@ -0,0 +1,63 @@ +#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; + + // 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); + + //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); + +} + +/** + * @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); +} 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 From 1556c5145f09513d7db2cf50124a92c5d226c002 Mon Sep 17 00:00:00 2001 From: Neluji <38362829+Neluji@users.noreply.github.com> Date: Sun, 22 Nov 2020 18:49:30 +0100 Subject: [PATCH 2/2] Configuration fonct OK --- MDK-ARM/Project.uvoptx | 32 ++++++++++++++++++++++---------- MDK-ARM/Project.uvprojx | 10 ++++++++++ MyDrivers/MyUSART.c | 10 +++++++++- 3 files changed, 41 insertions(+), 11 deletions(-) diff --git a/MDK-ARM/Project.uvoptx b/MDK-ARM/Project.uvoptx index dad60dc..39ec91c 100644 --- a/MDK-ARM/Project.uvoptx +++ b/MDK-ARM/Project.uvoptx @@ -420,7 +420,7 @@ 1 1 1 - 1 + 0 0 0 ../Src/main.c @@ -448,7 +448,7 @@ 3 2 1 - 1 + 0 0 0 ..\MyDrivers\MyTimer.c @@ -456,6 +456,18 @@ 0 0 + + 3 + 3 + 1 + 1 + 0 + 0 + ..\MyDrivers\MyUSART.c + MyUSART.c + 0 + 0 + @@ -466,7 +478,7 @@ 0 4 - 3 + 4 1 0 0 @@ -478,7 +490,7 @@ 4 - 4 + 5 1 0 0 @@ -490,7 +502,7 @@ 4 - 5 + 6 1 0 0 @@ -502,7 +514,7 @@ 4 - 6 + 7 1 0 0 @@ -514,7 +526,7 @@ 4 - 7 + 8 1 0 0 @@ -534,7 +546,7 @@ 0 5 - 8 + 9 5 0 0 @@ -554,7 +566,7 @@ 0 6 - 9 + 10 1 0 0 @@ -574,7 +586,7 @@ 0 7 - 10 + 11 2 0 0 diff --git a/MDK-ARM/Project.uvprojx b/MDK-ARM/Project.uvprojx index cd43e32..35d72bc 100644 --- a/MDK-ARM/Project.uvprojx +++ b/MDK-ARM/Project.uvprojx @@ -400,6 +400,11 @@ 1 ..\MyDrivers\MyTimer.c + + MyUSART.c + 1 + ..\MyDrivers\MyUSART.c + @@ -861,6 +866,11 @@ 1 ..\MyDrivers\MyTimer.c + + MyUSART.c + 1 + ..\MyDrivers\MyUSART.c + diff --git a/MyDrivers/MyUSART.c b/MyDrivers/MyUSART.c index 57caff4..5a20a14 100644 --- a/MyDrivers/MyUSART.c +++ b/MyDrivers/MyUSART.c @@ -12,19 +12,26 @@ 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; + //My_LL_USART_Init_Struct.TransferDirection = TransferDir; LL_USART_Init(USART, &My_LL_USART_Init_Struct); + LL_USART_Enable(USART); } /** @@ -60,4 +67,5 @@ void MyUSART_IT_Disable(USART_TypeDef * USART) void MyUSART_Transmit_Data_8b(USART_TypeDef * USART, int data) { LL_USART_TransmitData8(USART, data); + while (LL_USART_IsActiveFlag_TC(USART) != 1){} }