回覆列表
  • 1 # 使用者55086564886

    這種現象很正常,可能是每一個嵌入式從業者都可能遇到,因為嵌入式軟體的難度不是線性增加,而是陡然提升的。對於接觸過51微控制器的開發者來說,在學習STM過程中掌握GPIO,串列埠,時鐘,定時器等模組並不困難,雖然配置的暫存器更多,功能也更復雜,但其實思路是一脈相承的,有這個基礎在,而且這些模組本身並不複雜,所以你掌握的很順利。

    至於你學習FSMC驅動LCD卡住,主要原因如下:

    1.對FSMC模組執行流程和工作原理不理解

    2.對裝置的驅動實現沒有清晰認知

    在51微控制器學習中雖然接觸了串列埠,甚至SPI和I2C介面這些知識,但只是學會了用,沒有系統理解背後關於序列資料介面和並行資料介面的知識,FSMC就是典型的並行資料介面(資料的各位同時進行傳輸),可以簡單的理解寫入流程如下:

    1. 程式碼在寫入指定bank地址的值後,FSMC模組控制並行的輸出到DATA引腳上[15:0]。

    2. FSMC模組根據當前配置,產生一定的時序(寫入時序) -- 暫存器/RAM片選,讀寫使能,時鐘訊號。

    3. LCD根據時序將DATA引腳上的電平轉化為資料賦值到相應的暫存器或者資料RAM中,並顯示結果。

    理解了這些,在結合STM32的外設配置的基本知識,就能夠理解GPIO初始化,FSMC模組配置,寫資料/地址介面這部分程式碼的實現了。

    這些介面理解了,剩下的難點其實就是LCD內部暫存器的配置那一串冗長的暫存器配置程式碼了,在不理解LCD內部原理和初始化流程的情況如何實現其實是很困難的(包括現在的我),但這部分其實在購買相應廠商的LCD螢幕時都會提供相應的暫存器初始化引數表,大概類似於如下暫存器列表:

    REG, VALUE

    0x00E3, 0x3008

    0x00E7, 0x0012

    ....

    0x00EF, 0x1231

    如果已經理解上面封裝的介面,直接按照順序呼叫就可以了,如

    LCD_WR_CMD(0x00E3, 0x3008);

    不過學會檢視LCD的驅動手冊有時也是必要的,因為官方給的是標準配置,在某些情況下可能不滿足需求,就需要自己檢視暫存器去修改配置,成功驅動點亮了LCD螢幕,下面就可以在螢幕上顯示文字圖片了。到這一步基本完成了驅動,但對於微控制器的影象顯示和應用其實才剛剛開始,後續就是要了解學習StemWin,掌握微控制器實現圖形介面的功能,理解影象顯示的編碼,掌握中英文漢字字型檔的知識,這就是應用方面的問題了,不在詳述。

    其實對於大部分外設,如FLASH,LCD,PHY,EPPROM,CMOS等裝置內部都有一系列用於訪問狀態和配置的暫存器,這部分知識零碎,一般也很難系統學習,不過在你多學習掌握幾個外設晶片後,自然能夠總結解決問題的經驗。上面我講解了FSMC驅動實現的思路和外設驅動配置的流程,對你理解FSMC模組,或者LCD驅動部分也許有用,但是如果後面用到乙太網,需要配置PHY模組驅動和介面時,或者用到USB協議,需要掌握USB模組驅動時,這些涉及複雜時序和通訊協議介面時,還是會覺得不得入門,可能會卡的時間比FSMC更久。事實上,我在最初接觸FSMC的時候,也看的很迷茫,上千行程式碼且缺少註釋,根本不是那個水平的我能夠掌握理解的,現在我能夠理解這部分知識,也不過是熟能生巧而已。

    在嵌入式入門時遇到複雜驅動裝置時,如PHY,TFT-LCD,CMOS,USB時,網上或開發板提供的驅動程式碼直接用就可以,這在初期並沒有任何問題,不要去深究內部的原理。事實上在初期去深究這些程式碼是很浪費時間的事,但遇到簡單的驅動,如SPI-FLASH,感測器等時,就可以先總結積累經驗,有一定基礎後,在反過來去理解複雜的驅動程式碼。這種經驗在完成實際專案時很重要,如遇到複雜模組BLE,ETH,USB等不理解,或者複雜如LWIP,USB協議不理解,千萬不要直接拿著原始碼去深究,這是事倍功半的事,先仿照官方程式碼/開源方案配合其它模組把框架和功能實現,在後期除錯時遇到模組相關問題,根據之前積累的經驗,結合資料,在反過來單步除錯和理解,這樣可以抓住和應用相關的重點分析解決,避免了進度的拖延,而且隨著專案積累的經驗水平,也可以更有目的的針對理解解決。

    另外嵌入式現在資料真的很多,不過如果學習stm32的話,比較推薦的就幾個,中/英文版本的<STMxxx參考手冊>, <Cortex-M3權威指南>, 以及你使用開發板的應用手冊,<C Primer Plus>和MDK中的關於彙編和編譯選項的說明,如果用到某些外設晶片,在加上對應的晶片手冊,尤其是STM的參考手冊,沒有比它更全面,準確,細緻的講解STM系列的晶片,很多時候看其它綜合性的文件說明,真不如花時間去理解掌握參考手冊。

  • 2 # 滴逃逃

    LCD有許多種類。如筆段式、字元型、圖形點陣。

    圖形點陣LCD畫素點大小相同,均勻排列,透過畫素點的明暗控制可組合出圖形、中文等顯示。

    字元型點陣LCD畫素點大小相同,按字元寬度高度,分塊兒均勻排列,支援數字和英文字母等ASCII碼字元的顯示。這兩種LCD畫素點很多,行列線也就比較多,一般都透過專用的掃描晶片來控制。成本也比較高。

    筆段式LCD則是一種訂製的、可顯示相對固定內容的液晶屏。成本很低,筆段數目不多。也有專門的掃描晶片可以控制。一般用在對價格敏感的小家電等產品中,如早期的電子手錶螢幕、隨聲聽顯示窗、電話機顯示窗。通常這類產品也有智慧化的要求,微控制器作為控制器也很多,相應的推出帶筆段控制型LCD的微控制器是市場的選擇。

    如MSP430X4xx系列微控制器支援56-160段的LCD顯示,直接產生交變的驅動訊號和掃描時序,省掉掃描晶片以降低整機成本。

  • 中秋節和大豐收的關聯?
  • 石頭是什麼原料構成的?