This commit is contained in:
Alexander Heldt
2024-08-12 21:54:29 +02:00
parent 2fc8ee4f92
commit 6caccce751
11 changed files with 780 additions and 529 deletions

View File

@@ -80,7 +80,7 @@ int main(void) {
(void) usart2_init();
(void) tim4_start();
(void) tim4_start();
(void) usart2_start();
uint16_t led = PIN('C', 13); // Blue LED
RCC->AHB1ENR |= BIT(PINPORT(led)); // Enable GPIO clock for LED
@@ -93,8 +93,7 @@ int main(void) {
led_on = !led_on;
gpio_write(led, led_on);
while ((USART2->ISR & USART_ISR_TC) != USART_ISR_TC);
USART2->TDR = '#';
usart2_write_byte('a');
counter = TIM4->CNT;
}

View File

@@ -49,9 +49,9 @@ void usart2_init(void) {
USART2->CR1 |= USART_CR1_OVER8_8;
USART2->BRR &= ~(USART_BRR_MANTISSA_MASK << USART_BRR_MANTISSA_BIT);
USART2->BRR |= (52 << USART_BRR_MANTISSA_BIT);
USART2->BRR |= (0x34 << USART_BRR_MANTISSA_BIT);
USART2->BRR &= ~(USART_BRR_FRACTION_MASK << USART_BRR_FRACTION_BIT);
USART2->BRR |= (0 << USART_BRR_FRACTION_BIT);
USART2->BRR |= (0x0 << USART_BRR_FRACTION_BIT);
// Enable transmitter and receiver
USART2->CR1 |= USART_CR1_TE_ENABLE;
@@ -61,3 +61,11 @@ void usart2_init(void) {
void usart2_start(void) {
USART2->CR1 |= USART_CR1_UE_ENABLE;
}
void usart2_write_byte(char c) {
// Send data
USART2->DR = c;
// Wait indefinitely for transmission to be ready for data
while ((USART2->SR & USART_SR_TXE_TRANSMITTED) == 0);
}

View File

@@ -16,6 +16,15 @@ struct usart {
#define USART2_BASE_ADDR (0x40004400U)
#define USART2 ((struct usart *) USART2_BASE_ADDR)
// SR Register
// Transmission data register empty
#define USART_SR_TXE_BIT 7
#define USART_SR_TXE_TRANSMITTED (1 << USART_SR_TXE_BIT)
// Read data register not empty
#define USART_SR_RXNE_BIT 5
#define USART_SR_RXNE_READY (1 <<USART_SR_RXNE_BIT)
// CR Register
// Oversampling mode
#define USART_CR1_OVER8_BIT 15
@@ -43,4 +52,6 @@ struct usart {
void usart2_init(void);
void usart2_start(void);
void usart2_write_byte(char byte);
#endif