1410|5

48

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

【雅特力AT32F435ZMT-STB 开发板评测】-SPI接口评测 [复制链接]

 

【雅特力AT32F435ZMT-STB 开发板评测】-SPI接口评测

 

 

  • 测试项目

雅特力AT32F435ZMT-STB V1.0 SPI接口

  • 测试环境

开发板:雅特力AT32F435ZMT-STB V1.0

开发环境:RT-Thread studio V2.2.6

RT-Thread版本:5.0.0

SPI外设资源:SCK--PA5,SDA—PA7,MSIO—PA6

测试对象:中景园1.8吋TFT LCD,驱动IC:ST7735

  • 雅特力AT32F435ZMT SPI简介

雅特力AT32F435ZMT片内集成多达4个SPI接口,在从或主模式下,全双工和半双工的通信速率可达36兆位/秒。3位的预分频器可产生8种主模式频率,可配置成每帧8位或16位。硬件的CRC产生/校验支持基本的SD卡、MMC、和SDHC模式。所有的SPI接口都可以使用DMA操作。SPI接口可配置为TI模式工作,用于主模式和从模式的通信。 内部结构如图1所示。

图1 SPI结构框图

主要特性:

  • 可编程配置的全双工或半双工通信:

― 全双工同步通信( 可以选择全双工只收以此释放用于发送的IO) ;

― 半双工同步通信( 可以根据软件编程配置选择传输方向:发送或接收) 。

  • 可编程配置主/从模式。
  • 可编程配置的CS 信号处理方式:

― 硬件处理CS;

― 软件处理CS。

  • 可编程配置的8 位或16 位帧位数。
  • 可编程配置的通信频率以及分频系数(最大分频系数为fPCLK/2) 。
  • 可编程配置的时钟极性和相位。
  • 可编程配置的数据传输顺序(先发MSB/LSB)。
  • 可编程配置的错误中断标志(CS脉冲异常,接收器溢出错误,主模式错误,CRC校验错误) 。
  • 可编程配置的发送数据缓冲器空中断以及接收数据缓冲器满中断。
  • 支持DMA 发送和接收。
  • 支持硬件CRC 发送和校验。
  • 具备通信忙标志。
  • 兼容TI 协议。
  • 测试软件环境搭建
  1. 新建工程

见文章雅特力AT-START-F435开发板试用】1-构建RTT-Stdio开发环境 - 国产芯片交流 - 电子工程世界-论坛 (eeworld.com.cn)

  1. 配置SPI

在左侧项目资源管理器中打开新建的项目,按图2双击RT-Tread Setting设置项,按图3完成相关项设置。

图2 驱动设置

图3 设置SPI1配置项

  1. 添加LCD驱动程序,修改SPI引脚号

直接采用中景园提供LCD驱动程序,将bsp_display.c、bsp_display.h、oledfont.h、zk.c四个文件添加到工程中,打开bsp_display.h,修改SPI引脚号如下:

#define LCD_RST_PIN  GET_PIN(C, 0)  //PC0

#define LCD_DC_PIN   GET_PIN(C, 1)  //PC1

#define LCD_BLK_PIN  GET_PIN(C, 2)  //PC2

#define LCD_SCL_PIN  GET_PIN(A, 5)  //PA5

#define LCD_SDI_PIN  GET_PIN(A, 7)  //PA7

#define LCD_CS_PIN   GET_PIN(A, 4)  //PA4

#define LCD_MISO_PIN GET_PIN(A, 6)  //定义MISO引脚为PA6

#define ZK_CS_PIN     GET_PIN(A, 9)  //定义字库片选CS引脚为PA9

注:这款LCD带汉字库芯片。

添加头文件:

#include <DRV_GPIO.h>

#include <pin.h>

打开main.c文件,添加以下三个头文件:

#include "drv_gpio.h"

#include "bsp_display.h"

#include <drv_spi.h>

#include <spi.h>

  1. 添加路径

图4 设置新增头文件路径

按照图4步骤分别添加bsp_display.h、drv_spi.h所在目录路径:

“..\AT32F435\rt-thread\components\drivers\include\drivers”

“..\AT32F435\rt-thread\components\drivers\spi”

“..\AT32F435\bsp”

  1. 修改程序

LCD显示程序,增加以下代码段,打开bsp_display.c,在前面添加:

#define SPI1_BUS_NAME         "spi1"

#define SPI1__DEVICE_NAME     "spi10"

#define SPI1_NCS_PIN 29

#define BACK_COLOR WHITE

 

static void LCD_WR_Byte(uint8_t dat, uint8_t mode);

 

struct n32_hw_spi_cs

{

    uint32_t GPIO_Pin;

};

 

struct rt_spi_device *st7735_spi_dev;

int rt_hw_spi_config(void);

在程序最后添加:

 

int rt_hw_spi_config(void)

{

    static struct n32_hw_spi_cs  spi_cs1;

    static struct rt_spi_device spi_dev_lcd ;

    rt_err_t res;

    spi_cs1.GPIO_Pin = GET_PIN(A,4);

    rt_pin_mode(LCD_CS_PIN, PIN_MODE_OUTPUT);

    res = rt_spi_bus_attach_device(&spi_dev_lcd, SPI1__DEVICE_NAME, SPI1_BUS_NAME, (void*)&spi_cs1);

    if (res != RT_EOK)

    {

        rt_kprintf("rt_spi_bus_attach_device!\r\n");

        return res;

    }

    spi_dev_lcd.bus->owner = &spi_dev_lcd;

    {

        struct rt_spi_configuration cfg;

        rt_kprintf("rt_spi OK!\r\n");

        cfg.data_width = 8;

        cfg.mode =   RT_SPI_MODE_3 | RT_SPI_MSB ;

        cfg.max_hz = 40*1000 *1000; /* 40M,SPI max 42MHz, 3-wire spi */

        if(spi_dev_lcd.bus->owner==RT_NULL)

        {

            rt_kprintf("RT_OK\r\n");

        }

        rt_kprintf("owner= %d\r\n",*spi_dev_lcd.bus->owner);

        res = rt_spi_configure(&spi_dev_lcd, &(cfg));

        if(res != RT_EOK)

        {

            rt_kprintf("configure spi1 ERR!\r\n");

        }



    }

    st7735_spi_dev = (struct rt_spi_device *)rt_device_find(SPI1__DEVICE_NAME);

        if(!&st7735_spi_dev)

        {

            rt_kprintf("spi1 test run failed! can't find %s device!\n", SPI1__DEVICE_NAME);

        }

    return RT_EOK;

}



INIT_DEVICE_EXPORT(rt_hw_spi_config);



打开main.c,在int main中添加如下程序段:

    LCD_Clear(WHITE);

    Display_Asc_String(1,1,4," ", WHITE); //光标定位

    Display_GB2312_String(30,10,2,"欢迎参与",RED);

    Display_GB2312_String(15,30,3,"雅特力",BLUE);

    Display_Asc_String(10,60,5,"EEWORLD",BLUE);

    Display_Asc_String(10,90,4,"AT32F435ZMT",BRED);

    Display_GB2312_String(30,120,2,"评测活动",RED);

 

至此修改工作全部结束,编译下载运行。

  • 运行及结果

系统运行结果如图5:

图5 系统运行界面

 

  • 总结

由以上例子我们可以看出,SPI总线运行正常,数据传送正确。在《雅特力AT32F435ZMT-STB 开发板》上利用Rt-thread进行二次开发很方便,用户上手较容易。

 

最新回复

从硬件到软件,分享了SPI驱动LCD,非常优秀的作品!  详情 回复 发表于 2023-7-4 08:59
点赞 关注
 
 

回复
举报

6822

帖子

0

TA的资源

五彩晶圆(高级)

沙发
 

SPI总线测试只要数据传送正确,即可

楼主的RT-Thread studio V2.2.6是那里下载的

 

 
 
 

回复

7244

帖子

2

TA的资源

版主

板凳
 

这个SPI最快能达到多少的速率?

 
 
 

回复

48

帖子

0

TA的资源

一粒金砂(中级)

4
 

RT-Thread studio V2.2.6直接更新问哦最新版本

 
 
 

回复

7671

帖子

2

TA的资源

五彩晶圆(高级)

5
 

谢谢分享,期待后续

个人签名

默认摸鱼,再摸鱼。2022、9、28

 
 
 

回复

7042

帖子

11

TA的资源

版主

6
 
从硬件到软件,分享了SPI驱动LCD,非常优秀的作品!
 
 
 

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

随便看看
查找数据手册?

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
快速回复 返回顶部 返回列表