API函数
static void uart1SendMsg(char msg[], uint16_t length) { uint16_t i;
for (i =0 ;i < length;i++) { UART1_SendData8(msg[i]); while(UART1_GetFlagStatus(UART1_FLAG_TC) == RESET); } } "` void myPrintfAscii(char *msg) { while((*msg) != '\0') { uart1SendMsg(msg, 1); msg++; } }
void myPrintfInt8(uint8_t msg[], int length) { char int2Ascii[64]; uint16_t i, m, intLength; int n; long temp;
for (i = 0;i < length;i++) { m = 0; temp = msg[i]; while(m <= 64) { int2Ascii[m++] = temp % 10; temp /= 10; if (0 == temp) { break; } } intLength = m; for (n = intLength - 1;n >= 0;n--) { int2Ascii[n] += '0'; uart1SendMsg(int2Ascii + n, 1); } myPrintfAscii(" "); } }
void myPrintfInt16(uint16_t msg[], int length) { char int2Ascii[64]; uint16_t i, m, intLength; int n; long temp;
for (i = 0;i < length;i++) { m = 0; temp = msg[i]; while(m <= 64) { int2Ascii[m++] = temp % 10; temp /= 10; if (0 == temp) { break; } } intLength = m; for (n = intLength - 1;n >= 0;n--) { int2Ascii[n] += '0'; uart1SendMsg(int2Ascii + n, 1); }
myPrintfAscii("\r\n"); } }
void myPrintfInt32(uint32_t msg[], int length) { char int2Ascii[64]; uint16_t i, m, intLength; int n; long temp;
for (i = 0;i < length;i++) { m = 0; temp = msg[i]; while(m <= 64) { int2Ascii[m++] = temp % 10; temp /= 10; if (0 == temp) { break; } } intLength = m; for (n = intLength - 1;n >= 0;n--) { int2Ascii[n] += '0'; uart1SendMsg(int2Ascii + n, 1); } myPrintfAscii(" "); } }
上述方法相对笨一点,而且无法打印负数,浮点数。下面直接使用printf标准输入输出函数,将调试信息串口打印出来。
printf 函数重映射
使用printf函数将调试信息用串口打印出来,首先在有printf函数的C文件下包含 #include ,其次将printf函数重定向串口输出1, 参考网址1。贴代码:
重映射代码,myPrintf.c
#include "stm8s.h" #include /* 由于不同的编译器 putcha 和 getchar 形参和返回值略有不同。 因此此处采用宏定义的方式区别。 _RAISONANCE_ 和 _COSMIC_ 这2个宏是由编译器自动添加的预编译宏 */ #ifdef _RAISONANCE_ #define PUTCHAR_PROTOTYPE int putchar (char c) #define GETCHAR_PROTOTYPE int getchar (void) #elif defined (_COSMIC_) #define PUTCHAR_PROTOTYPE char putchar (char c) #define GETCHAR_PROTOTYPE char getchar (void) #else /* _IAR_ */ #define PUTCHAR_PROTOTYPE int putchar (int c) #define GETCHAR_PROTOTYPE int getchar (void) #endif /* _RAISONANCE_ */
PUTCHAR_PROTOTYPE { /* 发送一个字符 c 到UART1 */ UART1_SendData8(c); /* 等待发送完毕 */ while (UART1_GetFlagStatus(UART1_FLAG_TXE) == RESET); return (c); }
GETCHAR_PROTOTYPE { #ifdef _COSMIC_ char c = 0; #else int c = 0; #endif /* 等待新数据到达 */ while (UART1_GetFlagStatus(UART1_FLAG_RXNE) == RESET); /* 读取数据寄存器 */ c = UART1_ReceiveData8(); return (c); }
main.c 主要输出部分:
#include void main(void) { myUart1Init (115200);
printf ("STM8S Start.\r\n"); while(1) { }
}
|