Project to use Serial with registers

Dependencies:   mbed

Committer:
SimonNOWAK
Date:
Wed Apr 05 15:19:22 2017 +0000
Revision:
4:d9c6de483827
Parent:
3:fba5fc24faff
update

Who changed what in which revision?

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