USART Rx is wroking, fixed yet another bug in pin.c ^-^

interrupts
key 4 years ago
parent 2e4a027581
commit 3a61f9f35e

@ -0,0 +1,60 @@
/**
**************************************************************************************************
* @file ascii.h
* @author Kerem Yollu
* @date 04.11.2021
* @version 1.0
**************************************************************************************************
* @brief Defines ofr ascii chars.
*
**************************************************************************************************
*/
#ifndef _ASCII_H_
#define _ASCII_H_
#ifdef __cplusplus
extern "C" {
#endif
#define ASCII_NULL 0 // Null character
#define ASCII_SOH 1 // Start of Header
#define ASCII_STX 2 // Start of Text
#define ASCII_ETX 3 // End of Text, hearts card suit
#define ASCII_EOT 4 // End of Transmission, diamonds card suit
#define ASCII_ENQ 5 // Enquiry, clubs card suit
#define ASCII_ACK 6 // Acknowledgement, spade card suit
#define ASCII_BEL 7 // Bell
#define ASCII_BS 8 // Backspace
#define ASCII_HT 9 // Horizontal Tab
#define ASCII_LF 10 // Line feed
#define ASCII_VT 11 // Vertical Tab, male symbol, symbol for Mars
#define ASCII_FF 12 // Form feed, female symbol, symbol for Venus
#define ASCII_CR 13 // Carriage return
#define ASCII_SO 14 // Shift Out
#define ASCII_SI 15 // Shift In
#define ASCII_DLE 16 // Data link escape
#define ASCII_DC1 17 // Device control 1
#define ASCII_DC2 18 // Device control 2
#define ASCII_DC3 19 // Device control 3
#define ASCII_DC4 20 // Device control 4
#define ASCII_NAK 21 // NAK Negative-acknowledge
#define ASCII_SYN 22 // Synchronous idle
#define ASCII_ETB 23 // End of trans. block
#define ASCII_CAN 24 // Cancel
#define ASCII_EM 25 // End of medium
#define ASCII_SUB 26 // Substitute
#define ASCII_ESC 27 // Escape
#define ASCII_FS 28 // File separator
#define ASCII_GS 29 // Group separator
#define ASCII_RS 30 // Record separator
#define ASCII_US 31 // Unit separator
#define ASCII_DEL 127 // Delete
#define ASCII_space 32 // Space
#define ASCII_nbsp 255 // Non-breaking space or no-break space
#define ASCII_clear "\033[2J" // Clear screen command
#ifdef __cplusplus
}
#endif
#endif // _ASCII_H_

@ -120,19 +120,29 @@ void usartSetHwFlowCtrl(usartNo_t channel, usartHwFlowCtrl_t flowCtrl);
/** /**
* \brief Sends a char array until \0 is detected. * \brief Sends a char array until \0 is detected.
* \param usartNo_t channel,
* \param *ptr pointer to char array * \param *ptr pointer to char array
* \retval none * \retval none
*/ */
void print_Usart(char *ptr); void print_Usart(usartNo_t channel,char *ptr);
/** /**
* \brief Cheks id send buffer is empty an than Sends one Char * \brief Cheks if the send buffer is empty an than Sends one Char
* \param usartNo_t channel,
* \param uint8_t ch one Character. * \param uint8_t ch one Character.
* \retval none * \retval none
*/ */
void usartSendChar(uint8_t ch); void usartSendChar(usartNo_t channel, uint8_t ch);
/**
* \brief Cheks if the recieve buffer is NOT empty an than Rreturns the recieved Char
* \param usartNo_t channel,
* \param uint8_t ch one Character.
* \retval none
*/
uint8_t usartGetChar(usartNo_t channel);
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif

@ -120,14 +120,14 @@ void pinSetSpeed(pinNo_t pinNo, pinSpeed_t speed)
void pinSetAlternate(pinNo_t pinNo, uint16_t alternate) void pinSetAlternate(pinNo_t pinNo, uint16_t alternate)
{ {
if(PIN_NO < 7) if(PIN_NO < 8)
{ {
PIN_BASE->AFR[0] &= ~(0x0F << (PIN_NO * 4)); PIN_BASE->AFR[0] &= ~(0x0F << (PIN_NO * 4));
PIN_BASE->AFR[0] |= ((alternate & 0x0F) << (PIN_NO * 4)); PIN_BASE->AFR[0] |= ((alternate & 0x0F) << (PIN_NO * 4));
return; return;
} }
PIN_BASE->AFR[1] &= ~(0x0F << (PIN_NO * 4)); PIN_BASE->AFR[1] &= ~(0x0F << ((PIN_NO-8) * 4));
PIN_BASE->AFR[1] |= ((alternate & 0x0F) << (PIN_NO * 4)); PIN_BASE->AFR[1] |= ((alternate & 0x0F) << ((PIN_NO-8) * 4));
} }
void pinConfig(pinNo_t pinNo, pinMode_t mode, pinStage_t stage, pinPullUpDown_t resistance, pinSpeed_t speed) void pinConfig(pinNo_t pinNo, pinMode_t mode, pinStage_t stage, pinPullUpDown_t resistance, pinSpeed_t speed)

@ -35,11 +35,11 @@ void usartInit( usartNo_t channel,
uint8_t parity, uint8_t parity,
usartHwFlowCtrl_t flowCtrl) usartHwFlowCtrl_t flowCtrl)
{ {
/* COnfiguring teh pins for the uart*/ /* Configuring the pins for the uart*/
usartInitTx(pinTx); usartInitTx(pinTx);
usartInitRx(pinRx); usartInitRx(pinRx);
//Enable the UART Module on the periferal bus this must be done before setting any regiter. //Enable the UART Module on the periferal bus this must be done before setting any register.
if(channel == usart2) if(channel == usart2)
{ {
RCC->APB1ENR |= RCC_APB1ENR_USART2EN; RCC->APB1ENR |= RCC_APB1ENR_USART2EN;
@ -54,26 +54,29 @@ void usartInit( usartNo_t channel,
USART_CHANNEL->CR2 = 0; // The = 0 is on purpose to set uart to default mode. USART_CHANNEL->CR2 = 0; // The = 0 is on purpose to set uart to default mode.
USART_CHANNEL->CR3 = 0; // The = 0 is on purpose to set uart to default mode. USART_CHANNEL->CR3 = 0; // The = 0 is on purpose to set uart to default mode.
USART_CHANNEL->CR1 |= USART_CR1_TE; //Enbale trasnmit
USART_CHANNEL->CR1 |= USART_CR1_RE; //Enable recieve
usartSetBaudRate(channel,baud); usartSetBaudRate(channel,baud);
usartSetWordLenght(channel, lenght); usartSetWordLenght(channel, lenght);
usartSetHwFlowCtrl(channel, flowCtrl); usartSetHwFlowCtrl(channel, flowCtrl);
//UART Enable shall be allwas date a th ene of configuration. USART_CHANNEL->CR1 |= USART_CR1_TE; //Enbale trasnmit
USART_CHANNEL->CR1 |= USART_CR1_RE; //Enable recieve
//UART Enable shall allwas be at the end of configuration.
USART_CHANNEL->CR1 |= USART_CR1_UE; USART_CHANNEL->CR1 |= USART_CR1_UE;
} }
void usartInitTx(pinNo_t pinTx) void usartInitTx(pinNo_t pinTx)
{ {
pinConfig(pinTx, alternate, def_stage, def_res, def_speed); //pinConfig(pinTx, alternate, def_stage, def_res, def_speed);
pinSetMode(pinTx,alternate);
pinSetAlternate(pinTx, AF1); pinSetAlternate(pinTx, AF1);
} }
void usartInitRx(pinNo_t pinRx) void usartInitRx(pinNo_t pinRx)
{ {
pinConfig(pinRx, alternate, def_stage, def_res, def_speed); //pinConfig(pinRx, alternate, def_stage, def_res, def_speed);
pinSetMode(pinRx,alternate);
pinSetAlternate(pinRx, AF1); pinSetAlternate(pinRx, AF1);
} }
@ -130,20 +133,27 @@ void usartSetHwFlowCtrl(usartNo_t channel, usartHwFlowCtrl_t flowCtrl)
} }
} }
void print_Usart(char *ptr) void print_Usart(usartNo_t channel,char *ptr)
{ {
uint16_t len = 0; uint16_t len = 0;
while(ptr[len] != '\0') while(ptr[len] != '\0')
{ {
usartSendChar(ptr[len]); usartSendChar(channel, ptr[len]);
len++; len++;
} }
} }
void usartSendChar(uint8_t ch) void usartSendChar(usartNo_t channel, uint8_t ch)
{
// Make sure that TX buffer is empty
while(!(USART_CHANNEL->ISR & USART_ISR_TXE)){}
USART_CHANNEL->TDR = ch;
}
uint8_t usartGetChar(usartNo_t channel)
{ {
// Make sure that TX buffer is empty // Make sure that TX buffer is empty
while(!(USART2->ISR & USART_ISR_TXE)){} while(!(USART_CHANNEL->ISR & USART_ISR_RXNE)){}
USART2->TDR = ch; return USART_CHANNEL->RDR;
} }

@ -2,11 +2,12 @@
#include "delay.h" #include "delay.h"
#include "stm32f0xx_csl.h" #include "stm32f0xx_csl.h"
#include "usart.h" #include "usart.h"
#include "ascii.h"
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
uint8_t i = 0; uint8_t i = 0;
uint8_t a = '0';
stmStart(); stmStart();
pinConfig(pinB3, output, pushPull, def_res, def_speed); pinConfig(pinB3, output, pushPull, def_res, def_speed);
@ -19,7 +20,9 @@ int main(int argc, char *argv[])
NO_PARITY_CTRL, NO_PARITY_CTRL,
noFlowControl); noFlowControl);
print_Usart("Wellcome to our KED project\n\r"); // print_Usart(usart2, ASCII_clear);
print_Usart(usart2, "Wellcome to our KED project\n\r");
for(i = 0 ; i < 10 ; i++) for(i = 0 ; i < 10 ; i++)
{ {
@ -29,10 +32,14 @@ int main(int argc, char *argv[])
} }
pinWrite(pinB3,0); pinWrite(pinB3,0);
//usartSendChar(usart2, a);
while(1) while(1)
{ {
if(pinRead(pinA0)) a = usartGetChar(usart2);
usartSendChar(usart2, a);
if(a == '1')
{ {
pinWrite(pinB3,1); pinWrite(pinB3,1);
} }
@ -40,6 +47,18 @@ int main(int argc, char *argv[])
{ {
pinWrite(pinB3,0); pinWrite(pinB3,0);
} }
/*
if(pinRead(pinA0))
{
pinWrite(pinB3,1);
}
else
{
pinWrite(pinB3,0);
}
*/
delayMs(100);
} }
return 1; return 1;
} }

Loading…
Cancel
Save