矿石收音机论坛

 找回密码
 加入会员

QQ登录

只需一步,快速开始

搜索
楼主: pdshyh

Keil uVision5点亮LED灯错误

[复制链接]
     
 楼主| 发表于 2021-3-3 16:02:45 | 显示全部楼层
请教各位老师,跟着<STM32库开发实战指南>做到第八章串口通信出现问题,谢谢
usart1.c(186): warning:  #223-D: function "USART_GatFlagStatus" declared implicitly
                                                  whil(USART_GatFlagStatus(USARTx,USART_FLAG_TC)==RESET);
usart1.c(191): error:  #20: identifier "d" is undefined
                                                     d =va_arg(ap,int);
usart1.c(191): error:  #29: expected an expression
                                                     d =va_arg(ap,int);
微信图片_20210303155908.png
回复 支持 反对

使用道具 举报

     
发表于 2021-3-3 16:18:19 | 显示全部楼层
每个打叉的地方,都有语法错误。

183: for 语句当中需要两个半角 ; 而实际少了
185: 目测 s 都没定义
191: 目测 d 没定义
192: 同 191
193: 同 185
195: 同 185
205: 检查 else 匹配的 if / else if 是否完整
206: whil 是什么鬼?
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2021-3-4 09:26:46 | 显示全部楼层
t3486784401 发表于 2021-3-3 16:18
每个打叉的地方,都有语法错误。

183: for 语句当中需要两个半角 ; 而实际少了

谢谢指教,确实第一次运行标点符号不是半角 出现错误十多条,这个183: for 语句我反复用半角括号冒号或改逗号都不行,s 和d 没定义,前面r和n语句相近没有这个提示,漏加了#include "stdarg.h "再加上d=va_arg(ap,int)中int下划提示线没有了,d下划提示线还有。再次感谢指教
下面是这个完整打印函数:/*
*函数名:USART1_printf
*描述  :格式化输出,类似于C库中的printf,但这里没有调用C库
*输入  :USARTx 串口通道,这里只用到了串口1,即USART1
*        -Data 要发送到串口的内容指针
*      :-...  其它参数
*输出  :无
*返回  :无       
*调用  :外部调用USART1_printf(USART1,"\r\n this is a  demo \r\n");
*                             USART1_printf(USART1,"\r\n %d \r\n",i);
*                             USART1_printf(USART1,"\r\n %s \r\n",j);       
*/
void USART1_printf(USART_TypeDef* USARTx, uint8_t *Data,...)       
{
        const char *a;
        char bus[16];
        va_list ap;
        va_start(ap,Data);
          while(*Data !=0)  //判断是否到达字符串结束符
                {
                        if(*Data==0x5c)  // '\'
                        {
                                switch( *++Data)
                                {
                                        case 'r':     //回车符
                                                   USART_SendData(USARTx,0x0d);
                                             Data ++;
                                                         break;
                                        case 'n':     //换行符
                                                   USART_SendData(USARTx,0x0a);
                                             Data ++;
                                                         break;
                                        default:
                                             Data ++;
                                                         break;
                                }
                        }
                        else if(*Data=='%')
                        {
                                switch( *++Data)
                                {
                                        case 's':     //字符串
                                                   s=va_arg(ap,const char *);
                                        for( ; *s ; s++)
                                        {
                                         USART_SendData(USARTx,*s);
                                                whil(USART_GatFlagStatus(USARTx,USART_FLAG_TC)==RESET);
                                        }
                                             Data ++;
                                                         break;
                                        case 'd':     //十进制
                                                   d =va_arg(ap,int);
                                             intoa(d,buf,10);
                                        for(s=buf;*s;s++)
                                        {
                                         USART_SendData(USARTx,*s);
                                                whil(USART_GatFlagStatus(USARTx,USART_FLAG_TC)==RESET);
                                        }
                                             Data ++;
                                                         break;
                                        default:
                                                                                        Data ++;
                                                                break;
                                }
                                /* end of else if */
                                else USART_SendData(USARTx,*Data++);
                                whil(USART_GatFlagStatus(USARTx,USART_FLAG_TC)==RESET);
                        }
                       
                       
                }
}
微信图片_20210304075701.png
微信图片_20210304075736.png
微信图片_20210304075807.png
微信图片_20210304080343.png
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2021-3-4 14:39:38 | 显示全部楼层
本帖最后由 pdshyh 于 2021-3-4 15:16 编辑

请教上面程序现在应该怎么修改,现在还有5处错误,比葫芦画瓢还行,稍有变动就蒙了
*** Using Compiler 'V5.06 update 1 (build 61)', folder: 'C:\Program Files\keil\Keil_v5\ARM\ARMCC\Bin'
Build target 'Target 1'
compiling usart1.c...
usart1.c(182): error:  #20: identifier "s" is undefined
                                                     s=va_arg(ap,const char *);
usart1.c(183): error:  #65: expected a ";"
                                          for( ; *s , s++)
usart1.c(186): warning:  #223-D: function "whil" declared implicitly
                                                  whil(USART_GatFlagStatus(USARTx,USART_FLAG_TC)==RESET);
usart1.c(186): warning:  #223-D: function "USART_GatFlagStatus" declared implicitly
                                                  whil(USART_GatFlagStatus(USARTx,USART_FLAG_TC)==RESET);
usart1.c(191): error:  #20: identifier "d" is undefined
                                                     d =va_arg(ap,int);
usart1.c(192): warning:  #223-D: function "intoa" declared implicitly
                                               intoa(d,buf,10);
usart1.c(192): error:  #20: identifier "buf" is undefined
                                               intoa(d,buf,10);
usart1.c(196): warning:  #223-D: function "whil" declared implicitly
                                                  whil(USART_GatFlagStatus(USARTx,USART_FLAG_TC)==RESET);
usart1.c(196): warning:  #223-D: function "USART_GatFlagStatus" declared implicitly
                                                  whil(USART_GatFlagStatus(USARTx,USART_FLAG_TC)==RESET);
usart1.c(205): error:  #127: expected a statement
                                  else USART_SendData(USARTx,*Data++);
usart1.c(206): warning:  #223-D: function "whil" declared implicitly
                                  whil(USART_GatFlagStatus(USARTx,USART_FLAG_TC)==RESET);
usart1.c(206): warning:  #223-D: function "USART_GatFlagStatus" declared implicitly
                                  whil(USART_GatFlagStatus(USARTx,USART_FLAG_TC)==RESET);
usart1.c(154): warning:  #177-D: variable "a" was declared but never referenced
          const char *a;
usart1.c(155): warning:  #177-D: variable "bus" was declared but never referenced
          char bus[16];
usart1.c(97): warning:  #177-D: function "itoa" was declared but never referenced
  static char *itoa(int value,char *string,int radix )
usart1.c: 10 warnings, 5 errors
"..\usart1.axf" - 5 Error(s), 10 Warning(s).
Target not created.
Build Time Elapsed:  00:00:01
s /d/buf三个错误没定义,前面r和n语句相近没有定义确没有这个提示,什么原因?
205:else USART_SendData(USARTx,*Data++);错误需要声明,楼上老师提出else的 if / else if 是否 匹配完整, 不知道怎么匹配。
206:whil(USART_GatFlagStatus(USARTx,USART_FLAG_TC)==RESET);错误提示没有了不知道为什么。

补充内容 (2021-3-5 07:58):
205:else USART_SendData(USARTx,*Data++);错误查到了少了一个大括号

补充内容 (2021-3-5 08:04):
154const char *a;改为154const char *a,s,d;运行多了好几个错误
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2021-3-5 11:00:58 | 显示全部楼层
仔细对照修改,原来把const char *s;错误写为const char *a;把char buf[16];错误写为char bus[16];最后修改为char buf;这样
只剩下194:for(s=buf;*s;s++)一条错误了 usart1.c(194): error:  #513: a value of type "char" cannot be assigned to an entity of type "const char *"翻译#513:不能将“char”类型的值赋给“const char*类型的实体”,这个错误怎么改,请教解惑谢谢!
回复 支持 反对

使用道具 举报

     
发表于 2021-4-1 10:06:02 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2021-4-1 11:10:38 | 显示全部楼层
cky1 发表于 2021-4-1 10:06
仔细对照修改,原来把const char *s;错误写为const char *a;把char buf[16];错误写为char bus[16];最后修改 ...

谢谢,主要问题是输入错误,还有文件头漏,我另发贴请教见<请教USART1_printf函数部分for(s=buf;*s;s++)错误修改
http://www.crystalradio.cn/forum ... &fromuid=228929>,运行通过写入单片机还是不能按编程内容显示,输入信息又重复显示到输出,放哪了
回复 支持 反对

使用道具 举报

     
发表于 2021-4-1 11:15:00 | 显示全部楼层
pdshyh 发表于 2021-4-1 11:10
谢谢,主要问题是输入错误,还有文件头漏,我另发贴请教见,运行通过写入单片机还是不能按编程内容显示, ...

这个例子对于初学者,有点偏难,可以先放过
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2021-4-1 14:19:11 | 显示全部楼层
本帖最后由 pdshyh 于 2021-4-1 15:20 编辑
iffi123 发表于 2021-4-1 11:15
这个例子对于初学者,有点偏难,可以先放过


谢谢iffi123 老师支持,这段时间把手头的一个电源的错误刚刚弄完,准备用板子提供的串口示例过了接着看<STM32库开发实战指南>往下做。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入会员

本版积分规则

小黑屋|手机版|矿石收音机 ( 蒙ICP备05000029号-1 )

蒙公网安备 15040402000005号

GMT+8, 2024-4-28 18:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表