USART still not working

interrupts
key 4 years ago
parent aa6afaccce
commit d444dfa383

@ -72,7 +72,7 @@ void usartSetBaudRate(uint32_t baud);
* \param * USART_TypeDef usart * \param * USART_TypeDef usart
* \retval none * \retval none
*/ */
void usartSendChar(uint8_t ch); void usartSendChar(int ch);
#ifdef __cplusplus #ifdef __cplusplus
} }

@ -4,16 +4,45 @@
#define USART2_EN (1U << 17) #define USART2_EN (1U << 17)
USART_TypeDef usart; #define CR1_TE_EN (1U << 3)
#define CR1_UE_EN (1U << 0)
#define ISR_TXE (1U << 7)
#define UART_BAUD 115200
#define SYST_CLK 8000000
void usartSetBaudRate(uint32_t baud);
void usartInit() void usartInit()
{ {
/* COnfiguring teh pins for the uart*/ /* COnfiguring teh pins for the uart*/
pinConfig(pinA2, alternate, none, none, normal); //pinConfig(pinA2, alternate, none, none, normal);
pinConfig(pinA15, alternate, none, none, normal); //pinConfig(pinA15, alternate, none, none, normal);
pinSetAlternate(pinA2, 1);
//Sets pina2 to alternate mode as UART_TX
//pinSetAlternate(pinA2, 1);
GPIOA->MODER &= ~(1u <<4);
GPIOA->MODER |= (1u <<5);
GPIOA->AFR[0] &= ~(1u<<11);
GPIOA->AFR[0] &= ~(1u<<10);
GPIOA->AFR[0] &= ~(1u<<9);
GPIOA->AFR[0] |= (1u<<8);
//Enable the priferas bus and UART
RCC->APB1ENR |= USART2_EN; RCC->APB1ENR |= USART2_EN;
usartSetBaudRate(UART_BAUD);
//enables the transmit and sets all the other values to 0 = Default
USART2->CR1 = 0; // The = 0 is on purpose to set uart to default mode.
USART2->CR1 |= CR1_TE_EN; // The = 0 is on purpose to set uart to default mode.
//UART Enable
USART2->CR1 |= CR1_UE_EN;
} }
static uint16_t usartComputeBaudRate(uint32_t clk, uint32_t baud) static uint16_t usartComputeBaudRate(uint32_t clk, uint32_t baud)
@ -23,10 +52,12 @@ static uint16_t usartComputeBaudRate(uint32_t clk, uint32_t baud)
void usartSetBaudRate(uint32_t baud) void usartSetBaudRate(uint32_t baud)
{ {
usartComputeBaudRate(baud, 8000000); USART2->BRR = usartComputeBaudRate(baud, SYST_CLK);
} }
void usartSendChar(uint8_t ch) void usartSendChar(int ch)
{ {
// Make sure that TX buffer is empty
while(!(USART2->ISR & ISR_TXE)){}
USART2->TDR = (ch & 0xFF);
} }

@ -1,6 +1,7 @@
#include"main.hpp" #include"main.hpp"
#include"bsl/csl/interfaces/delay.h" #include"bsl/csl/interfaces/delay.h"
#include"stm32f0xx_csl.h" #include"stm32f0xx_csl.h"
#include "usart.h"
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
@ -11,11 +12,13 @@ int main(int argc, char *argv[])
pinConfig(pinB3, output, pushPull, none, normal); pinConfig(pinB3, output, pushPull, none, normal);
pinConfig(pinA0, input, pushPull, pullDown, normal); pinConfig(pinA0, input, pushPull, pullDown, normal);
usartInit();
for(i = 0 ; i < 10 ; i++) for(i = 0 ; i < 10 ; i++)
{ {
delayMs(100); delayMs(100);
pinToggle(pinB3); pinToggle(pinB3);
usartSendChar('y');
delayMs(100); delayMs(100);
} }

Loading…
Cancel
Save