【GD32F310G-START】SPI驱动ST7735
<p><a href="https://bbs.eeworld.com.cn/thread-1201841-1-1.html">【GD32F310G-START】HELLO WORLD - GD32 MCU - 电子工程世界-论坛 (eeworld.com.cn)</a></p><p><a href="https://bbs.eeworld.com.cn/thread-1201927-1-1.html">【GD32F310G-START】OLED之HELLO EEWORLD——硬件I2C - GD32 MCU - 电子工程世界-论坛</a></p>
<p> </p>
<p>驱动I2C后,接着是SPI,这次实战是软SPI驱动屏幕ST7735,主要代码是移植我前面实战st7735代码。</p>
<p>1、IO定义:</p>
<pre>
<code>/*****************
作 者 : 刘建华
生成日期 : 2022-5-6
最近修改 :
功能描述 :GD32F320G SPI—7735
说明:
----------------------------------------------------------------
GND 电源地
VCC 3.3v电源
SCL PA5(SCLK)
SDA PA7(MOSI)
RES PA1
DC PA2
CS PA4
BLK PA3
----------------------------------------------------------------
修改历史 :
日 期 : 2022-5-7
All rights reserved
******************************************************************************/</code></pre>
<p>2、GPIO初始化:</p>
<pre>
<code>/******************************************************************************
函数说明:GPIO初始化
入口数据:无
返回值: 无
******************************************************************************/
void LCD_GPIO_Init(void)
{
rcu_periph_clock_enable(RCU_GPIOA);
gpio_mode_set(GPIOA, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7 | GPIO_PIN_4);
gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7 | GPIO_PIN_4);
gpio_bit_set(GPIOA, GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7 | GPIO_PIN_4);
} </code></pre>
<p><br />
3、模拟SPI写数据</p>
<pre>
<code>/******************************************************************************
函数说明:LCD串行数据写入函数
入口数据:dat 要写入的串行数据
返回值: 无
******************************************************************************/
void LCD_Writ_Bus(uint8_t dat)
{
uint8_t i;
LCD_CS_Clr();
for(i=0;i<8;i++)
{
LCD_SCLK_Clr();
if(dat&0x80)
{
LCD_MOSI_Set();
}
else
{
LCD_MOSI_Clr();
}
LCD_SCLK_Set();
dat<<=1;
}
LCD_CS_Set();
}</code></pre>
<p>4、写入一位:</p>
<pre>
<code>/******************************************************************************
函数说明:LCD写入数据
入口数据:dat 写入的数据
返回值: 无
******************************************************************************/
void LCD_WR_DATA8(uint8_t dat)
{
LCD_Writ_Bus(dat);
}</code></pre>
<p>5、写入命令:</p>
<pre>
<code>/******************************************************************************
函数说明:LCD写入命令
入口数据:dat 写入的命令
返回值:无
******************************************************************************/
void LCD_WR_REG(uint8_t dat)
{
LCD_DC_Clr();//写命令
LCD_Writ_Bus(dat);
LCD_DC_Set();//写数据
}</code></pre>
<p>6、宏定义:</p>
<pre>
<code>#define SOFTWARE_SPI_ENABLE 1
#define LCD_RES_Clr() gpio_bit_reset(GPIOA,GPIO_PIN_1)//RESrst
#define LCD_RES_Set()gpio_bit_set(GPIOA,GPIO_PIN_1)
#define LCD_DC_Clr() gpio_bit_reset(GPIOA,GPIO_PIN_2)//DCdata command select
#define LCD_DC_Set() gpio_bit_set(GPIOA,GPIO_PIN_2)
#define LCD_BLK_LOW() gpio_bit_reset(GPIOA,GPIO_PIN_3)//BLK
#define LCD_BLK_Set()gpio_bit_set(GPIOA,GPIO_PIN_3)
#define LCD_CS_Clr() gpio_bit_reset(GPIOA,GPIO_PIN_4)//CS
#define LCD_CS_Set() gpio_bit_set(GPIOA,GPIO_PIN_4)
#if SOFTWARE_SPI_ENABLE
#define LCD_SCLK_Clr()gpio_bit_reset(GPIOA,GPIO_PIN_5)//SCL=SCLK
#define LCD_SCLK_Set() gpio_bit_set(GPIOA,GPIO_PIN_5)
#define LCD_MOSI_Clr()gpio_bit_reset(GPIOA,GPIO_PIN_7)//SDA=MOSI
#define LCD_MOSI_Set() gpio_bit_set(GPIOA,GPIO_PIN_7)
#endif</code></pre>
<p>其余的代码我打包上附件:<br />
<br />
</p>
<p><br />
</p>
<p>谢谢楼主分享,测评的很用心呀</p>
页:
[1]