Uart is tarting to take shape. now we need to define if we want to implement all the functions

interrupts
key 4 years ago
parent 82107231a8
commit 64d174aec2

@ -16,7 +16,7 @@
* is implmented. * is implmented.
* *
* @todo * @todo
* - 02.11.2021 : ALL * - 03.11.2021 : MAybe find a way to link the awalabe uart channnels with the awailable pins for that USART channel
************************************************************************************************** **************************************************************************************************
*/ */
#ifndef _USART_H_ #ifndef _USART_H_
@ -27,8 +27,9 @@ extern "C" {
#endif #endif
#include "../stm32f042/Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f042x6.h" #include "pin.h"
#include "../stm32f042/Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f042x6.h"
/*! Enum of USART Word Lenght Options */ /*! Enum of USART Word Lenght Options */
typedef enum typedef enum
@ -36,36 +37,63 @@ typedef enum
seven, /*!< 7 bits word Lenght */ seven, /*!< 7 bits word Lenght */
eight, /*!< 8 bits word Lenght */ eight, /*!< 8 bits word Lenght */
nine /*!< 9 bits word Lenght */ nine /*!< 9 bits word Lenght */
}wordLength_t; }usartWordLength_t;
/*! Enum of USART Word Lenght Options */ /*! Enum of USART Word Lenght Options */
typedef enum typedef enum
{ {
usart1, /*!< USART Channel 1 */ usart1 = USART1_BASE , /*!< USART Channel 1 */
usart2 /*!< USART Channel 2 */ usart2 = USART2_BASE /*!< USART Channel 2 */
}usartNo_t; }usartNo_t;
typedef enum
{
even,
odd
}usartParity_t;
/**
* \brief Enable the USART with the most commment settings
* \param usartNo_t channel Uart **Channel** to be used
* \param pinNo_t pinTx Pin to be used for **Transmit**
* \param pinNo_t pinRx Pin to be used for **Recieve**
* \retval none
*/
void usartInit( usartNo_t channel,
pinNo_t pinTx,
pinNo_t pinRx,
uint32_t baud,
usartWordLength_t lenght,
uint8_t parity,
uint8_t hwFlowControl);
/**
* \brief Enable the USART Transmission pin, be carefull this function will not link the right pin to the right UART channel.
* \param pinNo_t pinTx Pin to be used for **Transmit**
* \retval none
*/
void usartInitTx(pinNo_t pinTx);
/** /**
* \brief Enable the USART block idependent of he RX & TX channels. * \brief Enable the USART Recieve pin, be carefull this function will not link the right pin to the right UART channel.
* \param USART_TypeDef *usart * \param pinNo_t pinRx Pin to be used for **Transmit**
* \retval none * \retval none
*/ */
//void usartInit(USART_TypeDef *usart); void usartInitRx(pinNo_t pinRx);
void usartInit();
/** /**
* \brief Sets the word lenght of the Usart channel. * \brief Sets the word lenght of the Usart channel.
* \param * USART_TypeDef usart * \param usartNo_t channel,
* \param usartWordLength_t lenght
* \retval none * \retval none
*/ */
void usartSetWordLenght(wordLength_t lenght); void usartSetWordLenght(usartNo_t channel, usartWordLength_t lenght);
/** /**
* \brief Sets the Baud Rate of the Usart channel. * \brief Sets the Baud Rate of the Usart channel.
* \param uint32_t baud * \param uint32_t baud
* \retval none * \retval none
*/ */
void usartSetBaudRate(uint32_t baud); void usartSetBaudRate(usartNo_t channel, uint32_t baud);
/** /**
* \brief Sets the word lenght of the Usart channel. * \brief Sets the word lenght of the Usart channel.

@ -21,7 +21,6 @@
#include"pin.h" #include"pin.h"
#define USART2_EN (1U << 17)
#define CR1_TE_EN (1U << 3) #define CR1_TE_EN (1U << 3)
#define CR1_UE_EN (1U << 0) #define CR1_UE_EN (1U << 0)
@ -30,8 +29,7 @@
#define UART_BAUD 115200 #define UART_BAUD 115200
#define SYST_CLK 8000000 #define SYST_CLK 8000000
#define AF1 0x01 #define AF1 0x01
#define USART_CHANNEL ((USART_TypeDef *)channel)
void print_Usart(char *ptr) void print_Usart(char *ptr)
{ {
uint16_t len = 0; uint16_t len = 0;
@ -43,25 +41,52 @@ void print_Usart(char *ptr)
} }
} }
void usartInit() void usartInit( usartNo_t channel,
pinNo_t pinTx,
pinNo_t pinRx,
uint32_t baud,
usartWordLength_t lenght,
uint8_t parity,
uint8_t hwFlowControl)
{ {
/* COnfiguring teh pins for the uart*/ /* COnfiguring teh pins for the uart*/
pinConfig(pinA2, alternate, def_stage, def_res, def_speed); usartInitTx(pinTx);
pinConfig(pinA15, alternate, def_stage, def_res, def_speed); usartInitRx(pinRx);
//Sets pina2 to alternate mode as UART_TX //Enable the UART Module on the periferal bus this must be done before setting any regiter.
pinSetAlternate(pinA2, AF1); if(channel == usart2)
{
//Enable the priferas bus and UART RCC->APB1ENR |= RCC_APB1ENR_USART2EN;
RCC->APB1ENR |= USART2_EN; }
else
{
RCC->APB2ENR |= RCC_APB2ENR_USART1EN;
}
usartSetBaudRate(UART_BAUD); usartSetBaudRate(channel,baud);
//enables the transmit and sets all the other values to 0 = Default //enables the transmit and sets all the other values to 0 = Default
USART2->CR1 = CR1_TE_EN; // The = 0 is on purpose to set uart to default mode. USART_CHANNEL->CR1 = CR1_TE_EN; // The = 0 is on purpose to set uart to default mode.
//UART Enable //UART Enable
USART2->CR1 |= CR1_UE_EN; USART_CHANNEL->CR1 |= CR1_UE_EN;
}
void usartInitTx(pinNo_t pinTx)
{
pinConfig(pinTx, alternate, def_stage, def_res, def_speed);
pinSetAlternate(pinTx, AF1);
}
void usartInitRx(pinNo_t pinRx)
{
pinConfig(pinRx, alternate, def_stage, def_res, def_speed);
pinSetAlternate(pinRx, AF1);
}
void usartSetWordLenght(usartNo_t channel, usartWordLength_t lenght)
{
} }
static uint16_t usartComputeBaudRate(uint32_t clk, uint32_t baud) static uint16_t usartComputeBaudRate(uint32_t clk, uint32_t baud)
@ -70,9 +95,9 @@ static uint16_t usartComputeBaudRate(uint32_t clk, uint32_t baud)
return(clk/baud); return(clk/baud);
} }
void usartSetBaudRate(uint32_t baud) void usartSetBaudRate(usartNo_t channel, uint32_t baud)
{ {
USART2->BRR = usartComputeBaudRate(SYST_CLK,baud); USART_CHANNEL->BRR = usartComputeBaudRate(SYST_CLK,baud);
} }
void usartSendChar(int ch) void usartSendChar(int ch)

@ -9,10 +9,15 @@ int main(int argc, char *argv[])
stmStart(); stmStart();
pinConfig(pinB3, output, pushPull, none, normal); pinConfig(pinB3, output, pushPull, def_res, def_speed);
pinConfig(pinA0, input, pushPull, pullDown, normal); pinConfig(pinA0, input, def_stage, pullDown, def_speed);
usartInit( usart2,
usartInit(); pinA2,
pinA15,
115200,
eight,
0,
0);
print_Usart("Wellcome to our KED project\n\r"); print_Usart("Wellcome to our KED project\n\r");

Loading…
Cancel
Save