當(dāng)前位置:首頁 > 公眾號精選 > 嵌入式云IOT技術(shù)圈
[導(dǎo)讀]這個月20號準(zhǔn)備去參加RT-Thread一年一度的RDC開發(fā)者大會,順便會帶上我們公司的產(chǎn)品,這個產(chǎn)品就用到了大彩串口屏,所以昨天我也寫了一篇表驅(qū)動法在大彩串口屏上的應(yīng)用。

這個月20號準(zhǔn)備去參加RT-Thread一年一度的RDC開發(fā)者大會,順便會帶上我們公司的產(chǎn)品,這個產(chǎn)品就用到了大彩串口屏,所以昨天我也寫了一篇表驅(qū)動法在大彩串口屏上的應(yīng)用,文章如下:

【12月】大彩串口屏RT-Thread Nano STM32表驅(qū)動法產(chǎn)品應(yīng)用開發(fā)

接下來我會做一個產(chǎn)品級的基于大彩串口屏的開源項目,用的大彩串口屏型號是:DC80480F070_6111_ON,128M,如下,這是一個7寸屏幕,分辨率800*480;當(dāng)然價格也是超級便宜的了,入手價也就180塊錢,今年屏瘋狂漲價,這個價格已經(jīng)很良心了。

近年來,RTOS在嵌入式系統(tǒng)設(shè)計中的主導(dǎo)地位也越來越明確,越來越多的工程師選用RTOS來完成產(chǎn)品功能的開發(fā);從最熟悉不過的ucos,到后來的freertos、rt-thread、Tencentos tiny等等,以使用者的角度,我在產(chǎn)品開發(fā)上用過的RTOS非常多;但最后得出一個結(jié)論,只要通一個,其它則一通百通;正因為RTOS種類越來越多,所以ARM公司推出了CMSIS-RTOS,為統(tǒng)一操作系統(tǒng)、降低嵌入式門檻而發(fā)布的操作系統(tǒng)標(biāo)準(zhǔn)軟件接口,CMSIS-RTOS的作用用通俗的話來講就是:勞資不管你是什么RTOS,你只需要學(xué)習(xí)我的CMSIS-RTOS怎么用就可以了,但前提是你要把那些RTOS的接口適配到CMSIS-RTOS上,然后你就可以拋棄那些含義相同,寫法不同的RTOS API,通通都可以不用它們,只用CMSIS-RTOS的API接口即可!

CMSIS-RTOS架構(gòu)圖如下:

詳情學(xué)習(xí)可以參考世偉兄之前在騰訊實習(xí)的時候周末寫的文章:

RTOS內(nèi)功修煉記(八)— CMSIS RTOS API,內(nèi)核通用API接口

1、串口屏是什么?

串口屏,在百度百科上是這么來解釋的:

一套由單片機或PLC帶控制器的顯示方案,顯示方案中的通訊部分由串口通訊,UART串口或者SPI串口等;它由顯示驅(qū)動板、外殼、LCD液晶顯 示屏三部分構(gòu)成。接收用戶單片機串口發(fā)送過來的指令,完成在LCD上繪圖的所有操作。

1.1、大彩串口屏的數(shù)據(jù)收發(fā)接口

1.1.1、大彩串口屏數(shù)據(jù)接收處理

收的部分昨天的文章已經(jīng)介紹過了:

【12月】大彩串口屏RT-Thread Nano STM32表驅(qū)動法產(chǎn)品應(yīng)用開發(fā)

是通過一種類似消息機制的隊列來進(jìn)行實現(xiàn),然后將隊列里的數(shù)據(jù)進(jìn)行拼接加工后滿足大彩科技定義的一種協(xié)議指令集,所以中斷服務(wù)函數(shù)實現(xiàn)如下,這樣就可以持續(xù)的來接收串口屏回復(fù)的指令:

/**
??*?@brief?This?function?handles?USART2?global?interrupt.
??*/
void?USART2_IRQHandler(void)
{
????/*?USER?CODE?BEGIN?USART2_IRQn?0?*/
????uint32_t?i?;
????uint32_t?uart2_dma_rxlen?;
????/*進(jìn)入中斷調(diào)用*/
????rt_interrupt_enter();
????if(__HAL_UART_GET_IT_SOURCE(&huart2,?UART_IT_IDLE)?!=?RESET)
????{
????????__HAL_UART_CLEAR_IDLEFLAG(&huart2);
????????HAL_UART_DMAStop(&huart2);
????????uart2_dma_rxlen?=?HMI_LCD_U2_BUFFER_SIZE?-?(__HAL_DMA_GET_COUNTER(huart2.hdmarx));
????
????????for(i?=?0;?i?????????{
????????????queue_push(HMI_LCD_Handler.HMI_LCD_U2_Buffer[i]);
????????}

????????__HAL_UART_ENABLE_IT(&huart2,?UART_IT_IDLE);
????????HAL_UART_Receive_DMA(&huart2,?HMI_LCD_Handler.HMI_LCD_U2_Buffer,?HMI_LCD_U2_BUFFER_SIZE);
????}

????/*?USER?CODE?END?USART2_IRQn?0?*/
????HAL_UART_IRQHandler(&huart2);
????/*?USER?CODE?BEGIN?USART2_IRQn?1?*/
???/*離開中斷調(diào)用*/
???rt_interrupt_leave();
??/*?USER?CODE?END?USART2_IRQn?1?*/
}

以下是大彩科技提供給開發(fā)者的MCU例程文檔中接收指令集的流程圖:

以使用RT-Thread為例,在進(jìn)入中斷前調(diào)用:rt_interrupt_enter,在離開中斷前調(diào)用:rt_interrupt_leave。

以上描述來自RT-Thread文檔中心。

比如TencentOS tiny也提供了一組API:

tos_knl_irq_enter
tos_knl_irq_leave

在進(jìn)入中斷處理函數(shù)調(diào)用tos_knl_irq_enter,在退出前調(diào)用tos_knl_irq_leave。

又比如UCOSIII也提供了一組API:

OSIntEnter();
OSIntExit();

在進(jìn)入中斷處理函數(shù)調(diào)用OSIntEnter,在退出前調(diào)用OSIntExit

其它的RTOS也是類似的,這里就不多做介紹了,有興趣可以自己測試和研究。

1.1.2、大彩串口屏數(shù)據(jù)發(fā)送處理

大彩串口屏提供了hmi_driver.c這個文件,這個文件提供了一系列串口命令驅(qū)動的函數(shù),例如設(shè)置控件的值等等,這些 操作依賴于以下這些發(fā)送接口:

#define?TX_8(P1)?SEND_DATA((P1)&0xFF)????????????????????//發(fā)送單個字節(jié)
#define?TX_8N(P,N)?SendNU8((uint8?*)P,N)?????????????????//發(fā)送N個字節(jié)
#define?TX_16(P1)?TX_8((P1)>>8);TX_8(P1)?????????????????//發(fā)送16位整數(shù)
#define?TX_16N(P,N)?SendNU16((uint16?*)P,N)??????????????//發(fā)送N個16位整數(shù)
#define?TX_32(P1)?TX_16((P1)>>16);TX_16((P1)&0xFFFF)?????//發(fā)送32位整數(shù)

上面這些接口,最終我們需要提供這樣一個發(fā)送單個字節(jié)的函數(shù):

/*!?
*??\brief??發(fā)送一個字節(jié)
*??\param??c?
*/
void?SEND_DATA(uint8?c)
{
????SendChar(c);
}

那我們就直接實現(xiàn)SendChar這個函數(shù)就行了,以帶RT-Thread操作系統(tǒng)的STM32工程為例,編寫如下接口:

void?SendChar(uint8_t?data)
{
????/*調(diào)度器上鎖*/
????rt_enter_critical();
????HAL_UART_Transmit(&huart2,?&data,?1,?1000);
????while(__HAL_UART_GET_FLAG(&huart2,?UART_FLAG_TXE)?!=?SET);
????/*調(diào)度器解鎖*/
????rt_exit_critical();
}

這里為什么要加上調(diào)度鎖呢??假設(shè),你在界面上需要在不同任務(wù)里同時調(diào)用如下接口:

void?SetTextValue(u16?screen_id,?u16?control_id,?u8?*str)
{
????BEGIN_CMD();
????TX_8(0xB1);
????TX_8(0x10);
????TX_16(screen_id);
????TX_16(control_id);
????SendStrings(str);
????END_CMD();
}

這個接口是用來在給界面上某個文本控件顯示字符串用的;當(dāng)多個任務(wù)同時調(diào)用該接口時,這樣不就是我們之前談的打架問題了嗎?在多任務(wù)系統(tǒng)中,這就是一種潛在的風(fēng)險,當(dāng)一個任務(wù)在使用某個資源的過程中,還沒有完全結(jié)束對資源的訪問時就被打斷了,這樣就會出現(xiàn)一些奇奇怪怪的問題,比如之前我用OLED結(jié)合RTOS編程時候也會出現(xiàn)像屏幕花屏的現(xiàn)象,這里我采用的方法是直接在底層的接口函數(shù)處加上調(diào)度鎖,以防止這種情況發(fā)生,當(dāng)然,還有另外一種方法可以實現(xiàn),那就是互斥鎖。

至于互斥鎖該怎么用,打開各大RTOS的API參考手冊,上面會詳細(xì)的告訴你如何創(chuàng)建,如何使用,照著做就是了,這里就不多說了。

初學(xué)RTOS會遇到各種各樣的坑,以上我提到的這些坑都是初學(xué)者碰得最多的,還有一些測試了很久都沒有被解決且難以復(fù)現(xiàn)的問題;最后都是在不斷的調(diào)試中找到分析問題的方法和解決技巧,但萬變不離其宗,我們要努力去Get最基礎(chǔ)的操作系統(tǒng)原理,在理論基礎(chǔ)知識的支撐上,才能更好的幫我們?nèi)シ治鰡栴}和解決問題。

往期精彩

讓傳感器數(shù)據(jù)更直觀之LCD曲線顯示

【12月】大彩串口屏RT-Thread Nano STM32表驅(qū)動法產(chǎn)品應(yīng)用開發(fā)

開源作品:基于TencentOS tiny英國達(dá)特甲醛探測儀產(chǎn)品級開發(fā)(二)

整理了很久之前在碼云/Github/CSDN上收藏的嵌入式產(chǎn)品級項目分享開源

覺得本次分享的文章對您有幫助,隨手點[在看]并轉(zhuǎn)發(fā)分享,也是對我的支持。

免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺僅提供信息存儲服務(wù)。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!

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

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險,如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉