OpenEdv-开源电子网

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

求助!!!

[复制链接]

27

主题

147

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
275
金钱
275
注册时间
2012-8-11
在线时间
0 小时
发表于 2012-8-15 16:11:02 | 显示全部楼层 |阅读模式

以下代码是根据不完全手册,现修改为只是读出LCD 的 Id

#include "hand.c"
#define RD1 GPIOC->BSRR=1<<6 //读数据
#define RD0 GPIOC->BRR=1<<6
#define WR1 GPIOC->BSRR=1<<7 //写数据
#define WR0 GPIOC->BRR=1<<7
#define RS1 GPIOC->BSRR=1<<8   //数据|命令
#define RS0 GPIOC->BRR=1<<8 
#define CS1 GPIOC->BSRR=1<<9   //片选端口
#define CS0 GPIOC->BRR=1<<9 
#define BACK_LIGHT1  GPIOC->BSRR=1<<10   //背光开启
#define BACK_LIGHT0  GPIOC->BRR=1<<10
#define DATAOUT(data) GPIOB->ODR=data       //输出数据
#define WRITE_DATA(data)  { RS1;CS0;DATAOUT(data);WR0;WR1;CS1;} // 写数据

 
//=============================================
void delay(u16 time);              //延时函数 
void init( void );             //初始化
void WRITE_CMD(u8 cmd);             //写命令
void WRITE_CD(u8 cmd,u16 data);  //写数据和命令

 

int main(void)

    Stm32_Clock_Init(9);
    init();
   

void init()
{
  //--------端口初始化-----------------------------
 RCC->APB2ENR|=1<<3;//先使能外设PORTB时钟
 RCC->APB2ENR|=1<<4;//先使能外设PORTC时钟
 GPIOC->CRH&=0XFFFFF000;  //PORTC6~10复用推挽输出
 GPIOC->CRH|=0X00000333;
 GPIOC->CRL&=0X00FFFFFF;
 GPIOC->CRL|=0X33000000;
 GPIOC->ODR|=0X07C0;     //PORTB 推挽输出
 GPIOB->CRH=0X33333333;
 GPIOB->CRL=0X33333333;
 GPIOB->ODR=0XFFFF;
  //------------------------------------------------------
  BACK_LIGHT1;  //开启背光

  
 
}

void WRITE_CMD(u8 cmd)  //写命令
{
   RS0;
   //RD1;      根据80时序,RD应该为高,光盘程序中没有
   CS0;
   DATAOUT(cmd);
   WR0;
   WR1;
   CS1;
}

void WRITE_CD(u8 cmd , u16 data) //写命令和数据
{
   WRITE_CMD(cmd);
   WRITE_DATA(data);
}



void delay(u16 time)  //延时函数
{
 u16 i,j;
 for(i=0;i<time;i++)
    for(j=0;j<10290;j++)
      ;

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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-8-15 17:17:24 | 显示全部楼层
你的代码直接跳过了读ID的过程,只能慢慢测了.
如果能读ID,先可以读一下ID,是不是4535.
这样可以排除很大一部分问题.比如RS/RD/CS/WR等信号是否正常?D0~D15是否正常?通过读ID,基本可以排除硬件问题.剩下就好解决了.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

27

主题

147

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
275
金钱
275
注册时间
2012-8-11
在线时间
0 小时
 楼主| 发表于 2012-8-15 19:56:38 | 显示全部楼层
哦,好注意,谢谢了
回复 支持 反对

使用道具 举报

27

主题

147

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
275
金钱
275
注册时间
2012-8-11
在线时间
0 小时
 楼主| 发表于 2012-8-16 14:22:20 | 显示全部楼层
在给的源代码的基础上修改的 READ_ID();  串口输出一直是 0 ,这是什么原因啊,真心搞不定了。。。
u16 READ_ID(u8 cmd)
{
    u16 t;
WRITE_CMD(cmd);  //写入要读的寄存器号  
GPIOB->CRL=0X88888888; //PB0-7  上拉输入
GPIOB->CRH=0X88888888; //PB8-15 上拉输入
GPIOB->ODR=0XFFFF;    //全部输出高

RS1;
CS0;
//读取数据(读寄存器时,并不需要读2次)
RD0;
delay(10);//FOR 8989,延时5us    
RD1;
t=DATAIN;
delay(10);  
CS1;
delay(10); 

GPIOB->CRL=0X33333333; //PB0-7  上拉输出
GPIOB->CRH=0X33333333; //PB8-15 上拉输出
GPIOB->ODR=0XFFFF;    //全部输出高
return t;
}
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-8-16 15:16:37 | 显示全部楼层
回复【4楼】Alexinx:
---------------------------------
读ID为0,那就没戏了.慢慢调试吧...
实在不行就用杜邦线一个个连接吧...看看是硬件还是软件问题.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

27

主题

147

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
275
金钱
275
注册时间
2012-8-11
在线时间
0 小时
 楼主| 发表于 2012-8-16 17:03:19 | 显示全部楼层
RCC->APB2ENR|=1<<0;    //开启辅助时钟
JTAG_Set(0X01);  //开启SWD

我的程序就是应为没有加这两句,这两句为什么会影响端口状态??
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-8-16 17:43:19 | 显示全部楼层
会.
因为有几个IO默认是被JTAG占了的.必须先关闭jtag
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-21 05:42

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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