walnutcy

DIY U盘项目之 串口控制台

0
阅读(21850)

附件:

月初就收到21ic的DIY U盘项目的开发板了,一直没时间玩,这两天抽空弄了弄,

目前已完成基于串口的控制台,这里提供完整的工程下载。

代码比较简单,这里值得一提的是,实现串口printf函数时利用了keil mdk的特性,

具体如下表:这个表可以在D:\Keil\ARM\Hlp\armlib.chm里找到

表 2.13. 输入/输出依赖性

 

低级对象         高级函数        
  fprintf printf fwrite fputs puts fscanf scanf fread read fgets gets
__FILE[1] x x x x x x x x x x x
__stdin[2] ? ? ? ? ? ? x ? x ? x
__stdout[3] ? x ? ? x ? ? ? ? ? ?
fputc()[4] x x x x x ? ? ? ? ? ?
ferror()[5] x x x ? ? ? ? ? ? ? ?
fgetc()[6] ? ? ? ? ? x x x x x x
__backspace()[7] ? ? ? ? ? x x ? ? ? ?

[1] 文件结构。

[2] __FILE 类型的标准输入对象。

[3] __FILE 类型的标准输出对象。

[4] 将一个字符输出到文件。

[5] 返回在文件输入/ 输出期间累积发生的错误状态。

[6] 从文件中取得一个字符。

[7] 将文件指针移动到前一个字符。请参阅 重新实现 __backspace()

参照上表,我们要使用printf输出到串口,只需要实现函数fputc, ferror即可,

即借助于输出重定向来使用printf,避免自己实现printf函数的浩大工程。

extern void ShellPutChar(char data); /* in shell.c */
struct __FILE
{
 int handle;
 /* Add whatever you need here */
};
FILE __stdout;

int fputc(int ch, FILE *f)
{
   ShellPutChar(ch);
   return (1);
}

int ferror(FILE *f)
{
  /* Your implementation of ferror */
  return EOF;
}

完整实现参见:Retarget.c

电路连接:开发板供电(可能过USB接口供电),串口接在comdebug上,

运行效果如下: