walnutcy

DIY U盘项目之 串口控制台

0
阅读(21645)

附件:

月初就收到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上,

运行效果如下:

Baidu
map