Project to use Serial with registers

Dependencies:   mbed

Revision:
2:1deea3b4119e
Parent:
1:2b6896966307
Child:
3:fba5fc24faff
--- a/main.cpp	Wed Apr 05 12:22:25 2017 +0000
+++ b/main.cpp	Wed Apr 05 14:12:05 2017 +0000
@@ -1,32 +1,38 @@
 #include "mbed.h"
 
 void usartSetup (void) {
-    RCC->IOPENR |= RCC_IOPENR_IOPAEN;
-    GPIOA->ODR |= GPIO_ODR_OD9;
+    RCC->IOPENR |= RCC_IOPENR_IOPBEN;
     RCC->APB2ENR |= RCC_APB2ENR_USART1EN;            // enable clock for USART1
-    USART1->BRR  = 160000 / 96;              // set baudrate
-    GPIOA->MODER &= ~GPIO_MODER_MODE9_0;
-    GPIOA->MODER |= GPIO_MODER_MODE9_1;
+    USART1->BRR  = 320000 / 96;              // set baudrate
+    GPIOB->MODER &= ~GPIO_MODER_MODE6_0;
+    GPIOB->MODER |= GPIO_MODER_MODE6_1;
     
-    GPIOA->PUPDR |= GPIO_PUPDR_PUPD9_0;
-    GPIOA->PUPDR &= ~GPIO_PUPDR_PUPD9_1;
-    GPIOA->OTYPER &= ~GPIO_OTYPER_OT_9;
+    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[4];
-    stringtosend[0] = 'T';
-    stringtosend[1] = 'e';
-    stringtosend[2] = 'x';
-    stringtosend[3] = 't';
-    for(int send = 0; send < 4; send++){
-        while (!(USART1->ISR & (USART1->ISR | USART_ISR_TXE))){
-            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];
         }
+        
     }
 }