STM32F10x并行驱动lcd12864遇到的问题及其解决方案

程序

  1. 代码的移植时参见CSDN中的常见代码,网上几乎都一致。改动较小,常见为该管脚,因此需要注意。
  2. 改变管脚时要注意stm32中A、B管脚中有一部分管脚与烧录有关(例如B04),因此常要在启动前加入代码(一般建议不要用这几号管脚),我选择避开这些管脚。使用B08-B15
  3. 当发现无法显示时,使用硬件仿真发现程序死在检测忙时状态(即检查DB7),网上摘录的程序是并行数据口DB0-DB7使用的是推挽输出,但因为使用并行方式,需要读取也需要写入,因此最合适的应该是开漏输出(具体介绍自查)。
  4. 在字体能成功输出,但是字体却与输入的字体对不上时,先别怀疑自己,这已经离成功非常接近了。可以通过硬件仿真跟踪每一步的过程,看输入的字符是否转换的字码是否正确,运行到显示输出时,观察屏幕输出的字码是否与你输入的一样(这时你可能会问为什么直接运行时不一样,但是仿真时却是一样呢?),这时,你就要关注时序表了(我是对比两个不同的程序码发现),我的LCD_Write_Cmd与LCD_Write_Dat没有在适当的位置延时
    ,查资料可得每条指令发送的时间不能少于73微秒。我怀疑时32发送得太快,而lcd没反应过来。事实证明加入延时delay_ms(2)后字体显示正常

硬件

  1. 以前一般很少关注硬件问题,但这次让我栽了大跟头
  2. http://www.elecfans.com/xianshi/20180411660204.html在上面有一张接线图以及接线的提示
  3. 注意单片机时3.3V(但是我给它接入5V似乎并没有问题),在输出高电平时也是3V以上,低电平也符合。(至于好像说32有一些特殊引脚才能输出5V,但是这次没有用到我就先不说了)就是说单片机输出的电平是与屏幕是对应的,不会出现我自认为输出高电平而屏幕识别为低电平的情况(这一点就当写给自己看吧,我不知道3.3V单片机驱动5V的屏幕会不会出现高低电平不匹配而导致错误的问题,当然,用电表在硬件仿真时对应命令一步一步测就好了,真想有个逻辑分析仪)
  4. 在用电表和硬件仿真一步一步debug在这里插入代码片的时候,我发现了一个很奇怪的事,就是同一条导线两端单片机引脚与lcd引脚的电平一个是0一个是1,我一度怀疑是自己的引脚配置问题。最后竟然发现是导线断了!!!!!(是那种外表看不出来,然而就是这么神奇的事情),买导线质量一定要过关!!!!

如果上面的话有错漏的话请批评指正
代码如下
侵删

#ifndef __lcd_H__
#define __lcd_H__

#include "SysTick.h"

#define			RS			PAout(0)	
#define			RW			PAout(1)
#define			EN			PAout(2)

#define			RS_Pin		GPIO_Pin_0
#define			RW_Pin		GPIO_Pin_1
#define			EN_Pin		GPIO_Pin_2

typedef enum
{
   
	Command,
	Data
}WR_Mode;

#define			LINE1		0x80
#define			LINE2 		0x90
#define			LINE3 		0x88
#define			LINE4 		0x98
void LCD_Wait_Ready(void);
void LCD_Write_Cmd(uint8_t cmd);
void LCD_Write_Dat(uint8_t dat);
void LCD_Init(void);<

你可能感兴趣的:(stm32F10x,lcd12864)