OpenEdv-开源电子网

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

战舰V3 改一般IO驱动4.3 TFTLCD 字符显示乱码 求助

[复制链接]

1

主题

11

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2021-6-10
在线时间
7 小时
发表于 2021-6-11 11:03:26 | 显示全部楼层 |阅读模式
3金钱
一.在原点板子上修改,将FSMC改为一般IO驱动
     1.1已经完成
(1)初始化,清屏,蓝色背景--OK。
(2) 一般打点,可以。--OK
(3)快速打点,可以,点坐标会错乱。--NG

(4)字符引用快速打点,打出来背景点,没有字符。--NG

    1.2IO对照表,已经检查验证,输出正常。
1.  LCD_CS   FSMC_NE4        PG12
2.  LCD_RS   FSMC_A10         PG0
3.  LCD_WR  FSMC_NWE       PD5
4.  LCD_RD    FSMC_NOE       PD4
5.  RESET  硬件
6.  LCD_D0DB1 FSMC_D0  PD14
7.  LCD_D1DB2 FSMC_D1  PD15
8.  LCD_D2DB3 FSMC_D2  PD0
9.  LCD_D3DB4 FSMC_D3  PD1
10.  LCD_D4DB5 FSMC_D4  PE7
11.  LCD_D5DB6 FSMC_D5  PE8
12.  LCD_D6DB7 FSMC_D6  PE9
13.  LCD_D7DB8 FSMC_D7  PE10
14.  LCD_D8DB10 FSMC_D8  PE11
15.  LCD_D9DB11 FSMC_D9  PE12
16.  LCD_D10DB12 FSMC_D10  PE13
17.  LCD_D11DB13 FSMC_D11  PE14
18.  LCD_D12DB14 FSMC_D12  PE15
19.  LCD_D13DB15 FSMC_D13  PD8
20. LCD_D14DB16   FSMC_D14 PD9
21. LCD_D15DB17   FSMC_D15 PD10
22.GND
23.LCD_BL                                       PB0
24.VCC 3.3V
25.VCC 3.3V
26.GND
27.GND
28.VCC
29.T_MISO                                      PB2      
30.T_MOSI                                      PF9
31.T_PEN                                        PF10
32.MO    _NG
33.T_CS                                          PF11

34.T_SCK                                       PB1                 

[size=18.6667px]//写寄存器函数
[size=18.6667px]//regval:寄存器值
[size=18.6667px]void LCD_WR_REG(u16 regval)
[size=18.6667px]{   
[size=18.6667px]  //LCD->LCD_REG=regval;//写入要写的寄存器序号           //结构体指针,指向FSMC基地址
[size=18.6667px]  LCD_CS   = 0;          //片选有效
[size=18.6667px]  LCD_RS   = 0;                //指令  
[size=18.6667px]        LCD_RD   = 1;                       //读 禁止
[size=18.6667px]        DATA_OUT(regval);       //写数据
[size=18.6667px]        LCD_WR   = 0;
[size=18.6667px] // delay_us(5);          
[size=18.6667px]        LCD_WR   = 1;                 //写数据
[size=18.6667px]        LCD_CS   = 1;          //片选结束        
[size=18.6667px]}
[size=18.6667px]
[size=18.6667px]//写LCD数据
[size=18.6667px]//data:要写入的值
[size=18.6667px]void LCD_WR_DATA(u16 data)
[size=18.6667px]{         
[size=18.6667px] //LCD->LCD_RAM=data;                               // -> 间接引用 运算符,#define LCD     ((LCD_TypeDef *) LCD_BASE)                                              // 指针指向结构体的成员 FSMC直接赋值给寄存器
[size=18.6667px]   LCD_CS   = 0;          //片选有效  
[size=18.6667px]   LCD_RS   = 1;                 //数据 控制信号    1数据  0命令
[size=18.6667px]   LCD_RD   = 1;                      //读 禁止
[size=18.6667px]         DATA_OUT(data);        //写数据
[size=18.6667px]         LCD_WR   = 0;        
[size=18.6667px]         //delay_us(5);   
[size=18.6667px]         LCD_WR   = 1;                 //写数据
[size=18.6667px]         LCD_CS   = 1;          //片选结束

[size=18.6667px]}
[size=18.6667px]
[size=18.6667px]//读LCD数据
[size=18.6667px]//返回值:读到的值
[size=18.6667px]u16 LCD_RD_DATA(void)
[size=18.6667px]{
[size=18.6667px]        vu16 ram;                        //防止被优化
[size=18.6667px]        //ram=LCD->LCD_RAM;       
[size=18.6667px]       
[size=18.6667px]        LCD_DB_IO_inputMode();      //IO输入模式
[size=18.6667px]        DATA_OUT(0x0000);
[size=18.6667px]        LCD_CS   = 0;               //片选有效  
[size=18.6667px]        LCD_RS   = 1;                 //数据 控制信号
[size=18.6667px]        LCD_WR   = 1;                 //写数据 禁止
[size=18.6667px]        LCD_RD   = 0;                        //读数据  允许  
[size=18.6667px]  DATA_OUT(0xffff);       //端口全部输出 1
[size=18.6667px]//        delay_us(5);   
[size=18.6667px]        ram =  DATA_IN();
[size=18.6667px]       
[size=18.6667px]        LCD_RD   = 1;                            //读数据  禁止
[size=18.6667px]        LCD_CS   = 1;               //片选失效  
[size=18.6667px]  
[size=18.6667px]//        delay_us(10);   
[size=18.6667px]        LCD_DB_IO_outputMode();
[size=18.6667px]        return ram;         

[size=18.6667px]}               

//写寄存器
//LCD_Reg:寄存器地址
//LCD_RegValue:要写入的数据
void LCD_WriteReg(u16 LCD_Reg,u16 LCD_RegValue)
{       
        //LCD->LCD_REG = LCD_Reg;                  //写入要写的寄存器序号         
        //LCD->LCD_RAM = LCD_RegValue;//写入数据                             
  LCD_WR_REG(LCD_Reg);
//        delay_us(10);
        LCD_WR_DATA(LCD_RegValue);
}         

//读寄存器
//LCD_Reg:寄存器地址
//返回值:读到的数据
u16 LCD_ReadReg(u16 LCD_Reg)
{                                                                                  
        LCD_WR_REG(LCD_Reg);                //写入要读的寄存器序号
//        delay_us(3);                  
        return LCD_RD_DATA();                //返回读到的值
}   
//开始写GRAM
void LCD_WriteRAM_Prepare(void)
{
        //LCD->LCD_REG=lcddev.wramcmd;          
        LCD_WR_REG(lcddev.wramcmd);
}         
//LCD写GRAM
//RGB_Code:颜色值
void LCD_WriteRAM(u16 RGB_Code)
{                                                            
//LCD->LCD_RAM = RGB_Code;//写十六位GRAM
        LCD_WR_DATA(RGB_Code);       
}

#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "lcd.h"
#include "usart.h"
//#include "font.h"  

/************************************************
ALIENTEK 战舰STM32F103开发板实验13
TFTLCD显示实验  
技术支持:www.openedv.com
淘宝店铺:http://eboard.taobao.com
关注微信公众平台微信号:"正点原子",免费获取STM32资料。
广州市星翼电子科技有限公司  
作者:正点原子 @ALIENTEK
************************************************/
       
int main(void)
{
  unsigned int LCD_DX[20];       
  unsigned char i=0,j=0;         
        u8 x=0;
        u8 lcd_id[12];                        //存放LCD ID字符串
        delay_init();                     //延时函数初始化          
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);         //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
        uart_init(115200);                 //串口初始化为115200
        LED_Init();                              //LED端口初始化
        LCD_Init();           //读有问题,写可以,刷屏地底色完成   
        //LCD_DB_IO_outputMode();
        POINT_COLOR=GREEN;
        sprintf((char*)lcd_id,"LCD ID:%04X",lcddev.id);//将LCD ID打印到lcd_id数组。
  // LCD_Draw_Circle(40,50,20);    //可以执行
  //LCD_ShowString(30,130,200,12,12,"TFTLCD TEST");       
        //LCD_DrawPoint(30,40);           //可以执行
        // LCD_Fast_DrawPoint(30,40,GREEN);   // 31 40; 32 40; 33 40;  34 40不成一线  回写的
        #if 0
   LCD_Fast_DrawPoint(0,40,RED);                  //划线对点坐标
         LCD_Fast_DrawPoint(1,40,RED);
         LCD_Fast_DrawPoint(2,40,RED);                  //跳了一段 打点
         LCD_Fast_DrawPoint(3,40,RED);
         LCD_Fast_DrawPoint(4,40,RED);
         LCD_Fast_DrawPoint(5,40,RED);
   LCD_Fast_DrawPoint(6,40,RED);
         LCD_Fast_DrawPoint(7,40,RED);
         LCD_Fast_DrawPoint(8,40,RED);
         LCD_Fast_DrawPoint(9,40,RED);
         LCD_Fast_DrawPoint(10,40,RED);
         LCD_Fast_DrawPoint(11,40,RED);
   LCD_Fast_DrawPoint(12,40,RED);
         LCD_Fast_DrawPoint(13,40,RED);
         LCD_Fast_DrawPoint(14,40,RED);
         LCD_Fast_DrawPoint(15,40,RED);
#endif         
               
         LCD_DrawLine(1, 20, 100, 20);                //划线 没问题
         
         LCD_ShowString(30,40,210,24,24,"WarShip STM32 ^_^");      //写字  异常   


while(1);         
}


实验13 TFTLCD显示实验V103ZE(修改IO驱动).zip

3.06 MB, 下载次数: 3

源包

最佳答案

查看完整内容[请看2#楼]

是的 50MHZ GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO速度 50MHz
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

11

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2021-6-10
在线时间
7 小时
 楼主| 发表于 2021-6-11 11:03:27 | 显示全部楼层
jermy_z 发表于 2021-7-2 10:34
引脚速度设置的是快速不?

是的  50MHZ
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  //IO速度 50MHz
回复

使用道具 举报

1

主题

11

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2021-6-10
在线时间
7 小时
 楼主| 发表于 2021-6-16 11:10:43 | 显示全部楼层
初始化通过
慢速打点是没啥问题
快速 打点时序乱了难道?焊线 单步跟踪
回复

使用道具 举报

1

主题

11

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2021-6-10
在线时间
7 小时
 楼主| 发表于 2021-6-16 11:11:16 | 显示全部楼层
才通过审核 沉底下去了  哎
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2021-6-17 00:07:16 | 显示全部楼层
你怎么接线的啊?
回复

使用道具 举报

1

主题

11

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2021-6-10
在线时间
7 小时
 楼主| 发表于 2021-6-17 08:57:37 | 显示全部楼层

原子哥看见了  好高兴  没另外接线  直接战舰V3上改的  不用FSMC功能   改用用IO口写 程序
回复

使用道具 举报

1

主题

11

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2021-6-10
在线时间
7 小时
 楼主| 发表于 2021-6-17 09:09:03 | 显示全部楼层

原子哥看见了呀 好高兴   直接用的战舰V3  板子 不用FSMC功能  改用一般IO口功能驱动   有个测试夹具要把12864改TFT屏  芯片没有FSMC功能
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2021-6-17 23:53:17 | 显示全部楼层
jiacheng559 发表于 2021-6-17 09:09
原子哥看见了呀 好高兴   直接用的战舰V3  板子 不用FSMC功能  改用一般IO口功能驱动   有个测试夹具要把 ...

你可以参考一下我们Mini板的代码,就是模拟总线驱动LCD的
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

1

主题

11

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2021-6-10
在线时间
7 小时
 楼主| 发表于 2021-6-18 06:32:55 | 显示全部楼层
正点原子 发表于 2021-6-17 23:53
你可以参考一下我们Mini板的代码,就是模拟总线驱动LCD的

谢谢 原子哥 百度下载好慢 有这个单独资料链接么
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2021-6-19 00:19:37 | 显示全部楼层
jiacheng559 发表于 2021-6-18 06:32
谢谢 原子哥 百度下载好慢 有这个单独资料链接么

可以问我们技术支持直接发给你
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

1

主题

11

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2021-6-10
在线时间
7 小时
 楼主| 发表于 2021-6-30 16:03:32 | 显示全部楼层
本帖最后由 jiacheng559 于 2021-6-30 16:05 编辑

还是没能解决  显示字符串 坐标重合 样机 战舰V3 程序 ——MINI板  IO驱动FTFLCD移植
初始化可以  刷屏底色可以  打点坐标串  字符串坐标重叠
TFT_LCD时序.png
IMG20210630154518.jpg

ALIENTEK TFT LCD液晶显示实验(mini IO修改战舰V3).rar

2.11 MB, 下载次数: 0

源程序

回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2021-7-1 01:11:07 | 显示全部楼层
jiacheng559 发表于 2021-6-30 16:03
还是没能解决  显示字符串 坐标重合 样机 战舰V3 程序 ——MINI板  IO驱动FTFLCD移植
初始化可以  刷屏底 ...

测试下打点函数,从0,0开始,打到10,10,这样子看下
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

1

主题

11

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2021-6-10
在线时间
7 小时
 楼主| 发表于 2021-7-1 09:26:38 | 显示全部楼层
正点原子 发表于 2021-7-1 01:11
测试下打点函数,从0,0开始,打到10,10,这样子看下

   LCD_Fast_DrawPoint(0,40,RED);                  //划线对点坐标
         LCD_Fast_DrawPoint(1,40,RED);
         LCD_Fast_DrawPoint(2,40,RED);                  //跳了一段 打点
第三个点坐标就不对了
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2021-7-2 01:47:36 | 显示全部楼层
jiacheng559 发表于 2021-7-1 09:26
LCD_Fast_DrawPoint(0,40,RED);                  //划线对点坐标
         LCD_Fast_DrawPoint(1,40 ...

那就肯定有问题啊,继续努力吧
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

70

主题

6763

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
13135
金钱
13135
注册时间
2012-11-26
在线时间
3814 小时
发表于 2021-7-2 10:34:31 | 显示全部楼层
jiacheng559 发表于 2021-7-1 09:26
LCD_Fast_DrawPoint(0,40,RED);                  //划线对点坐标
         LCD_Fast_DrawPoint(1,40 ...

引脚速度设置的是快速不?
学无止境
回复

使用道具 举报

1

主题

11

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2021-6-10
在线时间
7 小时
 楼主| 发表于 2021-7-13 16:36:45 | 显示全部楼层
战舰MINI一个端口的IO给DB就没问题  不同端口的IO去驱  写时序用逻辑分析仪看正常  端口电平也正常 ————初始化可以  画点 写字总偏一些 X Y坐标定位跟IO关系这么大?

//-----------------LCD端口定义----------------
#define        LCD_LED PEout(1)                                      //LCD 背光            PE1
#define        LCD_RST PEout(15)                                      //LCD 复位             PE15

#define        LCD_CS_SET  GPIOE->BSRR=1<<7   //片选端口                    PE7
#define        LCD_RS_SET        GPIOE->BSRR=1<<8    //数据/命令                 PE8           
#define        LCD_WR_SET        GPIOE->BSRR=1<<11    //写数据                          PE11
#define        LCD_RD_SET        GPIOE->BSRR=1<<13    //读数据                          PE13
                                                                    
#define        LCD_CS_CLR  GPIOE->BRR=1<<7     //片选端口                  PE7
#define        LCD_RS_CLR        GPIOE->BRR=1<<8     //数据/命令                PE8           
#define        LCD_WR_CLR        GPIOE->BRR=1<<11     //写数据                        PE11
#define        LCD_RD_CLR        GPIOE->BRR=1<<13    //读数据                        PE13         

//PB0~15,作为数据线
#define DATAOUT(x) GPIOB->ODR=x; //数据输出
#define DATAIN     GPIOB->IDR;   //数据输入     


实验13 TFTLCD显示实验V103V8.rar

2.37 MB, 下载次数: 0

STM32一般IO驱动TFTLCD

回复

使用道具 举报

1

主题

11

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2021-6-10
在线时间
7 小时
 楼主| 发表于 2021-7-23 15:22:26 | 显示全部楼层
原来例子是可以通过的 DB从不同端口也可以
#define DATAOUT(x)        \
{\
        D0_W =  (x>>0&0x0001);\
        D1_W =  (x>>1&0x0001);\

//优先级 &大于 >> 必须加括号D0_W = ((x>>0)&0x0001);
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-25 21:51

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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