OpenEdv-开源电子网

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

有关TFT函数DATAOUT(x)不同数据端口的问题?

[复制链接]

3

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
132
金钱
132
注册时间
2018-8-25
在线时间
33 小时
发表于 2018-8-30 12:20:45 | 显示全部楼层 |阅读模式
5金钱
硬件引脚链接如下:[mw_shl_code=c,true]GPIOA.5 --> D00
GPIOA.6 --> D01
GPIOA.7 --> D02
GPIOB.0 --> D03
GPIOB.1 --> D04
GPIOE.7 --> D05
GPIOE.8 --> D06
GPIOE.9 --> D07
GPIOE.10 --> D08
GPIOE.11 --> D09
GPIOE.12 --> D10
GPIOE.13 --> D11
GPIOE.14 --> D12
GPIOE.15 --> D13
GPIOB.10 --> D14
GPIOB.11 --> D15[/mw_shl_code]

问题?调用DATAOUT_one()可以正常显示,调用DATAOUT_two()却不能正常显示?

[mw_shl_code=c,true]void DATAOUT_one(u16 cmd_data)
{
    /* 以下代码液晶屏可以正常显示 */
    GPIO_WriteBit(GPIOA, LCD_PIN_DL_00, (cmd_data >> 0x00) & 0x01);    /* 取低8位中的低3位 */
    GPIO_WriteBit(GPIOA, LCD_PIN_DL_01, (cmd_data >> 0x01) & 0x01);
    GPIO_WriteBit(GPIOA, LCD_PIN_DL_02, (cmd_data >> 0x02) & 0x01);
    GPIO_WriteBit(GPIOB, LCD_PIN_DL_03, (cmd_data >> 0x03) & 0x01);    /* 取低8位中的中2位 */
    GPIO_WriteBit(GPIOB, LCD_PIN_DL_04, (cmd_data >> 0x04) & 0x01);
    GPIO_WriteBit(GPIOE, LCD_PIN_DL_05, (cmd_data >> 0x05) & 0x01);    /* 取低8位中的高3位 */
    GPIO_WriteBit(GPIOE, LCD_PIN_DL_06, (cmd_data >> 0x06) & 0x01);
    GPIO_WriteBit(GPIOE, LCD_PIN_DL_07, (cmd_data >> 0x07) & 0x01);
    GPIO_WriteBit(GPIOE, LCD_PIN_DL_08, (cmd_data >> 0x08) & 0x01);    /* 取高8位中的低6位 */
    GPIO_WriteBit(GPIOE, LCD_PIN_DL_09, (cmd_data >> 0x09) & 0x01);
    GPIO_WriteBit(GPIOE, LCD_PIN_DL_10, (cmd_data >> 0x0A) & 0x01);
    GPIO_WriteBit(GPIOE, LCD_PIN_DL_11, (cmd_data >> 0x0B) & 0x01);
    GPIO_WriteBit(GPIOE, LCD_PIN_DL_12, (cmd_data >> 0x0C) & 0x01);
    GPIO_WriteBit(GPIOE, LCD_PIN_DL_13, (cmd_data >> 0x0D) & 0x01);
    GPIO_WriteBit(GPIOB, LCD_PIN_DL_14, (cmd_data >> 0x0E) & 0x01);    /* 取高8位中的高2位 */
    GPIO_WriteBit(GPIOB, LCD_PIN_DL_15, (cmd_data >> 0x0F) & 0x01);
}

void DATAOUT_two(u16 cmd_data)
{
    /* 以下代码却不能正常显示液晶屏,连屏幕都不亮,请问这是为何? */
    GPIOA->ODR = ((GPIOA->ODR & 0xFFF8) | (cmd_data & 0x0007));    /* 取低8位中的低3位 */
    GPIOB->ODR = ((GPIOB->ODR & 0xFFE7) | (cmd_data & 0x0018));    /* 取低8位中的中2位 */
    GPIOE->ODR = ((GPIOE->ODR & 0xFF1F) | (cmd_data & 0x00E0));    /* 取低8位中的高3位 */
    GPIOE->ODR = ((GPIOE->ODR & 0xC0FF) | (cmd_data & 0x3F00));    /* 取高8位中的低6位 */
    GPIOB->ODR = ((GPIOB->ODR & 0x3FFF) | (cmd_data & 0xC000));    /* 取高8位中的高2位 */
}[/mw_shl_code]

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

使用道具 举报

3

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
132
金钱
132
注册时间
2018-8-25
在线时间
33 小时
 楼主| 发表于 2018-8-30 13:47:01 | 显示全部楼层
本帖最后由 LevenC 于 2018-8-30 13:58 编辑

是否这样的硬件设计是不妥当的呢?

TFT D00-D15引脚接法

TFT D00-D15引脚接法
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2018-8-31 02:24:24 | 显示全部楼层
仿真找问题
回复

使用道具 举报

1

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2018-2-5
在线时间
11 小时
发表于 2018-8-31 08:39:09 来自手机 | 显示全部楼层
stm32 仿真很容易 对比差别
回复

使用道具 举报

8

主题

571

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2922
金钱
2922
注册时间
2016-5-13
在线时间
185 小时
发表于 2018-8-31 09:02:32 | 显示全部楼层
0x0007对应的是PA0,PA1,PA2不是PA5,PA6,PA7啊。应该是0x0070,别的(0018,00E0,3F00,C000)你也核对一下吧。
回复

使用道具 举报

3

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
132
金钱
132
注册时间
2018-8-25
在线时间
33 小时
 楼主| 发表于 2018-9-1 13:13:08 | 显示全部楼层
电脑小白 发表于 2018-8-31 09:02
0x0007对应的是PA0,PA1,PA2不是PA5,PA6,PA7啊。应该是0x0070,别的(0018,00E0,3F00,C000)你也核对一 ...

有趣的回复,这个回复让我察觉到我好像掉入了思维陷进
回复

使用道具 举报

8

主题

571

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2922
金钱
2922
注册时间
2016-5-13
在线时间
185 小时
发表于 2018-9-12 11:24:45 | 显示全部楼层
void DATAOUT_one(u16 cmd_data)和void DATAOUT_two(u16 cmd_data)这两个函数操作的不是相同的管脚啊。0x0007需要改成0x0070 ,0xFFF8要改成0xFF8F,你再看看是不是这个道理哦。别的(0018,00E0,3F00,C000)你也核对一下吧。
虽然不明白你们在说什么,但感觉很厉害的样子。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-9 07:47

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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