STM32/STM8技术william hill官网
直播中

狂热

12年用户 13经验值
私信 关注
[问答]

STM32 ILL9325 ID读不出来

我直接用IO口时序驱动,但是9325的ID一直读不出来,是不是读写函数有问题?希望有人能指导一下,谢谢
#include "share.h"
/**********************************************************************
函数:ILI9325_Write_Reg()
函数作用:向ILI9325寄存器写入16bit数据
参数:
        uint16_t reg_addr-----------------------------------寄存器地址
        uint16_t reg_value--------------------------------------16bit数据
返回值:无
上一版本:无
当前版本:1.0
作者:anobodykey
最后修改时间:2015-07-27
说明: ILI9325地址和数据都是使用PB口通信,因此PB口是
             复用的,需先写寄存器地址再写入数据
**********************************************************************/  
void ILI9325_Write_Reg(uint16_t reg_addr, uint16_t reg_value)  
{  
    ILI9325_nCS_Set_Low;//拉低片选,使其有效  
    ILI9325_RS_Set_Low;//拉低RS信号,选择index寄存器  
    ILI9325_nWR_Set_Low;//拉低写使能,使其有效  
    GPIO_Write(GPIOD, reg_addr); //写寄存器地址
    ILI9325_nWR_Set_High;  
    ILI9325_RS_Set_High;//拉高RS信号,选择control寄存器  
    ILI9325_nWR_Set_Low;  
    GPIO_Write(GPIOD, reg_value);
    ILI9325_nWR_Set_High;  
    ILI9325_nCS_Set_High;  
}  

/**********************************************************************
函数:ILI9325_Read_Reg()
函数作用:从ILI9325寄存器读取16bit数据
参数:
        uint16_t reg_addr-----------------------------------寄存器地址
返回值:16bit数据
上一版本:无
当前版本:1.0
作者:anobodykey
最后修改时间:2015-07-27
说明: PB口工作在推挽输出模式,读取寄存器数据时需
        设置成上拉输入模式才可读取
**********************************************************************/  
uint16_t ILI9325_Read_Reg(uint16_t reg_addr)  
{  
    GPIO_InitTypeDef  GPIO_InitStruct;  
    uint16_t reg_value = 0;  
    ILI9325_nCS_Set_Low;//拉低片选,使其有效  
    ILI9325_RS_Set_Low;//拉低RS信号,选择index寄存器  
    ILI9325_nWR_Set_Low;//拉低写使能,使其有效  
    GPIO_Write(GPIOD,reg_addr );//写寄存器地址
        printf("reg_addr=%Xrn",GPIO_ReadOutputData(GPIOD));  
    ILI9325_nWR_Set_High;  
    ILI9325_RS_Set_High;//拉高RS信号,选择control寄存器  
    //将PD口设置为输入口读取寄存器数据  
    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_All;  
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOAtiNG;  
    GPIO_Init(GPIOD, &GPIO_InitStruct);  

    ILI9325_nRD_Set_Low;  
    reg_value = GPIO_ReadInputData(GPIOD);
        printf("reg_value=%Xrn",reg_value);  
    ILI9325_nRD_Set_High;
//        HAL_Delay(40);  
    ILI9325_nCS_Set_High;  

    //将PD口恢复成推挽输出模式
        GPIO_InitStruct.GPIO_Pin = GPIO_Pin_All;  
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;  
    GPIO_Init(GPIOD, &GPIO_InitStruct);     
    return reg_value;  
}

/**********************************************************************
函数:HAL_ILI9325_MspInit()
函数作用:初始化与ILI9325 连接的io口资源
参数:无
返回值:无
上一版本:无
当前版本:1.0
作者:anobodykey
最后修改时间:2015-07-27
说明: MCU与ILI9325连接的io口均作为推挽输出口
**********************************************************************/  
void HAL_ILI9325_MspInit(void)  
{  
    GPIO_InitTypeDef GPIO_InitStructure;
    RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB |
                            RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD |
                            RCC_APB2Periph_GPIOE, ENABLE);

    /****配置LED所在外设的脚为输出****/
    GPIO_InitStructure.GPIO_Pin=GPIO_Pin_11| GPIO_Pin_12| GPIO_Pin_13;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  //I/O口的方向
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //I/O口的最高输出速度
    GPIO_Init(GPIOA, &GPIO_InitStructure);            //初始化外设PD的4、5、6、7端口

        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_All;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  //I/O口的方向
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //I/O口的最高输出速度
    GPIO_Init(GPIOD, &GPIO_InitStructure);            //初始化外设PD的4、5、6、7端口

        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8 | GPIO_Pin_9;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  //I/O口的方向
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //I/O口的最高输出速度
    GPIO_Init(GPIOC, &GPIO_InitStructure);            //初始化外设PD的4、5、6、7端口

}

/**********************************************************************
函数:ILI9325_Init()
函数作用:ILI9325初始化
参数:无
返回值:无
上一版本:无
当前版本:1.0
作者:anobodykey
最后修改时间:2015-07-27
说明:  
**********************************************************************/  
void ILI9325_Init(void)  
{  
    HAL_ILI9325_MspInit();  

    ILI9325_nRST_Set_High;  
    HAL_Delay(50);  
    ILI9325_nRST_Set_Low;//复位ILI9325低电平有效  
    HAL_Delay(100);  
    ILI9325_nRST_Set_High;  

    //总线处于空闲状态  
    ILI9325_nCS_Set_High;  
    ILI9325_RS_Set_High;  
    ILI9325_nRD_Set_High;  
    ILI9325_nWR_Set_High;  
    HAL_Delay(50);  
}  



已退回5积分

回帖(1)

telnet

2015-12-6 21:40:58
这个有很多原因,我当初读不出来就是和时钟太快有关,你看看你设置的时钟是不是大于芯片规定的范围了。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分