www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > 單片機(jī) > 單片機(jī)
[導(dǎo)讀] 最近學(xué)習(xí)TFT顯示問題,在多種漢字顯示方面有點(diǎn)難,主要是字庫太大,幾個(gè)字庫就不得了。開始是使用SD卡向外部FLASH---W25X16寫,完全能夠完成。后來覺得這樣比較麻煩,有時(shí)候還沒有SD接口,于是打算用串

最近學(xué)習(xí)TFT顯示問題,在多種漢字顯示方面有點(diǎn)難,主要是字庫太大,幾個(gè)字庫就不得了。開始是使用SD卡向外部FLASH---W25X16寫,完全能夠完成。后來覺得這樣比較麻煩,有時(shí)候還沒有SD接口,于是打算用串口寫一下試一試,網(wǎng)上有很多人說會(huì)丟失數(shù)據(jù),在后面的試驗(yàn)中暫時(shí)沒有發(fā)現(xiàn)。


我是在我前段時(shí)間學(xué)習(xí)的UCGUI的基礎(chǔ)基礎(chǔ)上修改的。


主要功能是----啟動(dòng)開發(fā)板,首先寫入地址指令----必須十六進(jìn)制----比如---2A 23000500 0323 2A-----其中2A,23為驗(yàn)證碼,前后都有,第3,4位是地址碼,前面就表示將要寫入的起始地址是0x05*4096,第5,6位是為了寫入數(shù)據(jù)將要從起始地址連續(xù)擦除的扇區(qū)個(gè)數(shù),前面就表示0x0003個(gè)。

--------------主函數(shù)-------------------

int main(void)
{
uint16_t Erase_flag=0,i=0;
uint32_t Erase_adrr=0;
bsp_InitLCD();
bsp_InitTouch();
SPI_GPIO_Init(4);
NVIC_Configuration();
USART1_Config();
GPIO_Other_Config();

//TIM3_Init(84,1000); //實(shí)時(shí)檢測觸摸屏信息
GUI_Init();

GUI_SetBkColor(GUI_RED); //背景顏色
GUI_Clear();//用背景顏色清屏
GUI_CURSOR_Show(); //顯示光標(biāo)---大小32

GUI_SetFont(&GUI_Font32B_1); //設(shè)置字體
GUI_SetColor(GUI_BLACK); //設(shè)置文本顏色
GUI_DispStringAt("Addr:",10,50); //指定位置顯示指定文本
GUI_DispStringAt("Sect:",10,85);
GUI_DispStringAt("Nums:",10,120);
GUI_DispStringAt("Eras:",10,160);
GUI_DispStringAt("Test:",10,200);

while(1)
{
CK_flag=0; //串口接收數(shù)據(jù)是否是地址的的標(biāo)識判斷位---為0 表示后面接收的是地址
RS232_RX_CNT=0;//串口接收到地址數(shù)據(jù)時(shí)有作用,每次到這里串口接收緩存數(shù)組下表為0,表示后面將接收地址
addr_i=0; //串口接收到非地址數(shù)據(jù)的個(gè)數(shù),它的變化實(shí)在串口接收中斷函數(shù)中遞增,這里清零表示再次燒寫
Delay_Ms(1000);
GUI_SetFont(&GUI_Font32B_1);
GUI_SetColor(GUI_YELLOW);
GUI_DispStringAtCEOL("Wait Send Addr",50,10);
GUI_DispStringAt("Waits Addr",100,160);
GUI_DispHexAt(addr_Stop,200,50,6);//燒錄完成后根據(jù)真實(shí)燒錄的字節(jié)數(shù)計(jì)算出終止地址顯示出來
//下面這個(gè)while循環(huán),其目的是等待串口接收地址指令---指令需要16進(jìn)制發(fā)送---比如2A 23 00 50 00 01 23 2A---為一個(gè)完整指令
//2A 23 都為判斷標(biāo)識---第3,4表示起始地址--0x05*4096---第5,6數(shù)據(jù)表示從起始地址需要擦除多少個(gè)扇區(qū)來方便后面寫數(shù)據(jù)--0x0002個(gè)
while(!(RS232_RX_BUF[0]==0x2A)||!(RS232_RX_BUF[1]==0x23)||!(RS232_RX_BUF[6]==0x23)||!(RS232_RX_BUF[7]==0x2A));

addr=RS232_RX_BUF[2]*256+RS232_RX_BUF[3]; //addr為接收到的起始地址所在扇區(qū),也就是說是第幾個(gè)扇區(qū)
addr_Stop =addr*4096;//第幾個(gè)扇區(qū)對應(yīng)的扇區(qū)地址
Erase_adrr =addr; //起始地址也就是要擦除的扇區(qū)是第幾個(gè)
Erase_flag=RS232_RX_BUF[4]*256+RS232_RX_BUF[5];//要擦出的連續(xù)扇區(qū)個(gè)數(shù)

GUI_SetFont(&GUI_Font32B_1);
GUI_SetColor(GUI_CYAN);
GUI_DispHexAt(addr*4096,100,50,6);//顯示起始地址
GUI_DispDecAt(Erase_flag,100,85,4);//顯示要擦出的扇區(qū)個(gè)數(shù)
GUI_DispStringAt("Start Erase",100,160);
for(i=0;i {
Erase_adrr=addr+i;//扇區(qū)地址自增---這里自己試驗(yàn)的時(shí)候不小心把a(bǔ)ddr寫成了Erase_adrr,導(dǎo)致調(diào)試好久,最后一步一步添加驗(yàn)證才找到問題,不過在這個(gè)過程中加深了自己對FLASH的了解!
SPI_FLASH_SectorErase(4096*Erase_adrr);//擦出扇區(qū)

GUI_SetColor(GUI_WHITE);
GUI_DispDecAt(i+1,255,160,4);// 顯示實(shí)時(shí)擦除扇區(qū)狀態(tài)---第幾個(gè)
Delay_Ms(50);
}
GUI_SetColor(GUI_CYAN);
GUI_DispStringAt("Finis Erase",100,160);
GUI_SetFont(&GUI_FontHZ16);
GUI_SetColor(GUI_DARKMAGENTA);
GUI_DispStringAt("啊波次的樂我許與在 #*aA/字庫",100,210);//這里是用來測試前面的擦出是否完成---比如前面擦出了ASCII碼的字庫地址,其中的FLASH就不會(huì)顯示
CK_flag=10;//串口接收數(shù)據(jù)是否是地址的的標(biāo)識判斷位 ---為10 表示后面接收的是數(shù)據(jù)

GUI_SetFont(&GUI_Font32B_1);
GUI_SetColor(GUI_GREEN);
GUI_DispStringAtCEOL("Wait Send Data",50,10);

while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1) == 0); //這里等于是一個(gè)開關(guān)---用來等待串口傳輸完成,可以再串口上看到是否傳輸完成

GUI_SetColor(GUI_WHITE);
GUI_DispDecAt(addr_i,100,120,7);
GUI_SetFont(&GUI_FontHZ16);
GUI_SetColor(GUI_BLUE);
GUI_DispStringAt("啊波次的樂我許與在 #*aA/字庫",100,210);//這里是用來測試前面的燒寫是否完成---比如前面擦出了ASCII碼的字庫地址這里又重新燒錄了ASCII碼,其中的FLASH就會(huì)再次顯示
Delay_Ms(100);

GUI_TOUCH_Exec();
GUI_Exec();
}
}


--------------串口中斷函數(shù)------------

void USART1_IRQHandler(void)
{
uint8_t res;
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)//接收到數(shù)據(jù)
{
USART_ClearITPendingBit(USART1, USART_IT_RXNE);
res=USART_ReceiveData(USART1); //讀取接收到的數(shù)據(jù)
RS232_RX_BUF[RS232_RX_CNT++]=res;//接收數(shù)據(jù),主要保存地址指令
if(CK_flag==10) //串口接收數(shù)據(jù)
{
addr_i++; //燒寫地址自增---主函數(shù)中將在燒寫完成后顯示
SPI_FLASH_BufferWrite(&res,addr++,1); //燒寫接收到的數(shù)據(jù)到FLASH
}
if( RS232_RX_CNT==12)//無影響
RS232_RX_CNT=0;
}
}


---------------------實(shí)驗(yàn)實(shí)物圖片----------------------

----標(biāo)識顯示-----


-----指令---擦除0x000000起始的連續(xù)64個(gè)扇區(qū)


----上面擦除的是漢字庫的內(nèi)容---故下面漢字沒有顯示---


----重新燒錄漢字庫,一共261696個(gè)字節(jié)數(shù)據(jù)---大約64K---


-----燒錄完成,漢字又顯示了----


----指令----擦除0x050000起始的一個(gè)扇區(qū)---



-----擦除了ASCII碼地址內(nèi)容,故ASCII碼沒有顯示--



-----重新燒錄ASCII碼庫,一個(gè)4096個(gè)字節(jié)數(shù)據(jù),剛好4K---


----燒錄完成,ASCII碼再次顯示----


本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

中國北京(2025年9月10日)—— 業(yè)界領(lǐng)先的半導(dǎo)體器件供應(yīng)商兆易創(chuàng)新GigaDevice(股票代碼 603986)亮相于深圳國際會(huì)展中心舉辦的第26屆中國國際光電博覽會(huì)(展位號:12C12),全面展示GD25 SPI...

關(guān)鍵字: 光通信 MCU Flash

在嵌入式系統(tǒng)中,F(xiàn)lash存儲(chǔ)器因其非易失性、高密度和低成本特性,成為代碼存儲(chǔ)和關(guān)鍵數(shù)據(jù)保存的核心組件。然而,MCU驅(qū)動(dòng)Flash讀寫時(shí),開發(fā)者常因?qū)τ布匦岳斫獠蛔慊虿僮髁鞒淌韬觯萑胄阅芟陆?、?shù)據(jù)損壞甚至硬件損壞的陷...

關(guān)鍵字: MCU驅(qū)動(dòng) Flash

深圳2025年4月24日 /美通社/ -- 4月23日,2025上海國際車展盛大啟幕,全球汽車產(chǎn)業(yè)的目光聚焦于這場科技與創(chuàng)新的盛宴。在眾多展示亮點(diǎn)中,汽車AI+應(yīng)用無疑是最大的熱點(diǎn)之一,“駕控超級大腦”技術(shù)概念、車機(jī)交互...

關(guān)鍵字: GB EMMC Flash PS

在自動(dòng)駕駛、機(jī)器人與工業(yè)檢測領(lǐng)域,激光雷達(dá)作為環(huán)境感知的核心傳感器,其技術(shù)路線正從機(jī)械式向固態(tài)化演進(jìn)。MEMS、OPA與Flash作為固態(tài)激光雷達(dá)的三大主流架構(gòu),分別通過微機(jī)電系統(tǒng)、光學(xué)相控陣與泛光面陣技術(shù)實(shí)現(xiàn)掃描與探測...

關(guān)鍵字: MEMS OPA Flash

在嵌入式系統(tǒng)開發(fā)中,外部存儲(chǔ)介質(zhì)的選擇和管理至關(guān)重要。SPI Flash以其高容量、低功耗、高速率等特點(diǎn),成為眾多嵌入式設(shè)備的首選存儲(chǔ)方案。然而,如何高效管理SPI Flash存儲(chǔ),避免數(shù)據(jù)丟失、提高讀寫性能,是開發(fā)者必...

關(guān)鍵字: 嵌入式SPI Flash LittleFS

STM32單片機(jī)作為一種高性能、低功耗的嵌入式微控制器,廣泛應(yīng)用于各種電子設(shè)備中。在實(shí)際應(yīng)用中,為了擴(kuò)展存儲(chǔ)空間或?qū)崿F(xiàn)數(shù)據(jù)的持久化存儲(chǔ),經(jīng)常需要使用外部FLASH存儲(chǔ)器。本文將詳細(xì)介紹STM32單片機(jī)如何讀寫外部FLAS...

關(guān)鍵字: STM32 Flash

串口全稱是串行接口(Serial Interface),串口通訊指僅用一對傳輸線就能將數(shù)據(jù)以比特位進(jìn)行傳輸?shù)囊环N通訊方式。盡管串口通訊必按字節(jié)傳輸?shù)牟⑿型ㄐ怕?,但是串口可以在僅用兩根線的情況下完成數(shù)據(jù)傳輸,大大降低了成本...

關(guān)鍵字: 串口 UART
關(guān)閉