STM32控制控制液晶读数据(难以理解的IO寄存器设置问题)

[复制链接]
 楼主| 499734424 发表于 2012-5-1 11:41 | 显示全部楼层 |阅读模式
用正点原子的STM32开发板(这个不是重点)调节TFT液晶,程序语句要是修改为一下带色彩的几句语句,液晶就可以显示。直接用库函数液晶就无法显示,个人感觉特别奇怪,不知是什么原因,望高手解答~
  1. uint16_t LCD_ReadReg(u8 LCD_Reg)
  2. {                                                                                  
  3.     uint16_t readdata;
  4.     LCD_WR_REG(LCD_Reg);   //写入要读的寄存器号  

  5.     GPIO_InitTypeDef GPIO_InitStructure;
  6.     GPIO_InitStructure.GPIO_Pin = LCD_GPIO_DATA_PIN;
  7.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU ;    // 上拉输入
  8.     //GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  9.     GPIO_Init(LCD_GPIO_DATA_PORT, &GPIO_InitStructure);
  10.    
  11.     Write_Data(0x0000);
  12.     Set_Rs;
  13.     Clr_Cs;
  14.     //读取数据(读寄存器时,并不需要读2次)
  15.     Clr_nRd;                                          
  16.     Set_nRd;
  17.    
  18.     readdata = GPIO_ReadInputData(GPIOB);   //这句有问题         

  19.     //assert_param(IS_GPIO_ALL_PERIPH(GPIOB));
  20.     //readdata = ((uint16_t)GPIOB->IDR);              //这句可以
  21.    
  22.     //readdata = GPIOB->IDR;   //数据输入             //这句可以
  23.    
  24.     Set_Cs;   

  25.     GPIO_InitStructure.GPIO_Pin = LCD_GPIO_DATA_PIN;
  26.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  //推挽输出
  27.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  28.     GPIO_Init(LCD_GPIO_DATA_PORT, &GPIO_InitStructure);
  29.     Write_Data(0xffff);
  30.     return readdata;  
  31. }
 楼主| 499734424 发表于 2012-5-1 11:46 | 显示全部楼层
貌似代码不可以转换颜色
再重复一遍:

使用库函数:
readdata = GPIO_ReadInputData(GPIOB);   //这句有问题
液晶不 正常工作(不显示)

使用如下语句
//assert_param(IS_GPIO_ALL_PERIPH(GPIOB));
//readdata = ((uint16_t)GPIOB->IDR);              //这句可以
液晶工作正常

使用如下语句   
//readdata = GPIOB->IDR;   //数据输入             //这句可以
液晶也工作正常。

因为我都是用库函数学习STM32的,如果按照上面修改,就达不到用库的目的。
joing1999 发表于 2012-5-2 16:55 | 显示全部楼层
LZ上传完整程序吧
IJK 发表于 2012-5-2 17:21 | 显示全部楼层
建议结合 示波器来检查问题。
 楼主| 499734424 发表于 2012-5-2 20:02 | 显示全部楼层
3# joing1999
上传整个程序,真的谁有时间去一行一行的验证哦
:)
而且程序就是 ALIENTEK MINISTM32 实验10 TFTLCD显示实验(库)
找到函数 u16 LCD_ReadReg(u8 LCD_Reg)
就可以看到。

注:为了看程序时更加形象我将t修改为readdata其他没有改动,(程序本就是原子的成果,我自己修改的就不上传了,直接看原子的程序即可)而且程序也说了,调用库是有问题的。如图 截图00.jpg


ALIENTEK MINISTM32 实验10 TFTLCD显示实验(库).rar (328.81 KB, 下载次数: 23)
 楼主| 499734424 发表于 2012-7-14 17:03 | 显示全部楼层
问题解决
今天无聊又调节了一下此语句发现优化等价选择中级、高级都能够使用
主要还是需要IAR配置优化(common subexpression elimination),否则显示有问题
amwrdfe 发表于 2012-7-14 19:07 | 显示全部楼层
不会直接调用iar的库吧。建议从官方下载一个下来用。
貌似iar的优化开到最大是有问题的。把某些循环都省略掉了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:开始学习中~

5

主题

434

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部