OpenEdv-开源电子网

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

lcd实验发送读取id指令,返回值为0

[复制链接]

1

主题

6

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2020-11-7
在线时间
3 小时
发表于 2020-12-4 20:22:30 | 显示全部楼层 |阅读模式
5金钱
今天写lcd屏的实验,想用读id指令试验一下通讯是否正常。结果好家伙返回0,完全没数据。
这是lcd.c的程序led.h和主程序在评论区贴,求各位大佬帮忙看看

#include "lcd.h"

void FSMC_GPIO_Config(void)
{
        GPIO_InitTypeDef GPIO_InitStruct;
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB,ENABLE);
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD,ENABLE);
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE,ENABLE);
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF,ENABLE);
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOG,ENABLE);
       
       
       
        GPIO_InitStruct.GPIO_Pin=GPIO_Pin_15;
  GPIO_InitStruct.GPIO_Mode=GPIO_Mode_OUT;   
  GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;   
  GPIO_InitStruct.GPIO_OType=GPIO_OType_PP;  
  GPIO_InitStruct.GPIO_PuPd=GPIO_PuPd_DOWN;
        GPIO_Init(GPIOB,&GPIO_InitStruct);
       
        GPIO_InitStruct.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
  GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF;   
  GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;   
  GPIO_InitStruct.GPIO_OType=GPIO_OType_PP;  
  GPIO_InitStruct.GPIO_PuPd=GPIO_PuPd_NOPULL;
        GPIO_Init(GPIOD,&GPIO_InitStruct);
        GPIO_PinAFConfig(GPIOD, GPIO_PinSource0,GPIO_AF_FSMC);
        GPIO_PinAFConfig(GPIOD, GPIO_PinSource1,GPIO_AF_FSMC);
        GPIO_PinAFConfig(GPIOD, GPIO_PinSource4,GPIO_AF_FSMC);
        GPIO_PinAFConfig(GPIOD, GPIO_PinSource5,GPIO_AF_FSMC);
        GPIO_PinAFConfig(GPIOD, GPIO_PinSource8,GPIO_AF_FSMC);
        GPIO_PinAFConfig(GPIOD, GPIO_PinSource9,GPIO_AF_FSMC);
        GPIO_PinAFConfig(GPIOD, GPIO_PinSource10,GPIO_AF_FSMC);
        GPIO_PinAFConfig(GPIOD, GPIO_PinSource11,GPIO_AF_FSMC);
        GPIO_PinAFConfig(GPIOD, GPIO_PinSource12,GPIO_AF_FSMC);
        GPIO_PinAFConfig(GPIOD, GPIO_PinSource13,GPIO_AF_FSMC);
        GPIO_PinAFConfig(GPIOD, GPIO_PinSource14,GPIO_AF_FSMC);
        GPIO_PinAFConfig(GPIOD, GPIO_PinSource15,GPIO_AF_FSMC);
       
       
        GPIO_InitStruct.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
        GPIO_Init(GPIOE,&GPIO_InitStruct);
        GPIO_PinAFConfig(GPIOE, GPIO_PinSource0,GPIO_AF_FSMC);
        GPIO_PinAFConfig(GPIOE, GPIO_PinSource1,GPIO_AF_FSMC);
        GPIO_PinAFConfig(GPIOE, GPIO_PinSource7,GPIO_AF_FSMC);
        GPIO_PinAFConfig(GPIOE, GPIO_PinSource8,GPIO_AF_FSMC);
        GPIO_PinAFConfig(GPIOE, GPIO_PinSource9,GPIO_AF_FSMC);
        GPIO_PinAFConfig(GPIOE, GPIO_PinSource10,GPIO_AF_FSMC);
        GPIO_PinAFConfig(GPIOE, GPIO_PinSource11,GPIO_AF_FSMC);
        GPIO_PinAFConfig(GPIOE, GPIO_PinSource12,GPIO_AF_FSMC);
        GPIO_PinAFConfig(GPIOE, GPIO_PinSource13,GPIO_AF_FSMC);
        GPIO_PinAFConfig(GPIOE, GPIO_PinSource14,GPIO_AF_FSMC);
        GPIO_PinAFConfig(GPIOE, GPIO_PinSource15,GPIO_AF_FSMC);
       
       
        GPIO_InitStruct.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
        GPIO_Init(GPIOF,&GPIO_InitStruct);
        GPIO_PinAFConfig(GPIOF, GPIO_PinSource0,GPIO_AF_FSMC);
        GPIO_PinAFConfig(GPIOF, GPIO_PinSource1,GPIO_AF_FSMC);
        GPIO_PinAFConfig(GPIOF, GPIO_PinSource2,GPIO_AF_FSMC);
        GPIO_PinAFConfig(GPIOF, GPIO_PinSource3,GPIO_AF_FSMC);
        GPIO_PinAFConfig(GPIOF, GPIO_PinSource4,GPIO_AF_FSMC);
        GPIO_PinAFConfig(GPIOF, GPIO_PinSource5,GPIO_AF_FSMC);
        GPIO_PinAFConfig(GPIOF, GPIO_PinSource12,GPIO_AF_FSMC);
        GPIO_PinAFConfig(GPIOF, GPIO_PinSource13,GPIO_AF_FSMC);
        GPIO_PinAFConfig(GPIOF, GPIO_PinSource14,GPIO_AF_FSMC);
        GPIO_PinAFConfig(GPIOF, GPIO_PinSource15,GPIO_AF_FSMC);

       
        GPIO_InitStruct.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_10|GPIO_Pin_12;
        GPIO_Init(GPIOG,&GPIO_InitStruct);
        GPIO_PinAFConfig(GPIOG, GPIO_PinSource0,GPIO_AF_FSMC);
        GPIO_PinAFConfig(GPIOG, GPIO_PinSource1,GPIO_AF_FSMC);
        GPIO_PinAFConfig(GPIOG, GPIO_PinSource2,GPIO_AF_FSMC);
        GPIO_PinAFConfig(GPIOG, GPIO_PinSource3,GPIO_AF_FSMC);
        GPIO_PinAFConfig(GPIOF, GPIO_PinSource4,GPIO_AF_FSMC);
        GPIO_PinAFConfig(GPIOF, GPIO_PinSource5,GPIO_AF_FSMC);
        GPIO_PinAFConfig(GPIOF, GPIO_PinSource10,GPIO_AF_FSMC);
        GPIO_PinAFConfig(GPIOF, GPIO_PinSource12,GPIO_AF_FSMC);
}


void FSMC_Config(void)
{
        RCC_AHB3PeriphClockCmd(RCC_AHB3Periph_FSMC,ENABLE);
       
        FSMC_NORSRAMInitTypeDef FSMC_NORSRAMInitStruct;
        FSMC_NORSRAMTimingInitTypeDef FSMC_WRITETimingInitStruct;
        FSMC_NORSRAMTimingInitTypeDef FSMC_READTimingInitStruct;
       
        FSMC_WRITETimingInitStruct.FSMC_AddressSetupTime=11;      
  FSMC_WRITETimingInitStruct.FSMC_AddressHoldTime=0;        
  FSMC_WRITETimingInitStruct.FSMC_DataSetupTime=11;         
  FSMC_WRITETimingInitStruct.FSMC_BusTurnAroundDuration=0;
  FSMC_WRITETimingInitStruct.FSMC_CLKDivision=0;           
  FSMC_WRITETimingInitStruct.FSMC_DataLatency=0;            
  FSMC_WRITETimingInitStruct.FSMC_AccessMode=FSMC_AccessMode_B;   

  FSMC_READTimingInitStruct.FSMC_AddressSetupTime=77;      
  FSMC_READTimingInitStruct.FSMC_AddressHoldTime=0;        
  FSMC_READTimingInitStruct.FSMC_DataSetupTime=77;         
  FSMC_READTimingInitStruct.FSMC_BusTurnAroundDuration=0;
  FSMC_READTimingInitStruct.FSMC_CLKDivision=0;           
  FSMC_READTimingInitStruct.FSMC_DataLatency=0;            
  FSMC_READTimingInitStruct.FSMC_AccessMode=FSMC_AccessMode_B;
       

        FSMC_NORSRAMInitStruct.FSMC_Bank=FSMC_Bank1_NORSRAM4;               
  FSMC_NORSRAMInitStruct.FSMC_DataAddressMux=FSMC_DataAddressMux_Disable;      
  FSMC_NORSRAMInitStruct.FSMC_MemoryType=FSMC_MemoryType_NOR;         
  FSMC_NORSRAMInitStruct.FSMC_MemoryDataWidth=FSMC_MemoryDataWidth_16b;     
  FSMC_NORSRAMInitStruct.FSMC_BurstAccessMode=FSMC_BurstAccessMode_Disable;   
  FSMC_NORSRAMInitStruct.FSMC_AsynchronousWait=FSMC_AsynchronousWait_Disable;     
  FSMC_NORSRAMInitStruct.FSMC_WaitSignalPolarity=FSMC_WaitSignalPolarity_Low;  
  FSMC_NORSRAMInitStruct.FSMC_WrapMode=FSMC_WrapMode_Disable;           
  FSMC_NORSRAMInitStruct.FSMC_WaitSignalActive=FSMC_WaitSignalActive_BeforeWaitState ;   
  FSMC_NORSRAMInitStruct.FSMC_WriteOperation=FSMC_WriteOperation_Enable;      
  FSMC_NORSRAMInitStruct.FSMC_WaitSignal=FSMC_WaitSignal_Disable;         
  FSMC_NORSRAMInitStruct.FSMC_ExtendedMode=FSMC_ExtendedMode_Enable;      
  FSMC_NORSRAMInitStruct.FSMC_WriteBurst=FSMC_WriteBurst_Disable;         
  FSMC_NORSRAMInitStruct.FSMC_ReadWriteTimingStruct=&FSMC_READTimingInitStruct;
  FSMC_NORSRAMInitStruct.FSMC_WriteTimingStruct=&FSMC_WRITETimingInitStruct;
       
       
        FSMC_NORSRAMInit(&FSMC_NORSRAMInitStruct);
        FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM4,ENABLE);
}


void LCD_Write_Data(uint16_t data)
{
        uint16_t *p=(uint16_t *)(LCD_DATA_ADDR);
        *p=data;
}
void LCD_Write_Cmd(uint16_t data)
{
        uint16_t *p=(uint16_t *)(LCD_CMD_ADDR);
        *p=data;
}
uint16_t LCD_Read_Data(void)
{
        uint16_t *p=(uint16_t *)(LCD_DATA_ADDR);
        return *p;
}

uint32_t LCD_Read_ID(void)
{
        uint16_t id=0;
        LCD_Write_Cmd(0xd3);
        LCD_Read_Data();
        LCD_Read_Data();
        id=LCD_Read_Data();
        id<<=8;
        id|=LCD_Read_Data();
        return id;
}


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2020-11-7
在线时间
3 小时
 楼主| 发表于 2020-12-4 20:24:01 | 显示全部楼层
lcd.h头文件的程序

#ifndef __LCD_H
#define __LCD_H
#include "stm32f4xx.h"

#define LCD_DATA_ADDR ((uint32_t)0x6c000000|(1<<(6+1)))
#define LCD_CMD_ADDR ((uint32_t)0x6c000000&~(1<<(6+1)))
//#define TFTLCD  ((LCD_TypeDef *)LCD_BASE)
void FSMC_GPIO_Config(void);
void FSMC_Config(void);
void LCD_Write_Data(uint16_t data);
void LCD_Write_Cmd(uint16_t data);
uint16_t LCD_Read_Data(void);

uint32_t LCD_Read_ID(void);

#endif



-----------------------------main主程序---------------------------------------
#include "stm32f4xx.h"
#include "usart.h"
#include "delay.h"
#include "lcd.h"

int main(void)
{
        uart_init(115200);
        FSMC_GPIO_Config();
        GPIO_SetBits(GPIOB,GPIO_Pin_15);
        FSMC_Config();
        uint16_t id;
        id=LCD_Read_ID();
        printf("id=0x%x\r\n",id);
       


}
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2020-11-7
在线时间
3 小时
 楼主| 发表于 2020-12-4 20:29:44 | 显示全部楼层
我调试的过程中发现数据区域地址的数据没有被赋值,调试发现0x6c000000确实被写入了0xd3,但是0x6c000080并没有数据,也就是说应该出现的id并没有出现
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-23 12:01

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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