int main() { SystemInit(); SystemCoreClockUpdate(); GPIO_PinDirection(P2_0,OUTPUT); GPIO_PinDirection(P2_1,OUTPUT); GPIO_PinDirection(P2_2,OUTPUT); GPIO_PinDirection(P2_3,OUTPUT); GPIO_PinWrite(P2_0,1); UsbSerial_Init(9600); GPIO_PinWrite(P2_1,1); while(1) { UsbSerial_TxString(" Welcome to ARM Serial Programming by ExploreEmbedded\n\r"); } }
void UsbSerial_Printf(const char *argList, ...) { const char *ptr; double v_floatNum_f32; va_list argp; sint16_t v_num_s16; sint32_t v_num_s32; uint16_t v_num_u16; uint32_t v_num_u32; char *str; char ch; uint8_t v_numOfDigitsToTransmit_u8; va_start(argp, argList); /* Loop through the list to extract all the input arguments */ for(ptr = argList; *ptr != '\0'; ptr++) { ch= *ptr; if(ch == '%') /*Check for '%' as there will be format specifier after it */ { ptr++; ch = *ptr; if((ch>=0x30) && (ch<=0x39)) { v_numOfDigitsToTransmit_u8 = 0; while((ch>=0x30) && (ch<=0x39)) { v_numOfDigitsToTransmit_u8 = (v_numOfDigitsToTransmit_u8 * 10) + (ch-0x30); ptr++; ch = *ptr; } } else { v_numOfDigitsToTransmit_u8 = C_MaxDigitsToTransmitUsingPrintf_U8; } switch(ch) /* Decode the type of the argument */ { case 'C': case 'c': /* Argument type is of char, hence read char data from the argp */ ch = va_arg(argp, int); UsbSerial_TxChar(ch); break; case 'd': /* Argument type is of signed integer, hence read 16bit data from the argp */ v_num_s16 = va_arg(argp, int); #if (Enable_UsbSerial_TxNumber == 1) if(v_num_s16<0) { /* If the number is -ve then display the 2's complement along with '-' sign */ v_num_s16 = -v_num_s16; UsbSerial_TxChar('-'); } UsbSerial_TxNumber(C_DECIMAL_U8,v_num_s16,v_numOfDigitsToTransmit_u8); #endif break; case 'D': /* Argument type is of integer, hence read 16bit data from the argp */ v_num_s32 = va_arg(argp, sint32_t); #if (Enable_UsbSerial_TxNumber == 1) if(v_num_s32<0) { /* If the number is -ve then display the 2's complement along with '-' sign */ v_num_s32 = -v_num_s32; UsbSerial_TxChar('-'); } UsbSerial_TxNumber(C_DECIMAL_U8,v_num_s32,v_numOfDigitsToTransmit_u8); #endif break; case 'u': /* Argument type is of unsigned integer, hence read 16bit unsigned data */ v_num_u16 = va_arg(argp, int); #if (Enable_UsbSerial_TxNumber == 1) UsbSerial_TxNumber(C_DECIMAL_U8,v_num_u16,v_numOfDigitsToTransmit_u8); #endif break; case 'U': /* Argument type is of integer, hence read 32bit unsigend data */ v_num_u32 = va_arg(argp, uint32_t); #if (Enable_UsbSerial_TxNumber == 1) UsbSerial_TxNumber(C_DECIMAL_U8,v_num_u32,v_numOfDigitsToTransmit_u8); #endif break; case 'x': /* Argument type is of hex, hence hexadecimal data from the argp */ v_num_u16 = va_arg(argp, int); #if (Enable_UsbSerial_TxNumber == 1) UsbSerial_TxNumber(C_HEX_U8, v_num_u16,v_numOfDigitsToTransmit_u8); #endif break; case 'X': /* Argument type is of hex, hence hexadecimal data from the argp */ v_num_u32 = va_arg(argp, uint32_t); #if (Enable_UsbSerial_TxNumber == 1) UsbSerial_TxNumber(C_HEX_U8, v_num_u32,v_numOfDigitsToTransmit_u8); #endif break; case 'b': /* Argument type is of binary,Read int and convert to binary */ v_num_u16 = va_arg(argp, int); #if (Enable_UsbSerial_TxNumber == 1) if(v_numOfDigitsToTransmit_u8 == C_MaxDigitsToTransmitUsingPrintf_U8) { v_numOfDigitsToTransmit_u8 = 16; } UsbSerial_TxNumber(C_BINARY_U8, v_num_u16,v_numOfDigitsToTransmit_u8); #endif break; case 'B': /* Argument type is of binary,Read int and convert to binary */ v_num_u32 = va_arg(argp, uint32_t); #if (Enable_UsbSerial_TxNumber == 1) if(v_numOfDigitsToTransmit_u8 == C_MaxDigitsToTransmitUsingPrintf_U8) v_numOfDigitsToTransmit_u8 = 16; UsbSerial_TxNumber(C_BINARY_U8, v_num_u32,v_numOfDigitsToTransmit_u8); #endif break; case 'F': case 'f': /* Argument type is of float, hence read double data from the argp */ v_floatNum_f32 = va_arg(argp, double); #if (Enable_UsbSerial_TxFloatNumber == 1) UsbSerial_TxFloatNumber(v_floatNum_f32); #endif break; case 'S': case 's': /* Argument type is of string, hence get the pointer to sting passed */ str = va_arg(argp, char *); UsbSerial_TxString(str); break; case '%': UsbSerial_TxChar('%'); break; } } else {