国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

stm32 hal庫硬件spi(軟件spi)驅(qū)動(dòng)1.8寸tft—lcd屏幕

這篇具有很好參考價(jià)值的文章主要介紹了stm32 hal庫硬件spi(軟件spi)驅(qū)動(dòng)1.8寸tft—lcd屏幕。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。


前言

屏幕是嵌入式開發(fā)中的一個(gè)重要的部分,cdsn上有許多解釋原理的,還有很多是采用正點(diǎn)原子的屏幕來驅(qū)動(dòng)的,對(duì)于剛剛?cè)腴T不久的我們可能沒有資金去購買較為昂貴的屏幕。而對(duì)于底層原理我們暫時(shí)也不必了解的那么深入,能點(diǎn)亮屏幕就是我們最大的快樂。
除了中景園的資料全一些以外,沒有啥更好的驅(qū)動(dòng)了! 嘛?
無意中找到了一個(gè)很不錯(cuò)的網(wǎng)站,他們的代碼和中景園相似但又有所不同,畢竟科技以換殼為本嘛!所以本篇拙筆就是記錄如何將代碼移植到stm32上。
官網(wǎng)地址:官網(wǎng)地址
在官網(wǎng)中可下載相應(yīng)的代碼,我在每節(jié)的鏈接中會(huì)貼出移植好的代碼。


環(huán)境搭建

cubemx、keil5、tft_lcd屏幕(spi接口)、stm32開發(fā)板、

一、stm32軟件spi驅(qū)動(dòng)lcd

鏈接:百度網(wǎng)盤——my
提取碼:fnov

1 cubemx配置

stm32 hal庫硬件spi(軟件spi)驅(qū)動(dòng)1.8寸tft—lcd屏幕
cubemx配置如上圖所示,記得一定要改名字,不然每次都要修改lcd的源碼會(huì)很麻煩,名字就寫圖中的就可以了。(這個(gè)還不知道是什么的需要補(bǔ)習(xí)一下cubemx了后續(xù)會(huì)出一期期cubemx的基礎(chǔ)使用

2 代碼移植

將官網(wǎng)中的文件下載下來以后繼續(xù)解壓,
這個(gè)鏈接里面有官網(wǎng)的文件
鏈接:百度網(wǎng)盤
提取碼:2eq4
stm32 hal庫硬件spi(軟件spi)驅(qū)動(dòng)1.8寸tft—lcd屏幕
打開這個(gè)目錄下的代碼并在自己創(chuàng)建的工程下創(chuàng)建一個(gè)user文件夾。
在user文件夾下創(chuàng)建需要的.h .c文件

1)lcd.c

上面的大段注釋就不需要了,直接把下面的代碼加入就可以了,再把lcd.h加入
這個(gè)時(shí)候要根據(jù)叉叉和感嘆號(hào)去修改代碼
第一步
刪除#include “delay.h”。
刪除void LCD_Init(void)中的LCD_GPIOInit();//LCD GPIO初始化 這句代碼,因?yàn)閏ube已經(jīng)幫我們初始化過了不需要初始化了。
delay_ms改成hal_delay;因?yàn)闃?biāo)準(zhǔn)庫中沒有帶延時(shí)而hal庫中有,我們直接用hal庫的就可以了。
第二步
#include “sys.h”改成#include “main.h”

并在下面加一下
#define u8 uint8_t
#define u16 uint16_t
因?yàn)閔al庫中沒有u8 和u 16,所以需要宏定義一下。

第三步
刪除lcd端口定義,因?yàn)閏ube引腳幫我們配置好了,不需要這個(gè)了
stm32 hal庫硬件spi(軟件spi)驅(qū)動(dòng)1.8寸tft—lcd屏幕

修改引腳電平的跳變,這一步是很重要的
這里我們修改為:
stm32 hal庫硬件spi(軟件spi)驅(qū)動(dòng)1.8寸tft—lcd屏幕

這里并沒有調(diào)用hal_gpio_write()因?yàn)橹苯硬倏v寄存器的話會(huì)快很多。

lcd.h就自己寫了,這個(gè)也很簡單,實(shí)在不會(huì)就對(duì)照我的【百度網(wǎng)盤——my】中的文件抄寫一下,后面基本都是只介紹.c庫的修改

2)spi.c

在這里直接移植過去就可以了不需要繼續(xù)更改(可以把頭部注釋都刪除)

在spi.h文件中我們修改宏定義如圖:
stm32 hal庫硬件spi(軟件spi)驅(qū)動(dòng)1.8寸tft—lcd屏幕
這一步是修改模擬spi信號(hào)的跳變的。

3)gui.c

第一步:
刪除#include "delay.h"
第二步:
在gui.h中寫:

#include "main.h"
#define u8 uint8_t
#define u16 uint16_t
#define u32 uint32_t

第三步:
移植font.h文件,這里是不需要修改的

4)test.c

第一步:
刪除#include "delay.h"
#include "touch.h"
#include "key.h"
#include "led.h"
以及最下面的void Touch_Test(void)函數(shù)
第二步:
移植test.h文件
并寫入:

#include "main.h"
#define u8 uint8_t

5)驗(yàn)證

stm32 hal庫硬件spi(軟件spi)驅(qū)動(dòng)1.8寸tft—lcd屏幕
在主函數(shù)中寫這些即可。

3 屏幕背光亮度調(diào)節(jié)

背光的原理就不介紹了,我們的lcd會(huì)有一個(gè)BL引腳,這樣引腳就是調(diào)節(jié)背光的,即調(diào)節(jié)屏幕亮度,這個(gè)引腳我們一般設(shè)置為3.3v即為正常亮度,當(dāng)想讓他暗一些的時(shí)候就需要對(duì)這個(gè)引腳pwm輸出,通過控制占空比來調(diào)節(jié)亮度,高電平占比越多,屏幕越亮。

二、stm32硬件spi驅(qū)動(dòng)lcd

硬件spi要比軟件模擬的spi快很多,在本次有一個(gè)test_time函數(shù),用軟件和硬件分別跑,硬件所需的時(shí)間僅僅是軟件的一半。

鏈接:硬件spi_my
提取碼:6ikf

1 cubemx配置

stm32 hal庫硬件spi(軟件spi)驅(qū)動(dòng)1.8寸tft—lcd屏幕
stm32 hal庫硬件spi(軟件spi)驅(qū)動(dòng)1.8寸tft—lcd屏幕
并不需要要重新創(chuàng)建文件,只需要將上一份的文件復(fù)制粘貼以后進(jìn)cubemx繼續(xù)修改就可以了。
模式選擇為只做主機(jī)發(fā)送。隨后生成代碼即可。

2 代碼修改

本次我們只需要修改spi.c和spi.h即可,首先就是把user文件夾下的這兩個(gè)文件改名為my_user.hmy_user.c因?yàn)楸緛砻謺?huì)和cubemx生成的文件重名。

把my_user.c中的刪除掉,添加下面代碼:

#include "my_spi.h"
#include "spi.h"

/*****************************************************************************
 * @name       :u8 SPI_WriteByte(SPI_TypeDef* SPIx,u8 Byte)
 * @date       :2018-08-09 
 * @function   :Write a byte of data using STM32's hardware SPI
 * @parameters :SPIx: SPI type,x for 1,2,3
                Byte:Data to be written
 * @retvalue   :Data received by the bus
******************************************************************************/
u8 SPI_WriteByte(SPI_TypeDef* SPIx,u8 Byte)
{
	while((SPIx->SR&SPI_FLAG_TXE)==RESET);		//等待發(fā)送區(qū)空	  
	SPIx->DR=Byte;	 	//發(fā)送一個(gè)byte   
	while((SPIx->SR&SPI_FLAG_RXNE)==RESET);//等待接收完一個(gè)byte  
	return SPIx->DR;          	     //返回收到的數(shù)據(jù)			
} 
//u8 SPI_WriteByte(SPI_TypeDef* SPIx,u8 Byte)
//{
//	HAL_SPI_Transmit(&hspi1,&Byte,1,10);
//	return SPIx->DR;          	     //返回收到的數(shù)據(jù)			
//} 


/*****************************************************************************
 * @name       :void SPI_SetSpeed(SPI_TypeDef* SPIx,u8 SpeedSet)
 * @date       :2018-08-09 
 * @function   :Set hardware SPI Speed
 * @parameters :SPIx: SPI type,x for 1,2,3
                SpeedSet:0-high speed
												 1-low speed
 * @retvalue   :None
******************************************************************************/
void SPI_SetSpeed(SPI_TypeDef* SPIx,u8 SpeedSet)
{
	SPIx->CR1&=0XFFC7;
	if(SpeedSet==1)//高速
	{
		SPIx->CR1|=SPI_BAUDRATEPRESCALER_2;//Fsck=Fpclk/2	
	}
	else//低速
	{
		SPIx->CR1|=SPI_BAUDRATEPRESCALER_32; //Fsck=Fpclk/32
	}
	SPIx->CR1|=1<<6; //SPI設(shè)備使能
} 

/*****************************************************************************
 * @name       :void SPI2_Init(void)	
 * @date       :2018-08-09 
 * @function   :Initialize the STM32 hardware SPI2
 * @parameters :None
 * @retvalue   :None
******************************************************************************/
void SPI_Init(void)	
{
	__HAL_SPI_ENABLE(&hspi1);//這句話很重要
}

在my_spi.h中寫:

#include "main.h"

#ifndef _SPI_H_
#define _SPI_H_

#define u8 uint8_t
 
u8 SPI_WriteByte(SPI_TypeDef* SPIx,u8 Byte);
void SPI_Init(void);
void SPI_SetSpeed(SPI_TypeDef* SPIx,u8 SpeedSet);

#endif

再把lcd.c中的打叉的地方改為SPI_WriteByte(SPI1,…….)紅色的省略號(hào)就是填寫本來那里填的數(shù)據(jù)。

這樣就完成了,直接燒錄即可。

3 速度測試

分別在軟件和硬件的test.c文件的末尾寫上:

void test_time(void)
{
	
	LCD_Fill(0,0,lcddev.width,lcddev.height,WHITE);
	Show_Str(20,30,BLUE,YELLOW,"BL Test",16,1);HAL_Delay(1);
	LCD_Fill(0,0,lcddev.width,lcddev.height,RED);
	Show_Str(20,30,BLUE,YELLOW,"RED ",16,1);HAL_Delay(1);
	LCD_Fill(0,0,lcddev.width,lcddev.height,GREEN);
	Show_Str(20,30,BLUE,YELLOW,"GREEN ",16,1);HAL_Delay(1);
	LCD_Fill(0,0,lcddev.width,lcddev.height,BLUE);
	Show_Str(20,30,RED,YELLOW,"BLUE ",16,1);HAL_Delay(1);	
}

并把主函數(shù)中的原有測試代碼注釋,寫成如圖:
stm32 hal庫硬件spi(軟件spi)驅(qū)動(dòng)1.8寸tft—lcd屏幕

當(dāng)復(fù)位鍵按下以后開始計(jì)時(shí),在我的板子上,硬件spi跑完只需要14秒,即屏幕的刷新率可以達(dá)到30fps,而使用軟件的話只能達(dá)到10多fps。由此可見硬件spi是很不錯(cuò)的選擇。

三、提高屏幕刷新率

在tft_lcd的屏幕下,我們對(duì)于屏幕呈像素質(zhì)的關(guān)注是比較少的,我們主要是希望屏幕有較快的相應(yīng)速度,使用我們在上兩節(jié)分別使用了軟件spi和硬件spi。在硬件spi中我們參考的是標(biāo)準(zhǔn)庫,移植到的是hal庫,其中不難發(fā)現(xiàn)我們在使用寫數(shù)據(jù)函數(shù)的時(shí)候,使用到的都是寄存器方法,而沒有使用標(biāo)準(zhǔn)庫以及hal庫提供的庫函數(shù)。為什么留著方便的庫函數(shù)不用而才用寄存器呢?
其實(shí)當(dāng)你F12庫函數(shù)你就能發(fā)現(xiàn),庫函數(shù)中存積著大量的代碼,有些代碼是為了檢查通信協(xié)議的。我們在追求速度的時(shí)候總要舍棄些什么,畢竟有舍才有得嘛!

在標(biāo)準(zhǔn)庫中代碼是這樣的
stm32 hal庫硬件spi(軟件spi)驅(qū)動(dòng)1.8寸tft—lcd屏幕
而在我們移植的hal庫中,我們用了差不多的函數(shù):
stm32 hal庫硬件spi(軟件spi)驅(qū)動(dòng)1.8寸tft—lcd屏幕
細(xì)心的你可能已經(jīng)發(fā)現(xiàn)了,只是標(biāo)志少了幾個(gè)字母而已。
其實(shí)我們可以很簡潔的寫出這個(gè)代碼:
stm32 hal庫硬件spi(軟件spi)驅(qū)動(dòng)1.8寸tft—lcd屏幕
一句話就可以解決,但是當(dāng)你使用這個(gè)函數(shù)驅(qū)動(dòng)屏幕刷新的時(shí)候你會(huì)發(fā)現(xiàn)你只能眨眼補(bǔ)幀,這實(shí)在是太慢了,慢到速度還比不過軟件spi。那有沒有方法在hal庫的spi中尋找一個(gè)速度也比較快,且合適的代碼呢?
這只能通過縮減hal_spi_transmit();函數(shù)了,暫時(shí)還沒想好

四、中文顯示

1打開取模軟件
stm32 hal庫硬件spi(軟件spi)驅(qū)動(dòng)1.8寸tft—lcd屏幕

2左上角模式選擇為字符模式 stm32 hal庫硬件spi(軟件spi)驅(qū)動(dòng)1.8寸tft—lcd屏幕

3點(diǎn)擊選項(xiàng) stm32 hal庫硬件spi(軟件spi)驅(qū)動(dòng)1.8寸tft—lcd屏幕

4設(shè)置如下,然后點(diǎn)擊確定。
stm32 hal庫硬件spi(軟件spi)驅(qū)動(dòng)1.8寸tft—lcd屏幕

5以16x16漢字取模為例:stm32 hal庫硬件spi(軟件spi)驅(qū)動(dòng)1.8寸tft—lcd屏幕

字寬字高都改為16
然后在輸入欄輸入漢字stm32 hal庫硬件spi(軟件spi)驅(qū)動(dòng)1.8寸tft—lcd屏幕

點(diǎn)擊生成字模stm32 hal庫硬件spi(軟件spi)驅(qū)動(dòng)1.8寸tft—lcd屏幕
生成的字模如下

stm32 hal庫硬件spi(軟件spi)驅(qū)動(dòng)1.8寸tft—lcd屏幕

然后將字模復(fù)制到例程lcdfont.h文件夾 如下數(shù)組內(nèi)
注:每個(gè)字的字模前需要添加這個(gè)漢字,并用雙引號(hào)括起來然后加上逗號(hào)!
stm32 hal庫硬件spi(軟件spi)驅(qū)動(dòng)1.8寸tft—lcd屏幕

總結(jié)

以上就是今天要講的內(nèi)容,本文僅僅簡單介紹了如何移植到hal庫,當(dāng)你點(diǎn)亮屏幕的那一刻所以的坑都是值得的。
相逢何必曾相識(shí),江湖再見??!文章來源地址http://www.zghlxwxcb.cn/news/detail-437878.html

到了這里,關(guān)于stm32 hal庫硬件spi(軟件spi)驅(qū)動(dòng)1.8寸tft—lcd屏幕的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • stm32驅(qū)動(dòng)st7789 TFT-LCD屏幕顯示

    stm32驅(qū)動(dòng)st7789 TFT-LCD屏幕顯示

    一切程序以最后百度網(wǎng)盤鏈接的程序?yàn)闇?zhǔn),可能在寫文章的時(shí)候有些地方有改動(dòng)。 主控:STM32F103C8T6 1.69 TFT-LCD(st7789驅(qū)動(dòng)) 1.1接線說明 1.2硬件初始化 TFT-LCD是采用SPI通信的,這里使用stm32f103c8t6的SPI1,初始化代碼如下 1.3驅(qū)動(dòng)初始化 在原有的驅(qū)動(dòng)基礎(chǔ)上增加了幾個(gè)宏去控制顯

    2024年02月16日
    瀏覽(34)
  • STM32H5開發(fā)(6)----SPI驅(qū)動(dòng)TFT-LCD屏

    STM32H5開發(fā)(6)----SPI驅(qū)動(dòng)TFT-LCD屏

    在嵌入式領(lǐng)域,TFT-LCD屏是最常用的顯示解決方案之一,因?yàn)樗鼈兲峁┝素S富的顏色和高分辨率的圖像顯示能力。STM32H5作為ST的高性能微控制器系列,具備了強(qiáng)大的處理能力和多種通信接口,非常適合于驅(qū)動(dòng)TFT-LCD顯示屏,該液晶屏st7796或者ILI9488驅(qū)動(dòng)芯片,這兩個(gè)屏幕都是兼容

    2024年02月05日
    瀏覽(30)
  • STM32(HAL庫)驅(qū)動(dòng)(1.44寸)TFT-LCD彩屏

    STM32(HAL庫)驅(qū)動(dòng)(1.44寸)TFT-LCD彩屏

    目錄 1、簡介 2、CubeMX初始化配置 2.1 基礎(chǔ)配置 2.1.1 SYS配置 ?2.1.2 RCC配置 2.2 屏幕引腳配置 2.3 項(xiàng)目生成 ?3、KEIL端程序整合 3.1 LCD驅(qū)動(dòng)添加 3.2?函數(shù)修改 3.2.1?lcd.h修改 3.2.2 lcd_innit.h?修改 ?3.2.3 lcd.c修改 ?3.2.4?lcd_inut.c修改 ?3.3?主函數(shù)代碼 3.3.1 添加頭文件 3.3.2?LCD進(jìn)行初始化

    2024年02月03日
    瀏覽(29)
  • 1.8寸TFT LCD128X160 ST7735S SPI串口屏驅(qū)動(dòng)示例

    1.8寸TFT LCD128X160 ST7735S SPI串口屏驅(qū)動(dòng)示例

    ??1.8寸TFT LCD128X160 ST7735S SPI串口屏 ??屏幕驅(qū)動(dòng)資料1 以下是由中景園提供的,里面包含了: 由于購買的是合宙的1.8寸TFT LCD128X160 ST7735S SPI串口屏隨同ESP32C3一起購買的,價(jià)格是9.9RMB,比起中景園的相同規(guī)格的屏幕是16.5RMB,性價(jià)比還是很高的。 ??漢字取模方式和軟件 ?? PCto

    2024年01月22日
    瀏覽(21)
  • STM32(HAL庫)驅(qū)動(dòng)st7789LCD屏幕(7引腳240*240)

    STM32(HAL庫)驅(qū)動(dòng)st7789LCD屏幕(7引腳240*240)

    目錄 1、簡介 2、CubeMX初始化配置 2.1 基礎(chǔ)配置 2.1.1 SYS配置 ?2.1.2 RCC配置 2.2 屏幕引腳配置 2.3 項(xiàng)目生成 ?3、KEIL端程序整合 3.1 LCD驅(qū)動(dòng)添加 3.2?函數(shù)修改 3.2.1?lcd.h修改 3.2.2 lcd_innit.h?修改 ?3.2.3 lcd.c修改 ?3.2.4?lcd_inut.c修改 ?3.3?主函數(shù)代碼 3.3.1 添加頭文件 3.3.2?LCD進(jìn)行初始化

    2024年02月16日
    瀏覽(24)
  • ESP32 入門筆記08:1.54寸(240*240)彩色TFT 顯示高清IPS LCD 屏幕 SPI接口

    ESP32 入門筆記08:1.54寸(240*240)彩色TFT 顯示高清IPS LCD 屏幕 SPI接口

    TFT 一般指薄膜晶體管。 薄膜晶體管(Thin Film Transistor,簡稱TFT)是一種器件。 ZJY154T-PG04厚.pdf ST7789VW芯片手冊.pdf (見資料下載處) ST7789屏幕驅(qū)動(dòng)電路圖 參考:ESP32 入門筆記01:樂鑫ESP32-DevKitC開發(fā)板信息、開發(fā)環(huán)境搭建以及學(xué)資料準(zhǔn)備 參考:使用DOIT ESP32 DEVKIT V1驅(qū)動(dòng)屏幕ST7789

    2023年04月12日
    瀏覽(152)
  • STM32 硬件SPI+DMA實(shí)現(xiàn)快速刷TFT屏

    STM32 硬件SPI+DMA實(shí)現(xiàn)快速刷TFT屏

    首先在TB上找一塊SPI驅(qū)動(dòng)的彩屏,下載商家提供的示例 例如我買的一款2.8寸SPI的TFT彩屏,商家提供的資料很齊全,模擬SPI和硬件SPI驅(qū)動(dòng)的程序都有 打開硬件SPI驅(qū)動(dòng)的工程,商家提供的代碼是SPI2驅(qū)動(dòng),想換成其他的SPI可以到SPI.c文件中更改 打開main.c,測試一下簡單顏色填充刷

    2024年04月15日
    瀏覽(114)
  • STM32直接驅(qū)動(dòng)TFT LCD,在LCD上根據(jù)數(shù)據(jù)繪制曲線

    快速畫點(diǎn)函數(shù)和繪制直線函數(shù)可以根據(jù)自己屏幕來編寫, void Port_DrawCurve(u8 x ,u16 value) 1、繪制曲線函數(shù)中的形參x,相當(dāng)于時(shí)間軸,每一次進(jìn)入函數(shù),x就會(huì)++; 2、在繪制曲線之前需要先清除3列,這樣繪制曲線就不用到最后了再整屏幕擦除。

    2024年02月15日
    瀏覽(20)
  • STM32 驅(qū)動(dòng)4.3寸TFT LCD 觸摸屏

    STM32 驅(qū)動(dòng)4.3寸TFT LCD 觸摸屏

    STM32的FSMC接口是并行總線接口,可以用于驅(qū)動(dòng)存儲(chǔ)芯片如FLASH/SRAM等,也可以用于驅(qū)動(dòng)并口LCD屏。觸摸屏是在顯示屏上覆蓋一層觸摸感應(yīng)的外屏,有單獨(dú)的接口輸出坐標(biāo)數(shù)據(jù)。 這里以STM32F103VET6開發(fā)板連接4.3寸TFT LCD觸摸屏,將正點(diǎn)原子的參考代碼,移植到STM32CUBEIDE開發(fā)環(huán)境,實(shí)

    2024年02月11日
    瀏覽(22)
  • STM32 FSMC接口驅(qū)動(dòng)4.3寸TFT LCD屏

    STM32 FSMC接口驅(qū)動(dòng)4.3寸TFT LCD屏

    STM32的FSMC接口是并行總線接口,可以用于驅(qū)動(dòng)存儲(chǔ)芯片如FLASH/SRAM等,也可以用于驅(qū)動(dòng)并口LCD屏。 這里以STM32F103VET6開發(fā)板連接4.3寸TFT LCD屏,將正點(diǎn)原子的參考代碼,移植到STM32CUBEIDE開發(fā)環(huán)境,實(shí)現(xiàn)TFT LCD屏的顯示。 TFT LCD模塊的管腳連接: 其中: LCD_CS是總線片選, WR/CLK是寫使

    2024年02月10日
    瀏覽(28)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包