本文档基于stm32f103并移植到F407, MSP430,以及s3c2440
最终效果如下:
以上多余打印是调试时解析bug用的,可以去除。
本文参考u-boot命令行,重点部分有三个:①数据定义 ②获取串口数据(1个字节) ③解析数据
数据定义
typedef void (*CLI_handler)();
struct cmd_tbl_s {
char *name; /* Command Name */
int maxargs; /* maximum number of arguments */
CLI_handler cmd; /* Implementation function */
char *usage; /* Usage message (short) */
};
typedef struct cmd_tbl_s cmd_tbl_t;
#define REGISTER_CMD(name,maxargs,handler,usage)
const cmd_tbl_t strcmd_##name __attribute__ ((section ("cmd"))) = {#name, maxargs, handler, usage}
获取串口数据
判断串口是否有数据:
int UART_tstc(void)
{
return (USART2->SR & 0x0020); // RXNE
}
读取数据
u8 UART_getc(void)
{
return (u8)(UART_BASE->DR & 0xFF);
}
定义一个全局数组,保存串口信息
char console_buffer[256];
static int index = 0; /* buffer index */
数据获取和解析
void cmdline_run(void)
{
char *p = &console_buffer[index];
char * p_buf = p;
char c;
if(UART_tstc()){
c = (char)UART_getc();
switch (c)
{
case '
': /* Enter */
case '
':
*p = '