Simon NOWAK
/
RegistreSerial
Project to use Serial with registers
main.cpp@4:d9c6de483827, 2017-04-05 (annotated)
- Committer:
- SimonNOWAK
- Date:
- Wed Apr 05 15:19:22 2017 +0000
- Revision:
- 4:d9c6de483827
- Parent:
- 3:fba5fc24faff
update
Who changed what in which revision?
User | Revision | Line number | New 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 | } |