![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Project to use Serial with registers
Diff: main.cpp
- 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]; } + } }