aruaru / Mbed OS mbed-os-stm32l4-dma-uart
Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 /* mbed Microcontroller Library
00002  * Copyright (c) 2018 ARM Limited
00003  * SPDX-License-Identifier: Apache-2.0
00004  */
00005 
00006 #include "mbed.h"
00007 #include "stats_report.h"
00008 
00009 /*
00010  * main.cpp
00011  *
00012  *  Created on: 2019/04/03
00013  *      Author: aruaru
00014  */
00015 
00016 
00017 #include "application.h"
00018 
00019 #include "usart.h"
00020 #include "dma.h"
00021 #include "mx.h"
00022 
00023 EventQueue* hqueue;
00024 DigitalOut* hled;
00025 Timer utime;
00026 int now;//1ms毎に更新
00027 #if defined ( __GNUC__ )
00028 int printfunc(const char *format, ...){
00029     char* b;
00030     const size_t size=300;
00031     int len;
00032     va_list arg;
00033     b = (char *)malloc(sizeof(char)*size);
00034     va_start(arg, format);
00035     len=vsnprintf( b , size , format, arg );
00036     int status;
00037     int retry;
00038     while(1)
00039     {
00040         status = printUart( b , len );
00041         if(status == HAL_OK)break;
00042         wait_ms(10);
00043         retry++;
00044         if(retry>10){
00045             len=0;
00046             break;
00047         }
00048     }
00049     va_end(arg);
00050     free(b);
00051     return len;
00052 }
00053 #else
00054 int printfunc(const char *format, ...){
00055     char* b;
00056     int len;
00057     va_list arg;
00058     va_start(arg, format);
00059     len=vasprintf( &b , format, arg );
00060     int status;
00061     int retry;
00062     while(1)
00063     {
00064         status = printUart( b , len );
00065         if(status == HAL_OK)break;
00066         wait_ms(10);
00067         retry++;
00068         if(retry>100){
00069             len=0;
00070             break;
00071         }
00072     }
00073     va_end(arg);
00074     free(b);
00075     return len;
00076 }
00077 #endif
00078 void interval1ms(void){
00079     char c;
00080     now=utime.read_ms();
00081     if(1){
00082         if( getChar(&c) ){
00083             logMessage("utime:%d,cndtr:%d,pos:%d,%02x,%c\n\r",now,readCndtr(),readPos(),c,c);
00084         }
00085     }
00086 }
00087 void interval1000ms(void){
00088     *hled = !*hled;
00089 }
00090 void systemInfo(){
00091     mbed_stats_sys_t stats;
00092     mbed_stats_sys_get(&stats);
00093 
00094     /* CPUID Register information
00095     [31:24]Implementer      0x41 = ARM
00096     [23:20]Variant          Major revision 0x0  =  Revision 0
00097     [19:16]Architecture     0xC  = Baseline Architecture
00098                             0xF  = Constant (Mainline Architecture?)
00099     [15:4]PartNO            0xC20 =  Cortex-M0
00100                             0xC60 = Cortex-M0+
00101                             0xC23 = Cortex-M3
00102                             0xC24 = Cortex-M4
00103                             0xC27 = Cortex-M7
00104                             0xD20 = Cortex-M23
00105                             0xD21 = Cortex-M33
00106     [3:0]Revision           Minor revision: 0x1 = Patch 1.
00107     */
00108 
00109     /* Compiler versions:
00110        ARM: PVVbbbb (P = Major; VV = Minor; bbbb = build number)
00111        GCC: VVRRPP  (VV = Version; RR = Revision; PP = Patch)
00112        IAR: VRRRPPP (V = Version; RRR = Revision; PPP = Patch)
00113     */
00114     logMessage("\n\r[%s] %s started.\n\r",__FUNCTION__,__FILE__            );
00115     logMessage("[%s]\tBUILD:%sT%s,\n\r",__FUNCTION__,__DATE__, __TIME__          );
00116     logMessage("[%s]\tmbed-OS:%d.%d.%d\n\r",__FUNCTION__,
00117             MBED_MAJOR_VERSION, MBED_MINOR_VERSION,MBED_PATCH_VERSION
00118             );
00119     logMessage("[%s]\tMbed OS Version: %ld \n\r",__FUNCTION__, stats.os_version);
00120     logMessage("[%s]\tCPU ID: 0x%x \n\r",__FUNCTION__,(unsigned int) stats.cpu_id);
00121     logMessage("[%s]\tCompiler ID: %d \n\r",__FUNCTION__, stats.compiler_id);
00122     logMessage("[%s]\tCompiler Version: %d \n\r",__FUNCTION__, (unsigned int)stats.compiler_version);
00123     logMessage("[%s]\tSTM32HAL_driver Version: 0x%08x \n\r",__FUNCTION__, (unsigned int)HAL_GetHalVersion());
00124 }
00125 int main(){
00126     utime.start();
00127     hled = new DigitalOut(LED1);
00128     hqueue = new EventQueue(32*EVENTS_EVENT_SIZE);
00129 
00130     MX_DMA_Init();
00131     MX_USART2_UART_Init();
00132     HAL_StatusTypeDef status;
00133 
00134     systemInfo();
00135 
00136     status = startRxUart();
00137     if( status != HAL_OK ){
00138         printf("error status: %d\n\r",status);
00139     }else{
00140         logMessage("uartRXstart status: %d\n\r", status );
00141     }
00142     hqueue->call_every(1000,interval1000ms);
00143     hqueue->call_every(1,interval1ms);
00144     hqueue->dispatch_forever();
00145 }