CN / EN
文档反馈
感谢关注汇顶文档,期待您的宝贵建议!
感谢您的反馈,祝您愉快!

APP DSPI驱动

该驱动仅适用于GR5526和GR5x25。

宏定义

APP_DSPI_PIN_ENABLE

表 254 APP_DSPI_PIN_ENABLE宏定义
描述

DSPI引脚使能

1

详细信息请参考文件:SDK_Folder\drivers\inc\app_dspi.h

APP_DSPI_PIN_DISABLE

表 255 APP_DSPI_PIN_DISABLE宏定义
描述

DSPI引脚不使能

0

详细信息请参考文件:SDK_Folder\drivers\inc\app_dspi.h

结构体

app_dspi_pin_t

结构体定义如下:

表 256 app_dspi_pin_t结构体成员
成员 描述 取值

app_io_type_t type

设置IO类型

app_io_evt_t中描述

app_io_mux_t mux

设置IO映射功能

参考app_io_init_t结构体,具体映射模式根据芯片Datasheet中的Pin Mux进行选择

uint32_t pin

设置IO引脚

参考app_io_init_t结构体,具体根据芯片Datasheet中DSPI资源进行选择

app_io_pull_t pull

设置IO上拉/下拉/浮空

该参数的取值可以是下列值中的任意一个:
  • APP_IO_NOPULL(浮空)
  • APP_IO_PULLUP(上拉)
  • APP_IO_PULLDOWN(下拉)

uin8_t enable

开启或关闭PIN

该参数的取值可以是下列值中的任意一个:
  • APP_DSPI_PIN_ENABLE(开启PIN)
  • APP_DSPI_PIN_DISABLE(关闭PIN)

详细信息请参考文件:SDK_Folder\drivers\inc\app_dspi.h

app_dspi_pin_cfg_t

结构体定义如下:

表 257 app_dspi_pin_cfg_t结构体成员
成员 描述 取值

app_dspi_pin_t cs

DSPI CS引脚配置

参考app_dspi_pin_t结构体

app_dspi_pin_t clk

DSPI CLOCK引脚配置

参考app_dspi_pin_t结构体

app_dspi_pin_t mosi

DSPI MOSI引脚配置

参考app_dspi_pin_t结构体

app_dspi_pin_t miso

DSPI MISO引脚配置

参考app_dspi_pin_t结构体

app_dspi_pin_t dcx

DSPI DCX引脚配置

参考app_dspi_pin_t结构体

详细信息请参考文件:SDK_Folder\drivers\inc\app_dspi.h

dspi_init_t

结构体定义如下:

表 258 dspi_init_t结构体成员
成员 描述 取值

uint32_t data_size

DSPI数据宽度

该参数的取值可以是下列值中的任意一个:
  • DSPI_DATASIZE_04_BITS(4 bits)
  • DSPI_DATASIZE_05_BITS(5 bits)
  • DSPI_DATASIZE_06_BITS(6 bits)
  • DSPI_DATASIZE_07_BITS(7 bits)
  • DSPI_DATASIZE_08_BITS(8 bits)
  • DSPI_DATASIZE_09_BITS(9 bits)
  • DSPI_DATASIZE_10_BITS(10 bits)
  • DSPI_DATASIZE_11_BITS(11 bits)
  • DSPI_DATASIZE_12_BITS(12 bits)
  • DSPI_DATASIZE_13_BITS(13 bits)
  • DSPI_DATASIZE_14_BITS(14 bits)
  • DSPI_DATASIZE_15_BITS(15 bits)
  • DSPI_DATASIZE_16_BITS(16 bits)
  • DSPI_DATASIZE_17_BITS(17 bits)
  • DSPI_DATASIZE_18_BITS(18 bits)
  • DSPI_DATASIZE_19_BITS(19 bits)
  • DSPI_DATASIZE_20_BITS(20 bits)
  • DSPI_DATASIZE_21_BITS(21 bits)
  • DSPI_DATASIZE_22_BITS(22 bits)
  • DSPI_DATASIZE_23_BITS(23 bits)
  • DSPI_DATASIZE_24_BITS(24 bits)
  • DSPI_DATASIZE_25_BITS(25 bits)
  • DSPI_DATASIZE_26_BITS(26 bits)
  • DSPI_DATASIZE_27_BITS(27 bits)
  • DSPI_DATASIZE_28_BITS(28 bits)
  • DSPI_DATASIZE_29_BITS(29 bits)
  • DSPI_DATASIZE_30_BITS(30 bits)
  • DSPI_DATASIZE_31_BITS(31 bits)
  • DSPI_DATASIZE_32_BITS(32 bits)

uint32_t baud_rate

DSPI波特率预分频器值,该值将用于配置发送和接收SCK时钟

该参数的取值可以是下列值中的任意一个:

  • DSPI_BAUD_RATE_2P1PCLK(外设串行时钟频率/2)
  • DSPI_BAUD_RATE_4P1PCLK(外设串行时钟频率/4)
  • DSPI_BAUD_RATE_8P1PCLK(外设串行时钟频率/8)
  • DSPI_BAUD_RATE_16P1PCLK(外设串行时钟频率/16)
  • DSPI_BAUD_RATE_32P1PCLK(外设串行时钟频率/32)
  • DSPI_BAUD_RATE_64P1PCLK(外设串行时钟频率/64)
  • DSPI_BAUD_RATE_128P1PCLK(外设串行时钟频率/128)
  • DSPI_BAUD_RATE_256P1PCLK(外设串行时钟频率/256)

uint32_t dspi_mode

DSPI接口模式

该参数的取值可以是下列值中的任意一个:
  • DSPI_PROT_MODE_3W1L(3线1 lane)
  • DSPI_PROT_MODE_4W1L(4线1 lane)
  • DSPI_PROT_MODE_4W2L(4线2 lane)

详细信息请参考文件:SDK_Folder\drivers\inc\hal\gr55xx_hal_dspi.h

app_dspi_dma_cfg_t

结构体定义如下:

表 259 app_dspi_dma_cfg_t结构体成员
成员 描述 取值
dma_channel_t channel DSPI DMA传输通道 app_dma_params_t中通道描述

详细信息请参考文件:SDK_Folder\drivers\inc\app_dspi.h

app_dspi_params_t

结构体定义如下:

表 260 app_dspi_params_t结构体成员
成员 描述 取值

app_dspi_pin_cfg_t pin_cfg

DSPI引脚功能设置

参考app_dspi_pin_cfg_t结构体

app_dspi_dma_cfg_t dma_cfg

DSPI传输方式选择

参考app_dspi_dma_cfg_t结构体

dspi_init_t init

DSPI初始化参数配置

参考dspi_init_t结构体

bool is_soft_cs

是否通过软件控制CS片选引脚

  • true:软件控制片选引脚
  • false:不通过软件控制片选引脚

dspi_env_t dspi_env

仅用于记录初始化设备的句柄、相关参数和信号量等,不需要配置

详细信息请参考文件:SDK_Folder\drivers\inc\app_dspi.h

app_dspi_evt_t

结构体定义如下:

表 261 app_dspi_evt_t结构体成员
成员 描述 取值

app_dspi_evt_type_t type

串口事件类型

该参数的取值可以是下列值中的任意一个:
  • APP_DSPI_EVT_ERROR(DSPI 发送错误)
  • APP_DSPI_EVT_TX_CPLT(DSPI发送完成)
  • APP_DSPI_EVT_ABORT(DSPI中止传输)

union

{

uint32_t error_code;

uint16_t size;

}data;

  • uint32_t error_code:发送事件返回的错误号
  • uint16_t size:DSPI已发送的数据长度

说明:

若事件类型为传输错误,此处返回错误号; 若事件类型为发送完成,此处显示已传输的数据大小

DSPI错误号及对应含义如下:
  • HAL_DSPI_ERROR_NONE(无错误)
  • HAL_DSPI_ERROR_TIMEOUT(超时)
  • HAL_DSPI_ERROR_TRANSFER(传输错误)
  • HAL_DSPI_ERROR_DMA(DMA传输错误)
  • HAL_DSPI_ERROR_INVALID_PARAM(无效参数)

详细信息请参考文件:SDK_Folder\drivers\inc\app_dspi.h

app_dspi_command_t

结构体定义如下:

表 262 app_dspi_command_t结构体成员
成员 描述 取值

uint32_t instruction

DSPI指令

需要发送的命令数据

uint32_t instruction_size

DSPI指令位宽

需要发送的命令数据位宽,一般取值为:
  • DSPI_INSTSIZE_08_BITS(8 bits)
  • DSPI_INSTSIZE_16_BITS(16 bits)
  • DSPI_INSTSIZE_32_BITS(32 bits)

uint32_t data_size

DSPI数据位宽

需要发送的数据位宽,一般取值为:
  • DSPI_INSTSIZE_08_BITS(8 bits)
  • DSPI_INSTSIZE_16_BITS(16 bits)
  • DSPI_INSTSIZE_32_BITS(32 bits)

uint32_t length

DSPI发送的数据长度,单位:字节

0x0 ~ 0xFFFFFFFF

详细信息请参考文件:SDK_Folder\drivers\inc\hal\gr55xx_hal_dspi.h

枚举

app_dspi_evt_type_t

枚举定义如下:

表 263 app_dspi_evt_type_t枚举成员
成员 描述

APP_DSPI_EVT_ERROR = 0

DSPI发送错误事件

APP_DSPI_EVT_TX_CPLT = 1

DSPI发送完成事件

APP_DSPI_EVT_ABORT = 3

DSPI中止传输事件

详细信息请参考文件:SDK_Folder\drivers\inc\app_dspi.h

app_dspi_state_t

枚举定义如下:

表 264 app_dspi_state_t枚举成员
成员 描述

APP_DSPI_INVALID = 0

DSPI不可用

APP_DSPI_ACTIVITY = 1

DSPI激活

APP_DSPI_SLEEP = 2

DSPI睡眠

详细信息请参考文件:SDK_Folder\drivers\inc\app_dspi.h

app_dspi_dma_state_t

枚举定义如下:

表 265 app_dspi_dma_state_t枚举成员
成员 描述
APP_DSPI_DMA_INVALID DSPI DMA不可用
APP_DSPI_DMA_ACTIVITY DSPI DMA激活

详细信息请参考文件:SDK_Folder\drivers\inc\app_dspi.h

接口函数

表 266 DSPI驱动接口函数
API 芯片
GR551x GR5526 GR5x25 GR533x GR5405

app_dspi_init

N

Y

Y

N

N

app_dspi_deinit

N

Y

Y

N

N

app_dspi_command_transmit_sync

N

Y

Y

N

N

app_dspi_command_transmit_async

N

Y

Y

N

N

app_dspi_command_sync

N

Y

Y

N

N

app_dspi_command_async

N

Y

Y

N

N

app_dspi_transmit_sync

N

Y

Y

N

N

app_dspi_transmit_async

N

Y

Y

N

N

app_dspi_get_handle

N

Y

Y

N

N

app_dspi_config_mode

N

Y

Y

N

N

app_dspi_config_data_size

N

Y

Y

N

N

app_dspi_abort

N

Y

Y

N

N

app_dspi_abort_it

N

Y

Y

N

N

app_dspi_init

表 267 app_dspi_init接口
函数原型

uint16_t app_dspi_init(app_dspi_params_t *p_params, app_dspi_evt_handler_t evt_handler)

功能说明

初始化DSPI

输入参数
  • p_params:初始化参数的结构体指针
  • evt_handler:用户自己实现的中断回调函数
返回值

APP_DRV_xxx:详见SDK_Folder\drivers\inc\app_drv_error.h宏定义

备注

回调函数形式参照typedef void (*app_dspi_evt_handler_t)(app_dspi_evt_t *p_evt);

HAL层已经实现中断标志位的清理,用户不用关心中断标志的清理。

app_dspi_deinit

表 268 app_dspi_deinit接口
函数原型

uint16_t app_dspi_deinit(void)

功能说明

反初始化DSPI

返回值

APP_DRV_xxx:详见SDK_Folder\drivers\inc\app_drv_error.h宏定义

备注

app_dspi_command_transmit_sync

表 269 app_dspi_command_transmit_sync接口
函数原型

uint16_t app_dspi_command_transmit_sync(app_dspi_command_t *p_cmd, uint8_t *p_data, uint32_t timeout)

功能说明

DSPI轮询方式(同步)发送数据,带控制命令封装

输入参数
  • p_cmd:命令、数据参数的结构体指针
  • p_data:需要发送的数据
  • timeout:超时时间(单位:ms)。当传输数据时间超过该设定值,接口返回APP_DRV_ERR_TIMEOUT
返回值

APP_DRV_xxx:详见SDK_Folder\drivers\inc\app_drv_error.h宏定义

备注

app_dspi_command_transmit_async

表 270 app_dspi_command_transmit_async接口
函数原型

uint16_t app_dspi_command_transmit_async(app_dspi_command_t *p_cmd, uint8_t *p_data)

功能说明

DSPI中断方式(异步)发送数据,带控制命令封装

输入参数
  • p_cmd:命令、数据参数的结构体指针
  • p_data:需要发送的数据,以uint8_t类型数组给出
返回值

APP_DRV_xxx:详见SDK_Folder\drivers\inc\app_drv_error.h宏定义

备注

app_dspi_command_sync

表 271 app_dspi_command_sync接口
函数原型

uint16_t app_dspi_command_sync(app_dspi_command_t *p_cmd, uint32_t timeout)

功能说明

DSPI轮询方式(同步)发送命令

输入参数
  • p_cmd:命令、数据参数的结构体指针
  • timeout:超时时间(单位:ms),当接收数据时长超过该设定值,接口返回Timeout
返回值

APP_DRV_xxx:详见SDK_Folder\drivers\inc\app_drv_error.h宏定义

备注

app_dspi_command_async

表 272 app_dspi_command_async接口
函数原型

uint16_t app_dspi_command_async (app_dspi_command_t *p_cmd)

功能说明

DSPI中断方式(异步)发送命令

输入参数

p_cmd:命令、数据参数的结构体指针

返回值

APP_DRV_xxx:详见SDK_Folder\drivers\inc\app_drv_error.h宏定义

备注

app_dspi_transmit_sync

表 273 app_dspi_transmit_sync接口
函数原型

uint16_t app_dspi_transmit_sync(uint8_t *p_data, uint32_t length, uint32_t timeout)

功能说明

DSPI轮询方式(同步)发送数据

输入参数
  • p_data:需要发送的数据,以uint8_t类型数组给出
  • length:需要发送的数据长度,以Byte为单位
  • timeout:超时时间(单位:ms),当接收数据时长超过该设定值,接口返回Timeout
返回值

APP_DRV_xxx:详见SDK_Folder\drivers\inc\app_drv_error.h宏定义

备注

app_dspi_transmit_async

表 274 app_dspi_transmit_async接口
函数原型

uint16_t app_dspi_transmit_async(uint8_t *p_data, uint32_t length)

功能说明

DSPI中断方式(异步)发送数据

输入参数
  • p_data:需要发送的数据,以uint8_t类型数组给出
  • length:需要发送的数据长度,以Byte为单位
返回值

APP_DRV_xxx:详见SDK_Folder\drivers\inc\app_drv_error.h宏定义

备注

app_dspi_get_handle

表 275 app_dspi_get_handle接口
函数原型

dspi_handle_t *app_dspi_get_handle(void)

功能说明

获取当前DSPI句柄

返回值

dspi_handle_t:DSPI句柄结构体

备注

app_dspi_config_mode

表 276 app_dspi_config_mode接口
函数原型

uint16_t app_dspi_config_mode(uint32_t mode)

功能说明
配置DSPI传输方式:
  • DSPI_PROT_MODE_3W1L
  • DSPI_PROT_MODE_4W1L
  • DSPI_PROT_MODE_4W2L
返回值

APP_DRV_xxx:详见SDK_Folder\drivers\inc\app_drv_error.h宏定义

备注

app_dspi_config_data_size

表 277 app_dspi_config_data_size接口
函数原型

uint16_t app_dspi_config_data_size(uint32_t data_size)

功能说明

配置DSIP传输数据位宽

输入参数

data_size:需要传输的数据位宽,可取(DSPI_DATASIZE_04_BITS ~ DSPI_DATASIZE_32_BITS)参数中的一个

返回值

APP_DRV_xxx:详见SDK_Folder\drivers\inc\app_drv_error.h宏定义

备注

app_dspi_abort

表 278 app_dspi_abort接口
函数原型

uint16_t app_dspi_abort(void)

功能说明

DSPI中止传输(阻塞方式)

返回值

APP_DRV_xxx:详见SDK_Folder\drivers\inc\app_drv_error.h宏定义

备注

app_dspi_abort_it

表 279 app_dspi_abort_it接口
函数原型

uint16_t app_dspi_abort_it(void)

功能说明

DSPI中止传输(非阻塞方式,可根据回调函数获取终止完成的状态)

返回值

APP_DRV_xxx:详见SDK_Folder\drivers\inc\app_drv_error.h宏定义

备注

DMA接口函数

表 280 DMA接口函数
API 芯片
GR551x GR5526 GR5x25 GR533x GR5405

app_dspi_dma_init

N

Y

Y

N

N

app_dspi_dma_deinit

N

Y

Y

N

N

app_dspi_dma_command_transmit_async

N

Y

Y

N

N

app_dspi_dma_command_async

N

Y

Y

N

N

app_dspi_dma_transmit_async

N

Y

Y

N

N

app_dspi_dma_init

表 281 app_dspi_dma_init接口
函数原型

uint16_t app_dspi_dma_init(app_dspi_params_t *p_params)

功能说明

初始化DSPI DMA模式

输入参数
  • p_params:初始化参数的结构体指针
  • evt_handler:用户自己实现的中断回调函数
返回值

APP_DRV_xxx:详见SDK_Folder\drivers\inc\app_drv_error.h宏定义

备注

app_dspi_dma_deinit

表 282 app_dspi_dma_deinit接口
函数原型

uint16_t app_dspi_dma_deinit(void)

功能说明

反初始化DSPI DMA模式

返回值

APP_DRV_xxx:详见SDK_Folder\drivers\inc\app_drv_error.h宏定义

备注

app_dspi_dma_command_transmit_async

表 283 app_dspi_dma_command_transmit_async接口
函数原型

uint16_t app_dspi_dma_command_transmit_async(app_dspi_command_t *p_cmd, uint8_t *p_data)

功能说明

DSPI以DMA方式(异步)发送数据。先发送命令,后发送数据

输入参数
  • p_cmd:存放发送命令的buffer
  • p_data:需要发送的数据,以uint8_t类型数组给出
返回值

APP_DRV_xxx:详见SDK_Folder\drivers\inc\app_drv_error.h宏定义

备注

app_dspi_dma_command_async

表 284 app_dspi_dma_command_async接口
函数原型

uint16_t app_dspi_dma_command_async(app_dspi_command_t *p_cmd)

功能说明

DSPI以DMA方式(异步)发送命令

输入参数

p_cmd:存放发送命令的buffer

返回值

APP_DRV_xxx:详见SDK_Folder\drivers\inc\app_drv_error.h宏定义

备注

app_dspi_dma_transmit_async

表 285 app_dspi_dma_transmit_async接口
函数原型

uint16_t app_dspi_dma_transmit_async(uint8_t *p_data, uint32_t length)

功能说明

DSPI以DMA方式(异步)发送数据

输入参数
  • p_data:存放发送数据的buffer
  • length:待发送数据的长度
返回值

APP_DRV_xxx:详见SDK_Folder\drivers\inc\app_drv_error.h宏定义

备注

示例工程

DSPI刷屏测试

示例工程实现DSPI刷屏测试,定时刷新ST7789V屏幕,工程路径:SDK_Folder\projects\peripheral\dspi\app_dspi。该示例仅适用于GR5526、GR5525。

流程图

DSPI传输初始化参数给屏幕,实现屏幕初始化。最后将显示数据定时传输到屏幕,实现定时刷新屏幕。

图 22 DSPI刷屏示例流程

初始化参数

app_dspi_params_t dspi_params = {
    .pin_cfg = {
        .cs = {
            .type   = APP_IO_TYPE_GPIOB,
            .mux    = APP_IO_MUX_2,
            .pin    = APP_IO_PIN_4,
            .pull   = APP_IO_NOPULL,
            .enable = APP_DSPI_PIN_ENABLE,
        },
        .clk = {
            .type   = APP_IO_TYPE_GPIOB,
            .mux    = APP_IO_MUX_2,
            .pin    = APP_IO_PIN_0,
            .pull   = APP_IO_NOPULL,
            .enable = APP_DSPI_PIN_ENABLE,
        },
        .mosi = {
            .type   = APP_IO_TYPE_GPIOB,
            .mux    = APP_IO_MUX_2,
            .pin    = APP_IO_PIN_1,
            .pull   = APP_IO_NOPULL,
            .enable = APP_DSPI_PIN_ENABLE,
        },
        .miso = {
            .type   = APP_IO_TYPE_GPIOB,
            .mux    = APP_IO_MUX_2,
            .pin    = APP_IO_PIN_2,
            .pull   = APP_IO_NOPULL,
            .enable = APP_DSPI_PIN_ENABLE,
        },
        .dcx = {
            .type   = APP_IO_TYPE_GPIOB,
            .mux    = APP_IO_MUX_2,
            .pin    = APP_IO_PIN_3,
            .pull   = APP_IO_NOPULL,
            .enable = APP_DSPI_PIN_ENABLE,
        },
    },
    .dma_cfg.channel = DMA_Channel0,
    .init = {
        .data_size = DSPI_DATASIZE_08_BITS,
        .baud_rate = DSPI_BAUD_RATE_2P1PCLK,
        . Init. baud_rate = DSPI_PROT_MODE_3W1L,
    },
};
  • pin_cfg:DSPI引脚配置

    包含片选引脚CS、时钟引脚CLK、主出从入引脚MOSI、主入从出引脚MISO、控制引脚DCX,配置IO类型、PIN脚、上下拉模式和复用成DSPI引脚的复用模式。

  • Init:DSPI传输参数配置
    • Init.data_size:数据传输位宽
    • Init.baud_rate:DSPI波特率预分频器值,选择2分频DSPI_BAUD_RATE_2P1PCLK,DSPI时钟等于串行时钟fPCLK除以预分频器值
    • Init.Init.baud_rate:DSPI模式选用DSPI_PROT_MODE_3W1L,即3线1 lane

重要函数

  • 初始化DSPI模块
    ret = app_dspi_init(&params_t, app_dspi_evt_handler)
  • 配置DMA传输方式
    ret = app_dspi_dma_init(&params_t)
  • 传输初始化参数
    app_dspi_dma_command_transmit_async(&g_cmd, (uint8_t *)s_data_8)
  • 传输控制命令
    app_dspi_dma_command_async(&g_cmd)
  • 初始化屏幕显示区域
    app_dspi_display_coordinates(DSPI_ST7789V_X_START, DSPI_ST7789V_X_END, 
                                 DSPI_ST7789V_Y_START, DSPI_ST7789V_Y_END)
  • 传输图像数据,刷新屏幕
    app_dspi_display_write((uint8_t *)pixel, DSPI_POXEL_LEN * 2)

测试验证

  • 硬件准备:LCD屏幕(型号:ST7789V)
  • 测试步骤:
    1. 开发板连接LCD屏幕
    2. 下载运行程序,并打开串口调试助手查看打印日志
    3. 查看屏幕正常刷新显示,测试成功。

扫描关注

打开微信,使用“扫一扫”即可关注。