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

2019-08-23 14:35发布

Userdisplay12864.h(3): warning:  #1295-D: Deprecated declaration IOInitOut - give arg types
Userdisplay12864.c(23): error:  #147: declaration is incompatible with "GPIO_InitTypeDef GPIOInitOut" 

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

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

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

唉。技术员累啊。









友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
17条回答
正点原子
1楼-- · 2019-08-23 16:35
 精彩回答 2  元偷偷看……
fanyi
2楼-- · 2019-08-23 18:09
好像不是啊。原子 老师。我把源程序贴上,你 有时间的话,帮我看看。谢谢了。

#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 != '')
{
WriteData(*s);
s++;
delay_ms(2);
}
}
fanyi
3楼-- · 2019-08-23 20:28
#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头文件。
fanyi
4楼-- · 2019-08-23 22:17
其中用到了,正点原子 老师 的systick延时函数,非常好用的函数。我什么时候才能写出这样的函数啊。
正点原子
5楼-- · 2019-08-24 04:01
回复【3楼】fanyi:
---------------------------------
直接上传整个工程.这样贴一部分代码,很难看的.
fanyi
6楼-- · 2019-08-24 06:47
 精彩回答 2  元偷偷看……

一周热门 更多>