野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 10893|回复: 4

求助 stm32f407模拟8080时序出错

[复制链接]
发表于 2019-5-2 16:07:04 | 显示全部楼层 |阅读模式
代码如下

__inline void ILI9806G_Write_Cmd ( uint16_t usCmd )
{
ILI9806G_CS_CLR;//开始片选      
ILI9806G_DC_CLR;//写命令
ILI9806G_RD_SET;//禁止读
DATAOUT(usCmd);//输出命令
ILI9806G_WR_CLR;//写入开始
ILI9806G_WR_SET;//写入结束
ILI9806G_CS_SET;//结束片选         
}

/**
  * @brief  向ILI9806G写入数据
  * @param  usData :要写入的数据
  * @retval 无
  */
__inline void ILI9806G_Write_Data ( uint16_t usData )
{
ILI9806G_CS_CLR;//开始片选      
ILI9806G_DC_SET;//写数据
ILI9806G_RD_SET;//禁止读
DATAOUT(usData);//输出数据
ILI9806G_WR_CLR;//写入开始
ILI9806G_WR_SET;//写入结束
ILI9806G_CS_SET;//结束片选
}

/**
  * @brief  从ILI9806G读取数据
  * @param  无
  * @retval 读取到的数据
  */
__inline uint16_t ILI9806G_Read_Data ( void )
{
uint16_t data;
ILI9806G_DATA_PORT->MODER=     0x00000000;//通用输入模式
//ILI9341_DATA_PORT->OTYPER=    0x0000;    //推挽输出
ILI9806G_DATA_PORT->OSPEEDR=   0xFFFF;    //速度50MHz
ILI9806G_DATA_PORT->PUPDR=     0x55555555;//上拉
ILI9806G_DATA_PORT->ODR=       0X0000;    //全部输出0

ILI9806G_DC_SET;
ILI9806G_WR_SET;
ILI9806G_CS_CLR;
//读取数据
ILI9806G_RD_CLR;   
   
data=DATAIN;  
ILI9806G_RD_SET;
ILI9806G_CS_SET;

ILI9806G_DATA_PORT->MODER=     0x55555555;//通用输入模式
ILI9806G_DATA_PORT->OTYPER=    0x0000;    //推挽输出
ILI9806G_DATA_PORT->OSPEEDR=   0xFFFF;    //速度50MHz
ILI9806G_DATA_PORT->PUPDR=     0x55555555;//上拉
ILI9806G_DATA_PORT->ODR=       0XFFFF;    //全部输出0
return data;
}

/**
  * @brief  用于 ILI9806G 简单延时函数
  * @param  nCount :延时计数值
  * @retval 无
  */
static void ILI9806G_Delay ( __IO uint32_t nCount )
{
  for ( ; nCount != 0; nCount -- );

}

/**
  * @brief  初始化ILI9806G的IO引脚
  * @param  无
  * @retval 无
  */
static void ILI9806G_GPIO_Config ( void )
{
GPIO_InitTypeDef GPIO_InitStructure;
/* 使能FSMC对应相应管脚时钟*/
RCC_AHB1PeriphClockCmd (  
             /*控制信号*/
             ILI9806G_CS_CLK|ILI9806G_DC_CLK|ILI9806G_WR_CLK|
             ILI9806G_RD_CLK |ILI9806G_BK_CLK|
             /*数据信号*/
             ILI9806G_DATA_CLK , ENABLE );
  

    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Pin = ILI9806G_DATA_PIN;
  GPIO_Init ( ILI9806G_DATA_PORT, &GPIO_InitStructure );

  GPIO_InitStructure.GPIO_Pin = ILI9806G_RD_PIN;
  GPIO_Init (ILI9806G_RD_PORT, & GPIO_InitStructure );
  
  GPIO_InitStructure.GPIO_Pin = ILI9806G_WR_PIN;
  GPIO_Init (ILI9806G_WR_PORT, & GPIO_InitStructure );
  
  GPIO_InitStructure.GPIO_Pin = ILI9806G_CS_PIN;
  GPIO_Init ( ILI9806G_CS_PORT, & GPIO_InitStructure );  
  
  GPIO_InitStructure.GPIO_Pin = ILI9806G_DC_PIN;
  GPIO_Init ( ILI9806G_DC_PORT, & GPIO_InitStructure );
   
  
/* 配置LCD背光控制管脚BK*/
  GPIO_InitStructure.GPIO_Pin = ILI9806G_BK_PIN;
  GPIO_Init ( ILI9806G_BK_PORT, &GPIO_InitStructure );
}

**
* @brief  ILI9806G初始化函数,如果要用到lcd,一定要调用这个函数
* @param  无
* @retval 无
*/
void ILI9806G_Init ( void )
{
ILI9806G_GPIO_Config ();
ILI9806G_REG_Config ();

//设置默认扫描方向,其中 6 模式为大部分液晶例程的默认显示方向  
ILI9806G_GramScan(LCD_SCAN_MODE);
   
ILI9806G_Clear(0,0,LCD_X_LENGTH,LCD_Y_LENGTH); /* 清屏,显示全黑 */
ILI9806G_BackLed_Control ( ENABLE );      //点亮LCD背光灯
}

/**
* @brief  ILI9806G背光LED控制
* @param  enumState :决定是否使能背光LED
  *   该参数为以下值之一:
  *     @arg ENABLE :使能背光LED
  *     @arg DISABLE :禁用背光LED
* @retval 无
*/
void ILI9806G_BackLed_Control ( FunctionalState enumState )
{
if ( enumState )
  GPIO_ResetBits ( ILI9806G_BK_PORT, ILI9806G_BK_PIN );
else
  GPIO_SetBits ( ILI9806G_BK_PORT, ILI9806G_BK_PIN );
  
}


/******************************* ILI9806G 显示屏8080通讯引脚定义 ***************************/
/******控制信号线******/
//片选
#define      ILI9806G_CS_CLK                RCC_AHB1Periph_GPIOC   
#define      ILI9806G_CS_PORT               GPIOC
#define      ILI9806G_CS_PIN                GPIO_Pin_4
//DC引脚
#define      ILI9806G_DC_CLK                RCC_AHB1Periph_GPIOC  
#define      ILI9806G_DC_PORT               GPIOC
#define      ILI9806G_DC_PIN                GPIO_Pin_7
//写使能
#define      ILI9806G_WR_CLK                RCC_AHB1Periph_GPIOC   
#define      ILI9806G_WR_PORT               GPIOC
#define      ILI9806G_WR_PIN                GPIO_Pin_6
//读使能
#define      ILI9806G_RD_CLK                RCC_AHB1Periph_GPIOC   
#define      ILI9806G_RD_PORT               GPIOC
#define      ILI9806G_RD_PIN                GPIO_Pin_5
//背光引脚
#define      ILI9806G_BK_CLK                RCC_AHB1Periph_GPIOD   
#define      ILI9806G_BK_PORT               GPIOD
#define      ILI9806G_BK_PIN                GPIO_Pin_2

/********数据信号线***************/
#define      ILI9806G_DATA_CLK                RCC_AHB1Periph_GPIOE
#define      ILI9806G_DATA_PORT               GPIOE
#define      ILI9806G_DATA_PIN                GPIO_Pin_All
/********信号线控制相关的宏***************/
#define ILI9806G_CS_SET   GPIO_SetBits(ILI9806G_CS_PORT,ILI9806G_CS_PIN)    //片选端口   
#define ILI9806G_DC_SET  GPIO_SetBits(ILI9806G_DC_PORT,ILI9806G_DC_PIN)    //数据/命令   
#define ILI9806G_WR_SET  GPIO_SetBits(ILI9806G_WR_PORT,ILI9806G_WR_PIN)    //写数据   
#define ILI9806G_RD_SET  GPIO_SetBits(ILI9806G_RD_PORT,ILI9806G_RD_PIN)    //读数据   
            
#define ILI9806G_CS_CLR   GPIO_ResetBits(ILI9806G_CS_PORT,ILI9806G_CS_PIN)     //片选端口   
#define ILI9806G_DC_CLR  GPIO_ResetBits(ILI9806G_DC_PORT,ILI9806G_DC_PIN)     //数据/命令      
#define ILI9806G_WR_CLR  GPIO_ResetBits(ILI9806G_WR_PORT,ILI9806G_WR_PIN)     //写数据   
#define ILI9806G_RD_CLR  GPIO_ResetBits(ILI9806G_RD_PORT,ILI9806G_RD_PIN)     //读数据  
//数据线输入输出
#define DATAOUT(x)  ILI9806G_DATA_PORT->ODR=x; //数据输出
#define DATAIN      ILI9806G_DATA_PORT->IDR;   //数据输入
/*************************************** 调试预用 ******************************************/
#define      DEBUG_DELAY()               ILI9806G_Delay(0x5000)
/***************************** ILI934 显示区域的起始坐标和总行列数 ***************************/
#define      ILI9806G_DispWindow_X_Star      0     //起始点的X坐标
#define      ILI9806G_DispWindow_Y_Star      0     //起始点的Y坐标
#define    ILI9806G_LESS_PIXEL     480   //液晶屏较短方向的像素宽度
#define    ILI9806G_MORE_PIXEL    854   //液晶屏较长方向的像素宽度


回复

使用道具 举报

发表于 2019-5-2 18:59:30 | 显示全部楼层
是参考mini例程里模仿8080的?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-5-2 20:27:37 | 显示全部楼层
WishWish 发表于 2019-5-2 18:59
是参考mini例程里模仿8080的?

嗯嗯,是这样的的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-5-2 20:29:21 | 显示全部楼层
现在就是白屏闪一下
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-5-2 20:35:01 | 显示全部楼层
主要是用的是f407vegt
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-9-21 02:37 , Processed in 0.028264 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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