lugl4313820 发表于 2023-1-2 12:31

[ ST NUCLEO-U575ZI-Q 测评] 软件SPI驱动ST7735

<div class='showpostmsg'><p>硬件平台:1.8寸128x160 TFT屏(st7735驱动)</p>

<p>连线:</p>

<p>/*<br />
&nbsp;* BL - PC8 &nbsp;D0<br />
&nbsp;* CS - PC9 &nbsp;D1<br />
&nbsp;* DC - PC11 D3<br />
&nbsp;* RS - PD2 &nbsp;CMD<br />
&nbsp;* SCL -PC10 D2<br />
&nbsp;* SDA -PC12 CK<br />
&nbsp;*/</p>

<p>由于用spi硬件调试了好几次,要么SCK,不上拉就没有波形等。退而求次之用软件spi驱动。</p>

<p>&nbsp;</p>

<p>一、配置IO</p>

<p>&nbsp;二、由stm32cubeIde生成工程后,加入st7735.h、st7735.c以及font.h</p>

<p>&nbsp; 3、宏定义,在stm7735.h中定义屏的6个引脚的高底电平:</p>

<pre>
<code> //LCD片选脚
#define CS_HIGH   HAL_GPIO_WritePin(ST7735_CS_GPIO_Port, ST7735_CS_Pin, GPIO_PIN_SET)
#define CS_LOW   HAL_GPIO_WritePin(ST7735_CS_GPIO_Port, ST7735_CS_Pin, GPIO_PIN_RESET)

//指令数据选择脚   对应屏幕上面的a0脚输出低电平,代表命令,高电平,代表数据
#define COMMANDHAL_GPIO_WritePin(ST7735_DC_GPIO_Port, ST7735_DC_Pin, GPIO_PIN_RESET)
#define DATA   HAL_GPIO_WritePin(ST7735_DC_GPIO_Port, ST7735_DC_Pin, GPIO_PIN_SET)

//复位脚
#define reset_highHAL_GPIO_WritePin(ST7735_RES_GPIO_Port, ST7735_RES_Pin, GPIO_PIN_SET)
#define reset_lowHAL_GPIO_WritePin(ST7735_RES_GPIO_Port, ST7735_RES_Pin, GPIO_PIN_RESET)
//背光脚
#defineled_high HAL_GPIO_WritePin(ST7735_BL_GPIO_Port,ST7735_BL_Pin,GPIO_PIN_SET)
#defineled_low HAL_GPIO_WritePin(ST7735_BL_GPIO_Port,ST7735_BL_Pin,GPIO_PIN_RESET)
// SCL

#define LCD_SCLK_LOW HAL_GPIO_WritePin(ST7735_SCL_GPIO_Port, ST7735_SCL_Pin, GPIO_PIN_RESET)
#define LCD_SCLK_HIGH HAL_GPIO_WritePin(ST7735_SCL_GPIO_Port, ST7735_SCL_Pin, GPIO_PIN_SET)

// SDA

#define LCD_SDA_LOW HAL_GPIO_WritePin(ST7735_SDA_GPIO_Port, ST7735_SDA_Pin, GPIO_PIN_RESET)
#define LCD_SDA_HIGH HAL_GPIO_WritePin(ST7735_SDA_GPIO_Port, ST7735_SDA_Pin, GPIO_PIN_SET)
</code></pre>

<p>4、定义spi向st7735发送命令的几个重要函数:</p>

<pre>
<code>void st7735_write(uint8_t data)
{
        uint8_t i;
        for(i=0;i&lt;8;i++)
        {
                LCD_SCLK_LOW;
                if(data&amp;0x80)
                {
                        LCD_SDA_HIGH;
                }
                else
                {
                        LCD_SDA_LOW;
                }
                LCD_SCLK_HIGH;
                data&lt;&lt;=1;
        }
}
//LCD屏幕写指令
void TFT_WRITE_DATA(uint8_t data)
{
        CS_LOW;
        DATA;
        st7735_write(data);
        //HAL_SPI_Transmit(&amp;hspi3, &amp;data, 2, 20);
        //HAL_SPI_Transmit_DMA(&amp;hspi1,&amp;data,1);
        CS_HIGH;

}
//LCD屏幕写指令
void TFT_WRITE_COMMAND(uint8_t command)
{
        CS_LOW;
        COMMAND;
        st7735_write(command);
        //HAL_SPI_Transmit(&amp;hspi3, &amp;command, 2, 20);
        //HAL_SPI_Transmit_DMA(&amp;hspi1,&amp;command,1);
        CS_HIGH;
}

//向对应的寄存机写入单个数�?
void TFT_WRITE_REG(uint8_t reg,uint16_t reg_value)
{
        TFT_WRITE_COMMAND(reg);
        TFT_WRITE_DATA(reg_value);


}
// 写入一个16位的数据
void TFT_WRITE_u16_DATA(uint16_t temp)
{

                uint8_t tempBuf;
                tempBuf = temp&gt;&gt;8;
                tempBuf = temp;
                CS_LOW ;
                DATA ;
                st7735_write(tempBuf);

                //HAL_SPI_Transmit(&amp;hspi3, &amp;tempBuf, 4, 20);
                //HAL_SPI_Transmit_DMA(&amp;hspi1,tempBuf, 2);

                st7735_write(tempBuf);

                CS_HIGH ;
}</code></pre>

<p>定义好这些参数后,在main.c中初始化st7735,然后写测试显示:</p>

<pre>
<code>/* USER CODE BEGIN 2 */

printf("start U7575!\r\n");
tft_init();
        TFT_ShowChar(0,0,'A',WHITE,YELLOW,32);
        LCD_ShowCharStr(0,32,128,(char *)str,WHITE,BLUE,32);
        LCD_ShowCharStr(0,64,128,(char *)str3,WHITE,BLUE,24);
        LCD_ShowCharNumber(0,96,128,number,WHITE,RED,32);
        LCD_ShowCharStr(0,128,128,(char *)str2,RED,WHITE,16);
/* USER CODE END 2 */
</code></pre>

<p>测试效果如图:</p>

<div>&nbsp;工程附后。<br />
<br />
&nbsp;</div>

<p>【讨论】这个还是没有全部弄好,一是颜色对不上,二是硬件spi没有调试好。希望大佬们有更好的驱动。</p>
</div><script>                                        var loginstr = '<div class="locked">查看本帖全部内容,请<a href="javascript:;"   style="color:#e60000" class="loginf">登录</a>或者<a href="https://bbs.eeworld.com.cn/member.php?mod=register_eeworld.php&action=wechat" style="color:#e60000" target="_blank">注册</a></div>';
                                       
                                        if(parseInt(discuz_uid)==0){
                                                                                                (function($){
                                                        var postHeight = getTextHeight(400);
                                                        $(".showpostmsg").html($(".showpostmsg").html());
                                                        $(".showpostmsg").after(loginstr);
                                                        $(".showpostmsg").css({height:postHeight,overflow:"hidden"});
                                                })(jQuery);
                                        }                </script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script>

秦天qintian0303 发表于 2023-1-3 08:58

<p>硬件SPI比硬件IIC相对容易很多,看看配置例程应该问题不大,可定有一些小地方没有注意到</p>

lugl4313820 发表于 2023-1-3 09:54

秦天qintian0303 发表于 2023-1-3 08:58
硬件SPI比硬件IIC相对容易很多,看看配置例程应该问题不大,可定有一些小地方没有注意到

<p>硬件的弄了好久,有空再看看。</p>

okhxyyo 发表于 2023-1-12 09:31

<p>测评汇总:免费申请|ST NUCLEO-U575ZI-Q https://bbs.eeworld.com.cn/thread-1228653-1-1.html</p>

xutong 发表于 2023-2-2 17:31

<p>建议抓抓stm32 spi的波形看看,发现stm32 spi有点bug</p>

lugl4313820 发表于 2023-2-2 23:21

xutong 发表于 2023-2-2 17:31
建议抓抓stm32 spi的波形看看,发现stm32 spi有点bug

<p>后面用st32cubeide来做spi好象没有BUG。</p>

xutong 发表于 2023-2-3 06:38

lugl4313820 发表于 2023-2-2 23:21
后面用st32cubeide来做spi好象没有BUG。

<p>可能这个片子已经更新好了</p><br/>
页: [1]
查看完整版本: [ ST NUCLEO-U575ZI-Q 测评] 软件SPI驱动ST7735