OpenEdv-开源电子网

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

LCD使用了2个GPIO的引脚后DATAOUT和DATAIN应该如何设置呢?

[复制链接]

3

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
80
金钱
80
注册时间
2022-6-29
在线时间
33 小时
发表于 2023-9-23 12:02:29 | 显示全部楼层 |阅读模式
10金钱

STM32F107连接了ILI9341、OV7670、DP83848后,LCD数据线不能独享GPIOB端口,所以还使用了GPIOD的引脚
STM32F107和ILI9341的data线连接如下
STM32F107PB0PB1PB2PB3PB4PB5PB6PB7PB8PB9PB10PD11PD12PD15PB14PB15
ILI9341D0D1D2D3D4D5D6D7D8D9D10D11D12D13D14D15

所以,lcd.h中定义DATAIN和DATAOUT应该如下:
#define DATAOUT(x) {GPIOB->ODR|=x&0xC7FF;GPIOD->ODR|=x&0x9800;}
#define DATAIN     (GPIOB->IDR&0xC7FF)|(GPIOD->IDR&0x1800)|((GPIOD->IDR&0x8000)>>2);

而LCD_RD_DATA应该如下
u16 LCD_RD_DATA(void)
{
    u16 t;
    GPIOB->CRL=0X88888888;
    GPIOB->CRH=0X88000888;
    GPIOB->ODR&=0X3800;     
    GPIOD->CRL=0X00000000;
    GPIOD->CRH=0X80088000;
    GPIOD->ODR&=0X67FF;     
       
    LCD_RS_SET;
    LCD_CS_CLR;
    LCD_RD_CLR;

    opt_delay(2);
    t=DATAIN;

    LCD_RD_SET;
    LCD_CS_SET;

    GPIOB->CRL=0X33333333;
    GPIOB->CRH=0X33000333;
    GPIOB->ODR&=0XC7FF;
    GPIOD->CRL=0X00000000;
    GPIOD->CRH=0X30033000;
    GPIOD->ODR&=0X9800;               
    return t;
}


请问对不对?

最佳答案

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

建议先用标准库来写,然后在需要考虑效率的时候再用寄存器。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

10

主题

3281

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8205
金钱
8205
注册时间
2020-5-11
在线时间
3700 小时
发表于 2023-9-23 12:02:30 | 显示全部楼层
建议先用标准库来写,然后在需要考虑效率的时候再用寄存器。
专治疑难杂症
回复

使用道具 举报

3

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
80
金钱
80
注册时间
2022-6-29
在线时间
33 小时
 楼主| 发表于 2023-9-24 04:50:38 | 显示全部楼层
PB11、PB12、PB13这3个引脚的设置应为BBB,而不是333,即单个的1011
CNFy[1:0]=10,即复用推挽
MODEy[1:0]=11,即输出50MHz
PB11、PB12、PB13在LWIP中初始化的时候即输出复用推挽
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-23 23:33

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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