Project to use Serial with registers

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 
00003 DigitalOut myled(LED1);
00004 Serial pc(USBTX, USBRX);
00005 
00006 void usartSetup (void) {
00007     RCC->IOPENR |= RCC_IOPENR_IOPBEN;
00008     RCC->APB2ENR |= RCC_APB2ENR_USART1EN;            // enable clock for USART1
00009     USART1->BRR  = 320000 / 96;              // set baudrate
00010     GPIOB->MODER &= ~GPIO_MODER_MODE6_0;
00011     GPIOB->MODER |= GPIO_MODER_MODE6_1;
00012     
00013     GPIOB->MODER &= ~GPIO_MODER_MODE7_0;
00014     GPIOB->MODER |= GPIO_MODER_MODE7_1;
00015     
00016 /*    GPIOB->AFR[0] |= 0x40;*/
00017     GPIOB->OTYPER &= ~GPIO_OTYPER_OT_6;
00018     GPIOB->OTYPER |= GPIO_OTYPER_OT_7;
00019     USART1->CR1 |= (USART_CR1_RXNEIE | USART_CR1_RE | USART_CR1_TE | USART_CR1_UE);  // RX, TX enable
00020 }
00021 
00022 void SendChar(char Array[], int size){
00023     
00024     for(int send = 0; send < size; send++){
00025         //On attend que la transmission soit terminée
00026         while((USART1->ISR & USART_ISR_TC) != USART_ISR_TC);
00027         
00028         //Si on a tout envoyé
00029         if(send == size)
00030         {
00031             send=0;
00032             USART1->ICR = USART_ICR_TCCF; /* Clear transfer complete flag */
00033         }
00034         else
00035         {
00036             //Si le registre de données est vide
00037             while (!(USART1->ISR & (USART1->ISR | USART_ISR_TXE)));
00038             USART1->TDR = Array[send];
00039         }
00040     }
00041 }
00042 
00043 void ReceiveChar(int TimeOut){
00044     char buffer[300] = {0};
00045     int counter = 0;
00046     for(int i = 0; i < TimeOut; i++){
00047         if((USART1->ISR & USART_ISR_RXNE) == USART_ISR_RXNE){
00048             //buffer[counter] = (uint8_t)(USART1->RDR); // Receive data, clear flag
00049             pc.printf("%02X", USART1->RDR);
00050             counter++;
00051             myled = 1; // LED is ON
00052         }
00053         if(counter >= sizeof(buffer)){
00054             break;
00055         }
00056     }
00057     int sizeBuffer = sizeof(buffer);
00058     SendChar(buffer, sizeBuffer);
00059 }
00060 
00061 int main() {
00062     usartSetup();
00063     char stringtosend[] = {"Salut ca va ? Oui et toi ? Oh yes ca fonctionne bien ahahahahahahahahahahahah\r\n"};
00064     int sizeArray = sizeof(stringtosend);
00065     SendChar(stringtosend, sizeArray);
00066     ReceiveChar(500);
00067 }