Project to use Serial with registers

Dependencies:   mbed

Committer:
SimonNOWAK
Date:
Wed Apr 05 14:51:42 2017 +0000
Revision:
3:fba5fc24faff
Parent:
2:1deea3b4119e
Child:
4:d9c6de483827
Update

Who changed what in which revision?

UserRevisionLine numberNew contents of line
SimonNOWAK 0:25823c5e440a 1 #include "mbed.h"
SimonNOWAK 0:25823c5e440a 2
SimonNOWAK 0:25823c5e440a 3 void usartSetup (void) {
SimonNOWAK 2:1deea3b4119e 4 RCC->IOPENR |= RCC_IOPENR_IOPBEN;
SimonNOWAK 0:25823c5e440a 5 RCC->APB2ENR |= RCC_APB2ENR_USART1EN; // enable clock for USART1
SimonNOWAK 2:1deea3b4119e 6 USART1->BRR = 320000 / 96; // set baudrate
SimonNOWAK 2:1deea3b4119e 7 GPIOB->MODER &= ~GPIO_MODER_MODE6_0;
SimonNOWAK 2:1deea3b4119e 8 GPIOB->MODER |= GPIO_MODER_MODE6_1;
SimonNOWAK 1:2b6896966307 9
SimonNOWAK 2:1deea3b4119e 10 GPIOB->AFR[1] |= 0x40;
SimonNOWAK 2:1deea3b4119e 11 GPIOB->OTYPER &= ~GPIO_OTYPER_OT_6;
SimonNOWAK 1:2b6896966307 12 USART1->CR1 |= (USART_CR1_RE | USART_CR1_TE | USART_CR1_UE); // RX, TX enable
SimonNOWAK 0:25823c5e440a 13 }
SimonNOWAK 0:25823c5e440a 14
SimonNOWAK 3:fba5fc24faff 15 void SendChar(char Array[], int size){
SimonNOWAK 3:fba5fc24faff 16 /* char stringtosend[] = {"Salut ca va ? Oui et toi ? Oh yes ca fonctionne bien ahahahahahahahahahahahah\r\n"};*/
SimonNOWAK 1:2b6896966307 17 Serial pc(USBTX, USBRX);
SimonNOWAK 3:fba5fc24faff 18 for(int send = 0; send < size; send++){
SimonNOWAK 2:1deea3b4119e 19 //On attend que la transmission soit terminée
SimonNOWAK 2:1deea3b4119e 20 while((USART1->ISR & USART_ISR_TC) != USART_ISR_TC);
SimonNOWAK 2:1deea3b4119e 21
SimonNOWAK 2:1deea3b4119e 22 //Si on a tout envoyé
SimonNOWAK 3:fba5fc24faff 23 if(send == size)
SimonNOWAK 2:1deea3b4119e 24 {
SimonNOWAK 2:1deea3b4119e 25 send=0;
SimonNOWAK 2:1deea3b4119e 26 USART1->ICR = USART_ICR_TCCF; /* Clear transfer complete flag */
SimonNOWAK 2:1deea3b4119e 27 }
SimonNOWAK 2:1deea3b4119e 28 else
SimonNOWAK 2:1deea3b4119e 29 {
SimonNOWAK 2:1deea3b4119e 30 //Si le registre de données est vide
SimonNOWAK 2:1deea3b4119e 31 while (!(USART1->ISR & (USART1->ISR | USART_ISR_TXE)));
SimonNOWAK 3:fba5fc24faff 32 USART1->TDR = Array[send];
SimonNOWAK 1:2b6896966307 33 }
SimonNOWAK 0:25823c5e440a 34 }
SimonNOWAK 0:25823c5e440a 35 }
SimonNOWAK 0:25823c5e440a 36
SimonNOWAK 3:fba5fc24faff 37 void ReceiveChar(int TimeOut){
SimonNOWAK 3:fba5fc24faff 38 USART1->BRR = 320000 / 96;
SimonNOWAK 3:fba5fc24faff 39 USART1->CR1 = USART_CR1_RXNEIE | USART_CR1_RE | USART_CR1_UE;
SimonNOWAK 3:fba5fc24faff 40 char buffer[300] = {0};
SimonNOWAK 3:fba5fc24faff 41 int counter = 0;
SimonNOWAK 3:fba5fc24faff 42 for(int i = 0; i < TimeOut; i++){
SimonNOWAK 3:fba5fc24faff 43 if((USART1->ISR & USART_ISR_RXNE) == USART_ISR_RXNE){
SimonNOWAK 3:fba5fc24faff 44 buffer[counter] = (uint8_t)(USART1->RDR); // Receive data, clear flag
SimonNOWAK 3:fba5fc24faff 45 counter++;
SimonNOWAK 3:fba5fc24faff 46 }
SimonNOWAK 3:fba5fc24faff 47 if(counter >= sizeof(buffer)){
SimonNOWAK 3:fba5fc24faff 48 break;
SimonNOWAK 3:fba5fc24faff 49 }
SimonNOWAK 3:fba5fc24faff 50 }
SimonNOWAK 3:fba5fc24faff 51 usartSetup();
SimonNOWAK 3:fba5fc24faff 52 int sizeBuffer = sizeof(buffer);
SimonNOWAK 3:fba5fc24faff 53 SendChar(buffer, sizeBuffer);
SimonNOWAK 3:fba5fc24faff 54 }
SimonNOWAK 3:fba5fc24faff 55
SimonNOWAK 0:25823c5e440a 56 int main() {
SimonNOWAK 0:25823c5e440a 57 usartSetup();
SimonNOWAK 3:fba5fc24faff 58 char stringtosend[] = {"Salut ca va ? Oui et toi ? Oh yes ca fonctionne bien ahahahahahahahahahahahah\r\n"};
SimonNOWAK 3:fba5fc24faff 59 int sizeArray = sizeof(stringtosend);
SimonNOWAK 3:fba5fc24faff 60 SendChar(stringtosend, sizeArray);
SimonNOWAK 3:fba5fc24faff 61 ReceiveChar(500);
SimonNOWAK 0:25823c5e440a 62 }