Project to use Serial with registers

Dependencies:   mbed

main.cpp

Committer:
SimonNOWAK
Date:
2017-04-05
Revision:
2:1deea3b4119e
Parent:
1:2b6896966307
Child:
3:fba5fc24faff

File content as of revision 2:1deea3b4119e:

#include "mbed.h"

void usartSetup (void) {
    RCC->IOPENR |= RCC_IOPENR_IOPBEN;
    RCC->APB2ENR |= RCC_APB2ENR_USART1EN;            // enable clock for USART1
    USART1->BRR  = 320000 / 96;              // set baudrate
    GPIOB->MODER &= ~GPIO_MODER_MODE6_0;
    GPIOB->MODER |= GPIO_MODER_MODE6_1;
    
    GPIOB->AFR[1] |= 0x40;
    GPIOB->OTYPER &= ~GPIO_OTYPER_OT_6;
    USART1->CR1 |= (USART_CR1_RE | USART_CR1_TE | USART_CR1_UE);  // RX, TX enable
}

void SendChar(){
    Serial pc(USBTX, USBRX);
    pc.printf("TXE: %02X\r\n", USART1->ISR);
    char stringtosend[] = {"Salut ca va ? Oui et toi ? Oh yes ca fonctionne bien ahahahahahahahahahahahah\r\n"};
    for(int send = 0; send < sizeof(stringtosend); send++){
        //On attend que la transmission soit terminée
        while((USART1->ISR & USART_ISR_TC) != USART_ISR_TC);
        
        //Si on a tout envoyé
        if(send == sizeof(stringtosend))
        {
            send=0;
            USART1->ICR = USART_ICR_TCCF; /* Clear transfer complete flag */
        }
        else
        {
            //Si le registre de données est vide
            while (!(USART1->ISR & (USART1->ISR | USART_ISR_TXE)));
            USART1->TDR = stringtosend[send];
        }
        
    }
}

int main() {
    usartSetup();
    SendChar();
}