OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 20663|回复: 18

奇怪的错误。 Deprecated declaration IOInitOut - give arg types。

[复制链接]

15

主题

58

帖子

0

精华

初级会员

Rank: 2

积分
138
金钱
138
注册时间
2012-3-3
在线时间
0 小时
发表于 2012-3-12 23:05:58 | 显示全部楼层 |阅读模式
User\display12864.h(3): warning:  #1295-D: Deprecated declaration IOInitOut - give arg types

User\display12864.c(23): error:  #147: declaration is incompatible with "GPIO_InitTypeDef GPIOInitOut" 

编译时,出现好多这类型的警告和错误,不知道怎么回事啊。英语字面意思倒是理解了,但是,实际含义不清楚啊。

找了半天也没有找到错在哪里。求各位高手,帮忙解答啊。

先谢谢大家了。回去睡觉了。

唉。技术员累啊。









Good?good?study,day?day?up.?立志成为牛人。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-3-13 00:01:58 | 显示全部楼层
回复【楼主位】fanyi:
---------------------------------
第一个是警告,貌似是说参数类型不符合吧.
第二个是不匹配.也就是前后使用的东西不配对.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

15

主题

58

帖子

0

精华

初级会员

Rank: 2

积分
138
金钱
138
注册时间
2012-3-3
在线时间
0 小时
 楼主| 发表于 2012-3-13 09:45:46 | 显示全部楼层
好像不是啊。原子 老师。我把源程序贴上,你 有时间的话,帮我看看。谢谢了。

#include "stm32f10x.h"
#include "delay.h"   //必须配合delay.c和delay.h文件使用,所以要包含delay.c。
#include "display12864.h"

#define u16 unsigned short   //为了可移植性好,对这两个 STM 32 已经定义过的变量,再定义一次。
#define u8 unsigned char

/********** 以下是相关引脚定义。**************/

#define DisIO GPIOA                 //定义12864要使用的I/O端口。
#define DisClk RCC_APB2Periph_GPIOA  //定义12864要使用的I/O端口的时钟。
#define Data GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7
   //定义12864使用的数据引脚。
#define RS GPIO_Pin_9
#define RW GPIO_Pin_10
#define EN GPIO_Pin_11       //定义使能端使用的引脚。
#define SB GPIO_Pin_12      //定义并,串行数据模式的选择端口使用的引脚。

/*********************************************/
    
GPIO_InitTypeDef  GPIOInitOut; //定义用于定义所以引脚为输出的变量。
GPIO_InitTypeDef  GPIOInitIn; //定义用于定义数据引脚为输入的变量。

GPIOInitOut.GPIO_Mode = GPIO_Mode_Out_PP;//定义所有的引脚为推挽输出的变量初始化。
GPIOInitOut.GPIO_Speed = GPIO_Speed_50MHz;
GPIOInitOut.GPIO_Pin = Data|RS|RW|EN|PSB;

GPIOInitIn.GPIO_Mode = GPIO_Mode_IN_FLOATING;//定义数据引脚为浮空输入的变量初始化。
GPIOInitIn.GPIO_Speed = GPIO_Speed_50MHz;
GPIOInitIn.GPIO_Pin = Data;

void IOInitOut()           //把所有端口初始化为输出模式的函数。
{
RCC_APB2PeriphClockCmd(DisClk,ENABLE);
GPIO_Init(DisIO,&GPIOInitOut);
}

void IOInitIn()           //把数据引脚初始化为浮空输入的函数。
{

    RCC_APB2PeriphClockCmd(DisClk,ENABLE);   //把所有端口初始化为输出模式的函数。
GPIO_Init(DisIO,&GPIOInitIn);
}

void WaitBusy()        //等待12864的忙状态结束的函数。
{
IOInitIn();    //把数据引脚定义为浮空输入;
GPIO_ResetBits(DisIO,RS);  //RS = 0.
GPIO_SetBits(DisIO,RW);    //RW = 1.
GPIO_SetBits(DisIO,EN);    //EN = 1.
while(GPIO_ReadInputData(DisIO) & 0x0080); //只要位7的值,位7是忙标志位。
GPIO_ResetBits(DisIO,EN);  //EN = 0;
IOInitOut();   //把所以引脚定义为输出。
}

void WriteCmd(u8 cmd)    //写命令函数。
{
WaitBusy(); 
GPIO_ResetBits(DisIO,RS);  //RS = 0.
GPIO_ResetBits(DisIO,RW);  //RW = 0. 
GPIO_SetBits(DisIO,EN);    //EN = 1.
DisIO->ODR=((DisIO->ODR & 0x1100)|cmd); //此处,只有直接操作寄存器才能
              //达到,只改变输出数据寄存器ODR的低8位,其它位
  //不变的目的。因为,只有低8位是数据引脚,
  //其它位可能是控制引脚,不能改变。
delay_ms(2);
GPIO_ResetBits(DisIO,EN);  //EN = 0;
delay_ms(2); 
}

void WriteData(u8 data)  //写数据函数。
{
WaitBusy(); 
GPIO_SetBits(DisIO,RS);  //RS = 1. 
GPIO_ResetBits(DisIO,RW);  //RW = 0. 
GPIO_SetBits(DisIO,EN);    //EN = 1.
DisIO->ODR=((DisIO->ODR & 0x1100)|data);  //同上。
delay_ms(2);
GPIO_ResetBits(DisIO,EN);  //EN = 0;
delay_ms(2); 
}

void InitDis()   //初始化 12864 和要用到的 STM 32 的引脚。
{
IOInitOut();
delay_ms(2);
WriteCmd(0x30);  //选择基本指令集,和,8位数据模式。
delay_ms(2);
WriteCmd(0x0c);  //开显示,无游标,不反白.
delay_ms(2); 
WriteCmd(0x01);  //清除显示,并将 DDRAM 的地址计数器 AC 设为 00H.
delay_ms(2);
WriteCmd(0x06);  //设置,外部读写数据后,地址记数器 AC 会自动加 1。
delay_ms(2);
GPIO_SetBits(DisIO,PSB);  //令PSB=1,设置为并行数据模式。
delay_ms(2);
WriteCmd(0x80);  //将 DDRAM 地址计数器 AC 设为 0.
delay_ms(2);
}

void DisStr(u8 *s)    //显示字符串的函数。
{
while(*s != '\0')
{
WriteData(*s);
s++;
delay_ms(2);
}
}
Good?good?study,day?day?up.?立志成为牛人。
回复 支持 反对

使用道具 举报

15

主题

58

帖子

0

精华

初级会员

Rank: 2

积分
138
金钱
138
注册时间
2012-3-3
在线时间
0 小时
 楼主| 发表于 2012-3-13 09:47:00 | 显示全部楼层
#include "stm32f10x.h"

void IOInitOut();           //把所有端口初始化为输出模式的函数。
void IOInitIn();           //把数据引脚初始化为浮空输入的函数。
void WaitBusy();        //等待12864的忙状态结束的函数。
void WriteCmd(u8 cmd);    //写命令函数。
void WriteData(u8 data);  //写数据函数。
void InitDis();            //初始化 12864 和要用到的 STM 32 的引脚。
void DisStr(u8 *s);    //显示字符串的函数。

上面的是.c源文件,这个事.h头文件。
Good?good?study,day?day?up.?立志成为牛人。
回复 支持 反对

使用道具 举报

15

主题

58

帖子

0

精华

初级会员

Rank: 2

积分
138
金钱
138
注册时间
2012-3-3
在线时间
0 小时
 楼主| 发表于 2012-3-13 09:47:43 | 显示全部楼层
其中用到了,正点原子 老师 的systick延时函数,非常好用的函数。我什么时候才能写出这样的函数啊。
Good?good?study,day?day?up.?立志成为牛人。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-3-13 10:08:13 | 显示全部楼层
回复【3楼】fanyi:
---------------------------------
直接上传整个工程.这样贴一部分代码,很难看的.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

15

主题

58

帖子

0

精华

初级会员

Rank: 2

积分
138
金钱
138
注册时间
2012-3-3
在线时间
0 小时
 楼主| 发表于 2012-3-13 10:29:32 | 显示全部楼层
回复【6楼】正点原子:
---------------------------------
我找到错误了。原子老师。

前面的警告应该是说,我的函数声明void IOInitOut();  中没有用形参,但是,我的函数本来就不用形参的。这个警告应该可以不管吧。

后面一个错误,已经解决了,是 因为,我在所有函数外面对变量进行了赋值,例如: GPIOInitOut.GPIO_Mode = GPIO_Mode_Out_PP; 

你看我说的对吗?

还有,我的那个警告有什么办法消除。

另外,为什么 Keil 不能在函数外部对全局变量赋值啊?

谢谢 原子老师,刚才回帖这么迅速。
Good?good?study,day?day?up.?立志成为牛人。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-3-13 10:56:42 | 显示全部楼层
回复【7楼】fanyi:
---------------------------------
消除警告就得按提示操作.
你提供形参.比如void.
可以在函数外对全局变量赋值,但是只有一次有效.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

15

主题

58

帖子

0

精华

初级会员

Rank: 2

积分
138
金钱
138
注册时间
2012-3-3
在线时间
0 小时
 楼主| 发表于 2012-3-13 17:00:33 | 显示全部楼层
回复【8楼】正点原子:
---------------------------------
原子老师:我又试了一下。貌似,在函数外对全局变量赋值不行啊。其它情况,我不清楚。我遇到的情况是:
#include "stm32f10x.h" 
#include "delay.h"

GPIO_InitTypeDef  G;
G.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1;
G.GPIO_Mode = GPIO_Mode_Out_PP;
G.GPIO_Speed = GPIO_Speed_50MHz;  

int main(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);




GPIO_Init(GPIOC,&G);
delay_init(8);

 
  while (1)
  {
      GPIO_SetBits(GPIOC,GPIO_Pin_0|GPIO_Pin_1);
delay_ms(4000);
GPIO_ResetBits(GPIOC,GPIO_Pin_0|GPIO_Pin_1);
delay_ms(4000);
  }
}

编译时,要对

GPIO_InitTypeDef  G;
G.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1;
G.GPIO_Mode = GPIO_Mode_Out_PP;
G.GPIO_Speed = GPIO_Speed_50MHz; 
 
这三行报错如下:

User\main.c(5): error:  #77-D: this declaration has no storage class or type specifier
User\main.c:   G.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1;
User\main.c:   ^
User\main.c(5): error:  #147: declaration is incompatible with "GPIO_InitTypeDef G" (declared at line 4)
User\main.c:   G.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1;
User\main.c:   ^
User\main.c(5): error:  #65: expected a ";"
User\main.c:   G.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1;
User\main.c:    ^

每一行都对应这样的三个错误。一共8个错误。

如果把那 3 行放到主函数里面,就一个错误,警告,都没有了。

不知怎么回事??????????
 
Good?good?study,day?day?up.?立志成为牛人。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-3-13 17:28:07 | 显示全部楼层
你还是放到主函数里面去吧。
这样感觉你在函数外面写代码似的。。。。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

15

主题

58

帖子

0

精华

初级会员

Rank: 2

积分
138
金钱
138
注册时间
2012-3-3
在线时间
0 小时
 楼主| 发表于 2012-3-13 17:52:32 | 显示全部楼层
回复【10楼】正点原子:
---------------------------------
我也是这么想的。谢谢 正点原子 老师。
Good?good?study,day?day?up.?立志成为牛人。
回复 支持 反对

使用道具 举报

13

主题

104

帖子

0

精华

初级会员

Rank: 2

积分
179
金钱
179
注册时间
2011-8-2
在线时间
0 小时
发表于 2012-3-13 20:38:35 | 显示全部楼层
回复【10楼】正点原子:
---------------------------------
Build target 'TFT_LCD'
compiling app.c...
.\User_\spi\spi.h(82): error:  #130: expected a "{"
.\User_\spi\spi.h:   void SPI1_Init(void);       
.\User_\spi\spi.h:   ^
D:\Program Files\KeilARM412\ARM\RV31\INC\math.h(125): error:  #118: a void function may not return a value
D:\Program Files\KeilARM412\ARM\RV31\INC\math.h:       return ((__FLT(__x) >> 23) & 0xff) != 0xff;
D:\Program Files\KeilARM412\ARM\RV31\INC\math.h:              ^
D:\Program Files\KeilARM412\ARM\RV31\INC\math.h(125): error:  #20: identifier "__x" is undefined
D:\Program Files\KeilARM412\ARM\RV31\INC\math.h:       return ((__FLT(__x) >> 23) & 0xff) != 0xff;
D:\Program Files\KeilARM412\ARM\RV31\INC\math.h:                ^
D:\Program Files\KeilARM412\ARM\RV31\INC\math.h: APP\app.c: 0 warnings, 3 errors
compiling BSP.c...
.\User_\spi\spi.h(82): error:  #130: expected a "{"
.\User_\spi\spi.h:   void SPI1_Init(void);       
.\User_\spi\spi.h:   ^
D:\Program Files\KeilARM412\ARM\RV31\INC\math.h(125): error:  #118: a void function may not return a value
D:\Program Files\KeilARM412\ARM\RV31\INC\math.h:       return ((__FLT(__x) >> 23) & 0xff) != 0xff;
D:\Program Files\KeilARM412\ARM\RV31\INC\math.h:              ^
D:\Program Files\KeilARM412\ARM\RV31\INC\math.h(125): error:  #20: identifier "__x" is undefined
D:\Program Files\KeilARM412\ARM\RV31\INC\math.h:       return ((__FLT(__x) >> 23) & 0xff) != 0xff;
D:\Program Files\KeilARM412\ARM\RV31\INC\math.h:                ^
BSP\BSP.c(56): warning:  #223-D: function "SPI_Configuration" declared implicitly
BSP\BSP.c:      SPI_Configuration();
BSP\BSP.c:      ^
BSP\BSP.c(57): warning:  #223-D: function "TP_Init" declared implicitly
BSP\BSP.c:      TP_Init();
BSP\BSP.c:      ^
BSP\BSP.c: BSP\BSP.c: 2 warnings, 3 errors
compiling GPIO.c...
.\User_\spi\spi.h(82): error:  #130: expected a "{"
.\User_\spi\spi.h:   void SPI1_Init(void);       
.\User_\spi\spi.h:   ^
D:\Program Files\KeilARM412\ARM\RV31\INC\math.h(125): error:  #118: a void function may not return a value
D:\Program Files\KeilARM412\ARM\RV31\INC\math.h:       return ((__FLT(__x) >> 23) & 0xff) != 0xff;
D:\Program Files\KeilARM412\ARM\RV31\INC\math.h:              ^
D:\Program Files\KeilARM412\ARM\RV31\INC\math.h(125): error:  #20: identifier "__x" is undefined
D:\Program Files\KeilARM412\ARM\RV31\INC\math.h:       return ((__FLT(__x) >> 23) & 0xff) != 0xff;
D:\Program Files\KeilARM412\ARM\RV31\INC\math.h:                ^
D:\Program Files\KeilARM412\ARM\RV31\INC\math.h: BSP\GPIO.c: 0 warnings, 3 errors
compiling NVIC.c...
.\User_\spi\spi.h(82): error:  #130: expected a "{"
.\User_\spi\spi.h:   void SPI1_Init(void);       
.\User_\spi\spi.h:   ^
D:\Program Files\KeilARM412\ARM\RV31\INC\math.h(125): error:  #118: a void function may not return a value
D:\Program Files\KeilARM412\ARM\RV31\INC\math.h:       return ((__FLT(__x) >> 23) & 0xff) != 0xff;
D:\Program Files\KeilARM412\ARM\RV31\INC\math.h:              ^
D:\Program Files\KeilARM412\ARM\RV31\INC\math.h(125): error:  #20: identifier "__x" is undefined
D:\Program Files\KeilARM412\ARM\RV31\INC\math.h:       return ((__FLT(__x) >> 23) & 0xff) != 0xff;
D:\Program Files\KeilARM412\ARM\RV31\INC\math.h:                ^
D:\Program Files\KeilARM412\ARM\RV31\INC\math.h: BSP\NVIC.c: 0 warnings, 3 errors
compiling Beep.c...
回复 支持 反对

使用道具 举报

13

主题

104

帖子

0

精华

初级会员

Rank: 2

积分
179
金钱
179
注册时间
2011-8-2
在线时间
0 小时
发表于 2012-3-13 20:39:30 | 显示全部楼层
回复【10楼】正点原子:
---------------------------------回复【12楼】提刀上马:
回复【10楼】正点原子: --------------------------------- Build target 'TFT_LCD' compiling app.c... .\User_\spi\spi.h(82): error:  #130: expected a "{" .\User_\spi\spi.h:   void SPI1_Init(void);        .\User_\spi\spi.h:   ^ D:\Program Files\KeilARM412\ARM\RV31\INC\math.h(125): error:  #118: a void function may not return a value D:\Program Files\KeilARM412\ARM\RV31\INC\math.h:       return ((__FLT(__x) >> 23) & 0xff) != 0xff; D:\Program Files\KeilARM412\ARM\RV31\INC\math.h:              ^ D:\Pr
......
---------------------------------
原子哥这是什么情况啊,,突然就这样了,,我也不知道哪儿错了
回复 支持 反对

使用道具 举报

15

主题

58

帖子

0

精华

初级会员

Rank: 2

积分
138
金钱
138
注册时间
2012-3-3
在线时间
0 小时
 楼主| 发表于 2012-3-13 22:58:01 | 显示全部楼层
回复【9楼】fanyi:
---------------------------------
原子老师,关于全局变量赋值的情况,我晚上又看了一下。搞清楚了。

是在外部,可以初始化,但是,不能赋值。即:

int i=0; 这样可以。

但是, int i;    i=0;  这样就不可以了。

感谢,原子老师的指导啊。

这几天,忙着,用 STM 32 驱动 12864。忙啊。

我先回 寝室了。
Good?good?study,day?day?up.?立志成为牛人。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-3-13 23:04:03 | 显示全部楼层
呵呵,不客气.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

1

主题

9

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2011-7-10
在线时间
1 小时
发表于 2012-3-21 15:51:33 | 显示全部楼层
回复【7楼】fanyi:

---------------------------------
呵呵,最近我也出现啦,第一个警告,解决方法是在.h文件里声明的时候加了一个void,即void IOInitOut(void);不知道你试试行吗。。。。
回复 支持 反对

使用道具 举报

51

主题

203

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
428
金钱
428
注册时间
2012-10-25
在线时间
0 小时
发表于 2012-11-15 08:25:06 | 显示全部楼层
我也遇到了这个问题,括号里加个void就行。
程序员是未来的魔法师!
回复 支持 反对

使用道具 举报

0

主题

20

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2014-7-22
在线时间
0 小时
发表于 2015-11-25 23:46:29 | 显示全部楼层
函数申明的问题不够规范。
回复 支持 反对

使用道具 举报

宋相荣 该用户已被删除
发表于 2017-4-1 16:27:15 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-8-22 12:27

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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