lugl4313820 发表于 2022-2-27 10:40

【沁恒RISC-V内核 CH582】SPI 驱动ST7735

<p><a href="https://bbs.eeworld.com.cn/thread-1195022-1-1.html">【沁恒RISC-V内核 CH582】I2C 点亮OLED屏 - 国产芯片交流 - 电子工程世界-论坛 (eeworld.com.cn)</a></p>

<p>继I2C驱动OLED屏后,今天测试硬件SPI0驱动ST7735LCD屏。</p>

<p>一、CH582 芯片提供了 SPI0,特性如下:</p>

<ul>
        <li>SPI0 支持主机模式(Master)和从机模式(Slave)。</li>
        <li>&nbsp;兼容串行外设接口(SPI)规范。</li>
        <li>支持模式 0 和模式 3 数据传输方式。</li>
        <li>8 位数据传输方式,数据位序可选:字节低位在前或者高位在前。</li>
        <li>时钟频率最高可达系统主频 Fsys 的一半。</li>
        <li>8 字节 FIFO。</li>
        <li>SPI0 从机模式支持首字节为命令模式或数据流模式。</li>
        <li>SPI0 支持 DMA,数据传输效率更高。</li>
</ul>

<p>二、SPI初始化:</p>

<p>&nbsp; &nbsp; SPI0的IO分别是PA12(NSS),PA13(SCK),PA14(MOSI),今天我驱动ST7735不需要用到数据接收,所以PA15MISO不用配置</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GPIOA_ModeCfg( GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14, GPIO_ModeOut_PP_5mA );</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;SPI0_MasterDefInit();</p>

<p>三、ST7735的DC、RES、BL角的初始,都配置成20mA的输出模式:</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;GPIOA_ModeCfg(RES_PIN | DC_PIN | CS_PIN, GPIO_ModeOut_PP_20mA);</p>

<p>四、把DC、RES、BL高低电平定义如下:</p>

<pre>
<code>#define RES_PINGPIO_Pin_0
#define DC_PIN   GPIO_Pin_1
#define BLK_PINGPIO_Pin_3
#define SCK_PINGPIO_Pin_13
#define MOSI_PIN GPIO_Pin_14
#define CS_PIN   GPIO_Pin_12
//-----------------LCD端口定义----------------

#define LCD_CS_Clr()   GPIOA_ResetBits(CS_PIN)//CS
#define LCD_CS_Set()   GPIOA_SetBits(CS_PIN)

#define LCD_RES_Clr()GPIOA_ResetBits(RES_PIN)//RES
#define LCD_RES_Set()GPIOA_SetBits(RES_PIN)

#define LCD_DC_Clr()   GPIOA_ResetBits(DC_PIN)//DC
#define LCD_DC_Set()   GPIOA_SetBits(DC_PIN)

#define LCD_BLK_Clr()GPIOA_ResetBits(BLK_PIN)//BLK
#define LCD_BLK_Set()GPIOA_SetBits(BLK_PIN)</code></pre>

<p>经过以上四个步骤,ST7735硬件初始化就OK了,相比STM32,他的语句简洁。我从N32G45的工程把ST7735移植过来就几步,花配了几分钟就OK。</p>

<p>其他的ST7735的驱动库,我放在附件里。工程下载下来,解压到EXAM目录下就直接可以测试了。</p>

<p>main.c为:</p>

<pre>
<code>/********************************** (C) COPYRIGHT *******************************
* File Name          : Main.c
* Author             : 刘建华
* Version            : V1.0
* Date               : 2022/02/27
* Description      : 演示ST7735 硬件SPI驱动
*******************************************************************************/

#include "CH58x_common.h"
#include "lcd_init.h"
#include "lcd.h"
__attribute__((aligned(4)))   UINT8 spiBuff[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6 };
__attribute__((aligned(4)))   UINT8 spiBuffrev;

void DebugInit( void )
{
GPIOA_SetBits( GPIO_Pin_9 );
GPIOA_ModeCfg( GPIO_Pin_8, GPIO_ModeIN_PU );
GPIOA_ModeCfg( GPIO_Pin_9, GPIO_ModeOut_PP_5mA );
UART1_DefInit();
}

int main()
{
UINT8 i;

SetSysClock( CLK_SOURCE_PLL_60MHz );

/* 配置串口调试 */
DebugInit();
PRINT( "Start @ChipID=%02X\n", R8_CHIP_ID );

LCD_Init();
LCD_Fill(0,0,LCD_W,LCD_H,WHITE);
LCD_ShowString(10,0,"CH582M",BLUE,WHITE,32,0);
LCD_ShowString(16,36,"HELLO WORLD",RED,WHITE,16,0);
LCD_ShowString(16,54,"ST7735",RED,WHITE,16,0);
while( 1 )
    ;

}</code></pre>

<p></p>

tagetage 发表于 2022-2-27 12:16

<p>好啊,顶一个。</p>

popzone 发表于 2024-12-14 14:48

<p>厉害了,顶一个</p>

lugl4313820 发表于 2024-12-14 18:27

popzone 发表于 2024-12-14 14:48
厉害了,顶一个

<p>多谢大佬的关注,这个板子挺好的,性价比高,有空可以关注一下。</p>
页: [1]
查看完整版本: 【沁恒RISC-V内核 CH582】SPI 驱动ST7735