timer

timer

0个粉丝

9

问答

0

专栏

13

资料

timer  发布于  2013-12-07 22:31:36
采纳率 0%
9个问答
6811

把printf打印到STM32的串口容易,可是scanf呢,该怎么写?

 
如题,看到很多开发板写一个putch函数,如下,就可以简单地把printf转移到串口输出。十分方便。那么如何把scanf也写出来呢?
int fputc(int ch,FILE *f)
{
        /* 将printf打印内容发往串口 */
        USART_SendData(USART1, (unsigned char) ch);
        while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);

        return (ch);
}
我来回答
回答2个
时间排序
认可量排序

OTC

0个粉丝

7

问答

0

专栏

6

资料

OTC 2013-12-07 22:32:18
认可0
给你一个参考代码,修改一下就行
/*-----------------------------------------------------------------------------
*      Line Editor //DD±à¼-Æ÷
*----------------------------------------------------------------------------*/
int getline (char *line, int n)  {
  static int  cnt  = 0;  //×¢òaêǾ2쬱äá¿¡a¡a¡a¡a¡a¡a¡a¡a·Ç3£ÖØòa
         int  cnt1;
         char c;

  line += cnt;
  c = (char )(getkey ());                   /* Read key from Serial port      */
  if (c) {
    if (c == CR)  c = LF;                   /* CR = LF                        */
    if (c == BACKSPACE  ||  c == DEL)  {    /* process backspace              */
      if (cnt != 0)  {
        cnt--;                              /* decrement count                */
        line--;                             /* and line pointer               */
        sendchar (BACKSPACE);               /* echo backspace                 */
        sendchar (' ');
        sendchar (BACKSPACE);
      }
    }
    else if (c == ESC) {                    /* process escape                 */
      *line++ = c;                          /* store character and increment  */
      cnt++;                                /* and count                      */
    }
    else if (c != CNTLQ &&                  /* ignore: Control Q = XON        */
             c != CNTLS ) {                 /*         Control S = XOFF       */
      sendchar (*line = c);                 /* echo and store character       */
      line++;                               /* increment line pointer         */
      cnt++;                                /* and count                      */
    }
    if ((cnt >= n - 1) || (c == LF) || (c == ESC)) {
      *line = 0;                            /* mark end of string ±ê¼Ç×Ö·û′®½áÎ2 */
      cnt1  = cnt;
      cnt   = 0;
      return (cnt1); //Ö»óDêäèë»»DD¼ü¡¢ESC¼ü»òÃû×ÖÏî3¬1y1602Å·μ»Ø3¤¶èÖ죬·ñÔòò»Âé·μ»Ø0
    }
  }

  return (0);
}

summon

0个粉丝

7

问答

0

专栏

2

资料

summon 2013-12-07 22:34:46
认可0
楼上的不够简洁啊,来看看我的代码,绝对好用。已经得到实际验证可用

uint8_t USART_Scanf(uint32_t value)
{
    uint32_t index = 0;
    uint32_t tmp[2] = {0, 0};
   
    while (index < 2)
    {
        /* Loop until RXNE = 1 */
        while (USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET)
        {}
        tmp[index++] = (USART_ReceiveData(USART1));
        if ((tmp[index - 1] < 0x30) || (tmp[index - 1] > 0x39))
        {
            USART_printf(USART1,"\n\rPlease enter valid number between 0 and 9");
            index--;
        }
    }
    /* Calculate the Corresponding value */
    index = (tmp[1] - 0x30) + ((tmp[0] - 0x30) * 10);
    /* Checks */
    if (index > value)
    {
        USART_printf(USART1,"\n\rPlease enter valid number between 0 and %d", value);
        return 0xFF;
    }
    return index;
}
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
+ 添加网盘链接/附件

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
相关问答
无更多相似问答 去提问
举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

易百纳技术社区