我直接用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_FLOA
tiNG;
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);
}