这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 活动中心 » 板卡试用 » 换取手持数字示波器+WM803的ST7735驱动

共2条 1/1 1 跳转至

换取手持数字示波器+WM803的ST7735驱动

助工
2025-03-17 10:00:51     打赏

阿里玄铁(T-Head)的 WM803 是基于RISC-V 架构 的处理器核心。为了在 WM803 上编写 ST7735 TFT 显示屏的驱动程序,我们需要基于 RISC-V 的编程环境(如平头哥的 CDK 或 GCC 工具链)来实现 SPI 通信和控制 ST7735。


以下是基于 WM803 的 ST7735 驱动程序示例,假设使用 SPI 接口与 ST7735 通信。


1. 硬件连接

假设 ST7735 与 WM803 的连接如下:

SCLK -> SPI 时钟线

MOSI -> SPI 数据线

CS -> 片选线

DC -> 数据/命令选择线

RST -> 复位线

VCC -> 电源

GND -> 地


2. 初始化 SPI

首先,初始化 WM803 的 SPI 外设。假设使用平头哥提供的 HAL 库或直接操作寄存器。


```c

#include "wm_hal.h"  // 平头哥 WM803 的 HAL 库


SPI_HandleTypeDef hspi;


void SPI_Init(void) {

    hspi.Instance = SPI1;  // 假设使用 SPI1

    hspi.Init.Mode = SPI_MODE_MASTER;

    hspi.Init.Direction = SPI_DIRECTION_2LINES;

    hspi.Init.DataSize = SPI_DATASIZE_8BIT;

    hspi.Init.CLKPolarity = SPI_POLARITY_LOW;

    hspi.Init.CLKPhase = SPI_PHASE_1EDGE;

    hspi.Init.NSS = SPI_NSS_SOFT;

    hspi.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_2;

    hspi.Init.FirstBit = SPI_FIRSTBIT_MSB;

    hspi.Init.TIMode = SPI_TIMODE_DISABLE;

    hspi.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;

    HAL_SPI_Init(&hspi);

}

```


 3. ST7735 命令和数据发送

定义发送命令和数据的函数:


```c

void ST7735_WriteCommand(uint8_t cmd) {

    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET); // CS 低电平

    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET); // DC 低电平(命令)

    HAL_SPI_Transmit(&hspi, &cmd, 1, HAL_MAX_DELAY);

    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET); // CS 高电平

}


void ST7735_WriteData(uint8_t data) {

    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET); // CS 低电平

    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET); // DC 高电平(数据)

    HAL_SPI_Transmit(&hspi, &data, 1, HAL_MAX_DELAY);

    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET); // CS 高电平

}

```


4. ST7735 初始化

编写初始化函数:


```c

void ST7735_Init(void) {

    // 复位显示屏

    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6, GPIO_PIN_RESET); // RST 低电平

    HAL_Delay(100);

    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6, GPIO_PIN_SET); // RST 高电平

    HAL_Delay(100);


    // 发送初始化命令

    ST7735_WriteCommand(0x01); // 软件复位

    HAL_Delay(150);


    ST7735_WriteCommand(0x11); // 退出睡眠模式

    HAL_Delay(255);


    ST7735_WriteCommand(0x3A); // 设置像素格式

    ST7735_WriteData(0x05);    // 16 位色深


    ST7735_WriteCommand(0x29); // 打开显示

}

```


 5. 绘制像素

编写绘制单个像素的函数:


```c

void ST7735_DrawPixel(uint16_t x, uint16_t y, uint16_t color) {

    ST7735_WriteCommand(0x2A); // 设置列地址

    ST7735_WriteData(x >> 8);

    ST7735_WriteData(x & 0xFF);

    ST7735_WriteData((x + 1) >> 8);

    ST7735_WriteData((x + 1) & 0xFF);


    ST7735_WriteCommand(0x2B); // 设置行地址

    ST7735_WriteData(y >> 8);

    ST7735_WriteData(y & 0xFF);

    ST7735_WriteData((y + 1) >> 8);

    ST7735_WriteData((y + 1) & 0xFF);


    ST7735_WriteCommand(0x2C); // 写入内存

    ST7735_WriteData(color >> 8);

    ST7735_WriteData(color & 0xFF);

}

```


6. 主函数

在主函数中调用初始化函数并绘制一些像素:


```c

int main(void) {

    HAL_Init();

    SystemClock_Config();

    SPI_Init();

    ST7735_Init();


    while (1) {

        ST7735_DrawPixel(10, 10, 0xF800); // 红色像素

        ST7735_DrawPixel(20, 20, 0x07E0); // 绿色像素

        ST7735_DrawPixel(30, 30, 0x001F); // 蓝色像素

    }

}

```


7. 编译和下载

使用平头哥的 CDK 或 GCC 工具链编译代码,并将程序下载到 WM803 上运行。


注意事项

1. SPI 时钟频率:确保 SPI 时钟频率适合 ST7735 的规格。

2. 引脚配置:根据实际硬件连接修改 GPIO 引脚。

3. 性能优化:如果需要更高的性能,可以使用 DMA 进行数据传输。


希望这个示例能帮助你在 WM803 上成功驱动 ST7735 显示屏!如果有更多问题,欢迎随时提问!



专家
2025-03-18 09:21:11     打赏
2楼

谢谢分享


共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]
站长统计