aruaru
/
mbed-os-stm32l4-dma-uart
STmicro HAL driver DMA.
main.cpp@0:96568f3ac645, 2019-04-08 (annotated)
- Committer:
- aruaru
- Date:
- Mon Apr 08 13:53:14 2019 +0000
- Revision:
- 0:96568f3ac645
- Child:
- 2:9d67e2b0d96b
dam in out works.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
aruaru | 0:96568f3ac645 | 1 | /* mbed Microcontroller Library |
aruaru | 0:96568f3ac645 | 2 | * Copyright (c) 2018 ARM Limited |
aruaru | 0:96568f3ac645 | 3 | * SPDX-License-Identifier: Apache-2.0 |
aruaru | 0:96568f3ac645 | 4 | */ |
aruaru | 0:96568f3ac645 | 5 | |
aruaru | 0:96568f3ac645 | 6 | #include "mbed.h" |
aruaru | 0:96568f3ac645 | 7 | #include "stats_report.h" |
aruaru | 0:96568f3ac645 | 8 | |
aruaru | 0:96568f3ac645 | 9 | /* |
aruaru | 0:96568f3ac645 | 10 | * main.cpp |
aruaru | 0:96568f3ac645 | 11 | * |
aruaru | 0:96568f3ac645 | 12 | * Created on: 2019/04/03 |
aruaru | 0:96568f3ac645 | 13 | * Author: aruaru |
aruaru | 0:96568f3ac645 | 14 | */ |
aruaru | 0:96568f3ac645 | 15 | |
aruaru | 0:96568f3ac645 | 16 | |
aruaru | 0:96568f3ac645 | 17 | #include "application.h" |
aruaru | 0:96568f3ac645 | 18 | |
aruaru | 0:96568f3ac645 | 19 | #include "usart.h" |
aruaru | 0:96568f3ac645 | 20 | #include "dma.h" |
aruaru | 0:96568f3ac645 | 21 | #include "mx.h" |
aruaru | 0:96568f3ac645 | 22 | |
aruaru | 0:96568f3ac645 | 23 | EventQueue* hqueue; |
aruaru | 0:96568f3ac645 | 24 | DigitalOut* hled; |
aruaru | 0:96568f3ac645 | 25 | Timer utime; |
aruaru | 0:96568f3ac645 | 26 | int now;//1ms毎に更新 |
aruaru | 0:96568f3ac645 | 27 | |
aruaru | 0:96568f3ac645 | 28 | int printfunc(const char *format, ...){ |
aruaru | 0:96568f3ac645 | 29 | char* b; |
aruaru | 0:96568f3ac645 | 30 | int len; |
aruaru | 0:96568f3ac645 | 31 | va_list arg; |
aruaru | 0:96568f3ac645 | 32 | va_start(arg, format); |
aruaru | 0:96568f3ac645 | 33 | len=vasprintf( &b , format, arg ); |
aruaru | 0:96568f3ac645 | 34 | int status; |
aruaru | 0:96568f3ac645 | 35 | int retry; |
aruaru | 0:96568f3ac645 | 36 | while(1) |
aruaru | 0:96568f3ac645 | 37 | { |
aruaru | 0:96568f3ac645 | 38 | status = printUart( b , len ); |
aruaru | 0:96568f3ac645 | 39 | if(status == HAL_OK)break; |
aruaru | 0:96568f3ac645 | 40 | wait_ms(10); |
aruaru | 0:96568f3ac645 | 41 | retry++; |
aruaru | 0:96568f3ac645 | 42 | if(retry>10)return 0; |
aruaru | 0:96568f3ac645 | 43 | } |
aruaru | 0:96568f3ac645 | 44 | va_end(arg); |
aruaru | 0:96568f3ac645 | 45 | free(b); |
aruaru | 0:96568f3ac645 | 46 | return len; |
aruaru | 0:96568f3ac645 | 47 | } |
aruaru | 0:96568f3ac645 | 48 | void interval1ms(void){ |
aruaru | 0:96568f3ac645 | 49 | char c; |
aruaru | 0:96568f3ac645 | 50 | now=utime.read_ms(); |
aruaru | 0:96568f3ac645 | 51 | if(1){ |
aruaru | 0:96568f3ac645 | 52 | if( getChar(&c) ){ |
aruaru | 0:96568f3ac645 | 53 | logMessage("utime:%d,cndtr:%d,pos:%d,%02x,%c\n\r",now,readCndtr(),readPos(),c,c); |
aruaru | 0:96568f3ac645 | 54 | } |
aruaru | 0:96568f3ac645 | 55 | } |
aruaru | 0:96568f3ac645 | 56 | } |
aruaru | 0:96568f3ac645 | 57 | void interval1000ms(void){ |
aruaru | 0:96568f3ac645 | 58 | *hled = !*hled; |
aruaru | 0:96568f3ac645 | 59 | } |
aruaru | 0:96568f3ac645 | 60 | void systemInfo(){ |
aruaru | 0:96568f3ac645 | 61 | mbed_stats_sys_t stats; |
aruaru | 0:96568f3ac645 | 62 | mbed_stats_sys_get(&stats); |
aruaru | 0:96568f3ac645 | 63 | |
aruaru | 0:96568f3ac645 | 64 | /* CPUID Register information |
aruaru | 0:96568f3ac645 | 65 | [31:24]Implementer 0x41 = ARM |
aruaru | 0:96568f3ac645 | 66 | [23:20]Variant Major revision 0x0 = Revision 0 |
aruaru | 0:96568f3ac645 | 67 | [19:16]Architecture 0xC = Baseline Architecture |
aruaru | 0:96568f3ac645 | 68 | 0xF = Constant (Mainline Architecture?) |
aruaru | 0:96568f3ac645 | 69 | [15:4]PartNO 0xC20 = Cortex-M0 |
aruaru | 0:96568f3ac645 | 70 | 0xC60 = Cortex-M0+ |
aruaru | 0:96568f3ac645 | 71 | 0xC23 = Cortex-M3 |
aruaru | 0:96568f3ac645 | 72 | 0xC24 = Cortex-M4 |
aruaru | 0:96568f3ac645 | 73 | 0xC27 = Cortex-M7 |
aruaru | 0:96568f3ac645 | 74 | 0xD20 = Cortex-M23 |
aruaru | 0:96568f3ac645 | 75 | 0xD21 = Cortex-M33 |
aruaru | 0:96568f3ac645 | 76 | [3:0]Revision Minor revision: 0x1 = Patch 1. |
aruaru | 0:96568f3ac645 | 77 | */ |
aruaru | 0:96568f3ac645 | 78 | |
aruaru | 0:96568f3ac645 | 79 | /* Compiler versions: |
aruaru | 0:96568f3ac645 | 80 | ARM: PVVbbbb (P = Major; VV = Minor; bbbb = build number) |
aruaru | 0:96568f3ac645 | 81 | GCC: VVRRPP (VV = Version; RR = Revision; PP = Patch) |
aruaru | 0:96568f3ac645 | 82 | IAR: VRRRPPP (V = Version; RRR = Revision; PPP = Patch) |
aruaru | 0:96568f3ac645 | 83 | */ |
aruaru | 0:96568f3ac645 | 84 | logMessage("\n\r[%s] %s started.\n\r",__FUNCTION__,__FILE__ ); |
aruaru | 0:96568f3ac645 | 85 | logMessage("[%s]\tBUILD:%sT%s,\n\r",__FUNCTION__,__DATE__, __TIME__ ); |
aruaru | 0:96568f3ac645 | 86 | logMessage("[%s]\tmbed-OS:%d.%d.%d\n\r",__FUNCTION__, |
aruaru | 0:96568f3ac645 | 87 | MBED_MAJOR_VERSION, MBED_MINOR_VERSION,MBED_PATCH_VERSION |
aruaru | 0:96568f3ac645 | 88 | ); |
aruaru | 0:96568f3ac645 | 89 | logMessage("[%s]\tMbed OS Version: %ld \n\r",__FUNCTION__, stats.os_version); |
aruaru | 0:96568f3ac645 | 90 | logMessage("[%s]\tCPU ID: 0x%x \n\r",__FUNCTION__,(unsigned int) stats.cpu_id); |
aruaru | 0:96568f3ac645 | 91 | logMessage("[%s]\tCompiler ID: %d \n\r",__FUNCTION__, stats.compiler_id); |
aruaru | 0:96568f3ac645 | 92 | logMessage("[%s]\tCompiler Version: %d \n\r",__FUNCTION__, (unsigned int)stats.compiler_version); |
aruaru | 0:96568f3ac645 | 93 | logMessage("[%s]\tSTM32HAL_driver Version: 0x%08x \n\r",__FUNCTION__, (unsigned int)HAL_GetHalVersion()); |
aruaru | 0:96568f3ac645 | 94 | } |
aruaru | 0:96568f3ac645 | 95 | int main(){ |
aruaru | 0:96568f3ac645 | 96 | utime.start(); |
aruaru | 0:96568f3ac645 | 97 | hled = new DigitalOut(LED1); |
aruaru | 0:96568f3ac645 | 98 | hqueue = new EventQueue(32*EVENTS_EVENT_SIZE); |
aruaru | 0:96568f3ac645 | 99 | |
aruaru | 0:96568f3ac645 | 100 | MX_DMA_Init(); |
aruaru | 0:96568f3ac645 | 101 | MX_USART2_UART_Init(); |
aruaru | 0:96568f3ac645 | 102 | HAL_StatusTypeDef status; |
aruaru | 0:96568f3ac645 | 103 | |
aruaru | 0:96568f3ac645 | 104 | systemInfo(); |
aruaru | 0:96568f3ac645 | 105 | |
aruaru | 0:96568f3ac645 | 106 | status = startRxUart(); |
aruaru | 0:96568f3ac645 | 107 | if( status != HAL_OK ){ |
aruaru | 0:96568f3ac645 | 108 | printf("error status: %d\n\r",status); |
aruaru | 0:96568f3ac645 | 109 | }else{ |
aruaru | 0:96568f3ac645 | 110 | logMessage("uartRXstart status: %d\n\r", status ); |
aruaru | 0:96568f3ac645 | 111 | } |
aruaru | 0:96568f3ac645 | 112 | hqueue->call_every(1000,interval1000ms); |
aruaru | 0:96568f3ac645 | 113 | hqueue->call_every(1,interval1ms); |
aruaru | 0:96568f3ac645 | 114 | hqueue->dispatch_forever(); |
aruaru | 0:96568f3ac645 | 115 | } |