4059|5

73

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

[N32L43X评测]5.SPI驱动LCD 1.3 ST7789 [复制链接]

 

最近工作有些忙,耽误了评测进度

申请板子的时候就主要想测试一下N32的SPI性能,主频108MHz的M4内核对我有非常大的吸引力

用来刷LCD再好不过了

不过有些遗憾的是SPI模块用的是APB2的总线,只有主频的一半,而SPI模块还要从APB2总线中分频最少1半,

也就是主频的1/4,所以最快的速度只有27MHz。而我还要用USB模块,主频要用96MHz,即SPI的最高频率只有24MHz了,好遗憾啊。

目前接触到SPI刷屏比较爽的方案就是ESP32,SPI能到80MHz,刷240x240的屏很顺滑。

 

下面是驱动,详细的直接下载附件即可

void SPIConfig(void){
    SPI_InitType SPI_InitStructure;

    GPIO_InitType GPIO_InitStructure;
	
	RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_SPI1, ENABLE);


    GPIO_InitStructure.Pin = SPI_LCD_SCK_PIN;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_InitStructure.GPIO_Alternate = GPIO_AF1_SPI1;
    GPIO_InitStructure.GPIO_Current = GPIO_DC_4mA;
    GPIO_InitStructure.GPIO_Pull = GPIO_No_Pull;
    GPIO_InitPeripheral(SPI_LCD_SCK_PORT, &GPIO_InitStructure);

    GPIO_InitStructure.Pin = SPI_LCD_MOSI_PIN;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_InitStructure.GPIO_Alternate = GPIO_AF0_SPI1;
    GPIO_InitStructure.GPIO_Current = GPIO_DC_4mA;
    GPIO_InitStructure.GPIO_Pull = GPIO_No_Pull;
    GPIO_InitPeripheral(SPI_LCD_MOSI_PORT, &GPIO_InitStructure);

    SPI_InitStructure.DataDirection = SPI_DIR_SINGLELINE_TX;
    SPI_InitStructure.SpiMode = SPI_MODE_MASTER;
    SPI_InitStructure.DataLen = SPI_DATA_SIZE_8BITS;
#if 0
    SPI_InitStructure.CLKPOL = SPI_CLKPOL_LOW;
    SPI_InitStructure.CLKPHA = SPI_CLKPHA_FIRST_EDGE;
	SPI_InitStructure.CLKPHA = SPI_CLKPHA_SECOND_EDGE;
#else
    SPI_InitStructure.CLKPOL = SPI_CLKPOL_HIGH;
    SPI_InitStructure.CLKPHA = SPI_CLKPHA_SECOND_EDGE;
#endif
    SPI_InitStructure.NSS = SPI_NSS_SOFT;
    SPI_InitStructure.BaudRatePres = SPI_BR_PRESCALER_2; // 48/4 = 12MHz
    SPI_InitStructure.FirstBit = SPI_FB_MSB;
    SPI_InitStructure.CRCPoly = 7;

    SPI_Init(SPI_LCD, &SPI_InitStructure);
    SPI_Enable(SPI_LCD, ENABLE);	
}
#if LCDTYPE == 0
void LCD_Writ_Bus(uint8_t dat) {
    // uint8_t shiftdat = 0;
    // shiftdat = shift_byte(dat);
    LCD_CS_CLR;
    // LCD_WR_SET;
    DATAOUT(dat);
    LCD_WR_CLR;
    // delay_us(5);
    LCD_WR_SET;
    LCD_CS_SET;
    LCD_DC_SET;
}
#elif LCDTYPE == 1
void LCD_Writ_Bus(uint8_t dat) {
    uint16_t retry = 0;
    /* Wait for SPIy Tx buffer empty */
    while (SPI_I2S_GetStatus(SPI_LCD, SPI_I2S_TE_FLAG) == RESET)
        ;
    /* Send SPIz data */
    SPI_I2S_TransmitData(SPI_LCD, dat);
}

#endif

 

这里就可以将之前的Shell功能用上了,上电后屏幕渐变色刷屏,键入setLcd 0后,可以停止定时刷新任务,

键入setLcd 1启动任务。

还可以键入clearLcd x 刷新想要的颜色,这些咱们之前已经讲过如何使用了。

   

对于经常编写界面的人来说,有了Shell功能,方便很多,调整字体大小,颜色,位置,就不用一遍一遍的编译,烧录,调整,再编译再烧录了。

虽然现在出现好多gui,都有设计器,不过内存占用还是有些多了,对于低分辨率的屏幕有点杀鸡用牛刀的感觉。

最近找了个uGUI,这个项目非常小巧,架构也不错,一共就2个文件,如果朋友们感兴趣,下一期咱们搞来试试

对了,例程中还有个好东西和大家分享,Vscode大家应该不陌生,EIDE就是Vscode的一个插件,可以导入MDK的工程,用Vscode写程序可太舒服了,

EIDE的功能也强大,可以脱离MDK直接编写编译程序了,而且主要是编译器可以用MDK的,这样可以避免好多不必要的麻烦。有机会这一部分也会拿出来单独做一期评测的

 

5.SPI驱动LCD ST7789.rar

20.52 MB, 下载次数: 27

最新回复

好的,,,,期待呀。。。   详情 回复 发表于 2022-7-18 20:50
点赞 关注
 
 

回复
举报

7048

帖子

11

TA的资源

版主

沙发
 
字库做得怎么样,可不可以借鉴一下。。。嘿嘿!

点评

看我的,看我的,分享GBK中文全字库,中英文混合显示哦  详情 回复 发表于 2022-7-18 09:01
可以用两个数组弄一个自有字库,基本一个项目百十个自就够了  详情 回复 发表于 2022-7-17 23:46
 
 
 

回复

6534

帖子

9

TA的资源

版主

板凳
 
lugl4313820 发表于 2022-7-17 21:03 字库做得怎么样,可不可以借鉴一下。。。嘿嘿!

可以用两个数组弄一个自有字库,基本一个项目百十个自就够了

 
 
 

回复

6534

帖子

9

TA的资源

版主

4
 

要想刷新快,还是得并口接口

 
 
 

回复

208

帖子

0

TA的资源

纯净的硅(初级)

5
 
lugl4313820 发表于 2022-7-17 21:03 字库做得怎么样,可不可以借鉴一下。。。嘿嘿!

看我的,看我的,分享GBK中文全字库,中英文混合显示哦

点评

好的,,,,期待呀。。。  详情 回复 发表于 2022-7-18 20:50
个人签名We are a team and we work as a team !
 
 
 

回复

7048

帖子

11

TA的资源

版主

6
 
xld0932 发表于 2022-7-18 09:01 看我的,看我的,分享GBK中文全字库,中英文混合显示哦

好的,,,,期待呀。。。

 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表