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

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

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

【12月】大彩串口屏RT-Thread Nano STM32表驅動法產品應用開發(fā)

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

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

CMSIS-RTOS架構圖如下:

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

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

1、串口屏是什么?

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

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

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

1.1.1、大彩串口屏數據接收處理

收的部分昨天的文章已經介紹過了:

【12月】大彩串口屏RT-Thread Nano STM32表驅動法產品應用開發(fā)

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

/**
??*?@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?;
????/*進入中斷調用*/
????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?*/
???/*離開中斷調用*/
???rt_interrupt_leave();
??/*?USER?CODE?END?USART2_IRQn?1?*/
}

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

以使用RT-Thread為例,在進入中斷前調用:rt_interrupt_enter,在離開中斷前調用:rt_interrupt_leave。

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

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

tos_knl_irq_enter
tos_knl_irq_leave

在進入中斷處理函數調用tos_knl_irq_enter,在退出前調用tos_knl_irq_leave。

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

OSIntEnter();
OSIntExit();

在進入中斷處理函數調用OSIntEnter,在退出前調用OSIntExit

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

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

大彩串口屏提供了hmi_driver.c這個文件,這個文件提供了一系列串口命令驅動的函數,例如設置控件的值等等,這些 操作依賴于以下這些發(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位整數
#define?TX_16N(P,N)?SendNU16((uint16?*)P,N)??????????????//發(fā)送N個16位整數
#define?TX_32(P1)?TX_16((P1)>>16);TX_16((P1)&0xFFFF)?????//發(fā)送32位整數

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

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

那我們就直接實現SendChar這個函數就行了,以帶RT-Thread操作系統的STM32工程為例,編寫如下接口:

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

這里為什么要加上調度鎖呢??假設,你在界面上需要在不同任務里同時調用如下接口:

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();
}

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

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

初學RTOS會遇到各種各樣的坑,以上我提到的這些坑都是初學者碰得最多的,還有一些測試了很久都沒有被解決且難以復現的問題;最后都是在不斷的調試中找到分析問題的方法和解決技巧,但萬變不離其宗,我們要努力去Get最基礎的操作系統原理,在理論基礎知識的支撐上,才能更好的幫我們去分析問題和解決問題。

往期精彩

讓傳感器數據更直觀之LCD曲線顯示

【12月】大彩串口屏RT-Thread Nano STM32表驅動法產品應用開發(fā)

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

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

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

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

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

9月2日消息,不造車的華為或將催生出更大的獨角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關鍵字: 阿維塔 塞力斯 華為

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

關鍵字: AWS AN BSP 數字化

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

關鍵字: 汽車 人工智能 智能驅動 BSP

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

關鍵字: 亞馬遜 解密 控制平面 BSP

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

關鍵字: 騰訊 編碼器 CPU

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

關鍵字: 華為 12nm EDA 半導體

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

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

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

關鍵字: 通信 BSP 電信運營商 數字經濟

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

關鍵字: VI 傳輸協議 音頻 BSP

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

關鍵字: BSP 信息技術
關閉
關閉