DIY U盘项目之 串口控制台
0赞月初就收到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]
[3] [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上,
运行效果如下: