Create a gist now

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Echo with USART1 on STM32L-Discovery
#include "stm32l1xx.h"
int main(void)
{
RCC->CR |= RCC_CR_HSEON;
while(!(RCC->CR & RCC_CR_HSERDY));
RCC->APB2ENR |= RCC_APB2ENR_USART1EN; //USART1 Clock ON
USART1->BRR = 0xD05; // Bodrate for 9600 on 32Mhz
USART1->CR1 |= USART_CR1_UE | USART_CR1_TE | USART_CR1_RE; // USART1 ON, TX ON, RX ON
RCC->AHBENR |= RCC_AHBENR_GPIOAEN | RCC_AHBLPENR_GPIOALPEN;
GPIOA->AFR[1] |= 0x770; //AF7(USART1..3) to pins 9,10
GPIOA->OTYPER &= ~GPIO_OTYPER_ODR_9; // Output push-pull (reset state)
GPIOA->PUPDR &= ~GPIO_PUPDR_PUPDR9; // No pull-up, pull-down
GPIOA->MODER |= GPIO_MODER_MODER9_1; // Alternate function mode
GPIOA->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR9_1; // 40 MHz High speed
GPIOA->MODER |= GPIO_MODER_MODER10_1; // Alternate function mode
GPIOA->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR10_1; // 40 MHz High speed
USART1->CR1 |= USART_CR1_RXNEIE; // RXNE Int ON
NVIC_EnableIRQ (USART1_IRQn);
__enable_irq ();
while (1) {
}
}
void USART1_IRQHandler(void) {
if (USART1->SR & USART_SR_RXNE) {
while(!(USART1->SR & USART_SR_TC));
USART1->DR = USART1->DR;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment