目前分類:嵌入式系統 (51)

瀏覽方式: 標題列表 簡短摘要

 🥸 最近在本園區所開設的 「嵌入式系統基礎原理與實務課程」內,和幾位工程師學員講解到GPIO的部分,頗有感觸。

 
GPIO (General-Purpose Input/Output)的應用看似簡單,但其背後的原理可有著不少學問。
文章標籤

阿良 (孫文良) 發表在 痞客邦 留言(0) 人氣()

‼ 在此推廣一下 適合初學者的【嵌入式系統基礎原理與實務課程】‼

👉 本po文的影片內容為一個簡易的小範例,由8051 MCU GPIO之Output(輸出)驅動LED完成簡易跑馬燈功能。

影片內容包含從操作KEIL C51 IDE的免費評估版對程式碼進行編譯,並且藉由 ISP (In System Programming) 燒錄方式(便宜又好用) 對8051 MCU進行燒錄並觀察執行結果。

 


文章標籤

阿良 (孫文良) 發表在 痞客邦 留言(0) 人氣()

課程涵蓋內容如下:

  • 韌體程式常用程式語言
    • 組合語言指令集與MCU架構簡介
      • 以架構簡潔清晰的Intel MCS51指令集為教材範例
    • C語言基礎複習
    • 高階與低階語言(C語言 與 組合語言Assembly)差異介紹與實驗驗證
       
  • STM32 MCU常見開發環境操作教學
    • ARM KEILC 評估版 整合開發環境(IDE)操作教學
    • STM32CubeMX工具與STM32Cube IDE操作教學
    • 其它IDE簡介(如 IAR)
       
  • 中斷(Interrupt)機制
    • ARM Cortex-Mx系列搭配之NVIC (嵌套式向量中斷控制器)介紹
    • 中斷優先權實驗
       
  • 周邊裝置驅動原理與實作
    • GPIO(通用輸入/輸出介面)
      • GPIO架構與驅動原理
        • IO Port結構原理、Open-drain(開汲極)、Push-Pull output(推挽式輸出)、Pull-up、Pull-down等相關硬體電路原理
      • 外部簡易電路整合應用設計原理
      • 輸出驅動實驗(GPO, General Purpose Output)
      • 輸入驅動實驗(GPI, General Purpose Input)
    • Timer/Counter(計時器/計數器
      • 計時器
      • 計數器
      • 輪詢與中斷應用實驗
    • UART (通用非同步串列傳輸通訊介面
      • UART之協定原理
      • 輪詢與中斷應用實驗 (與其它具備UART介面之設備進行通訊實驗
      • RS232與RS485纜線介紹
        • 電氣位準轉換原理
        • 相關IC介紹
    • ADC(類比轉數位轉換器
      • 輪詢與中斷機制  搭配 亮度感測器 進行實驗
    • I²C串列通訊介面
    • SPI串列通訊介面
    • 其它各種周邊裝置、I/O介面或協定(PWM、1-wire、DAC、DMA...)
文章標籤

阿良 (孫文良) 發表在 痞客邦 留言(0) 人氣()

想當初就讀大學時期,除了堅持學業成績常保持在第一之外,幾乎每個寒暑假、甚至修課讀書以外的時間都自願在實驗室做專題專案度過(坦白說比起多數人的大學生活來說,真的不輕鬆,但很充實,將碩班生活提前到大學時期來過),

當時主要為了想要多參加教育部競賽,以便推甄名校大學的碩士班。沒想到後來到了所謂名校大學,看到不少名校大學大學部直升的學生幾乎是不用花太多時間做專題,更不用積極參加校外全國競賽,很輕易就可以直升本系碩士班( (有些系所真的只看考生大學就讀的校名、系名,或者看是否有認識的教授推薦,就佔了大部分的錄取因素,但如此的作法確實也錄取了許多大學時期不太用心在專業方面的直升學生,說真的不少人的專業實力在大學時期是真的沒什麼累積,就連學科理論基礎也未必比較有概念),坦白說,時至今日,個人對某些不太客觀的推甄錄取標準現象仍感到有些感慨。

分享一下10年前,於大二升大三的暑假時期,在實驗室開發的一個小作品(印象中這個小作品後來沒有拿去正式參賽,後續我和同學們還做了另外四至五個作品專案去參加教育部舉辦的競賽,也在大三這一年內,拿到了4個教育部競賽獎項),這是一個8051 MCU為核心的PCB電路,包含MCU韌體程式的撰寫(使用KEILC開發環境)、電路設計、PCB電路Layout和製作。這是就讀大學時期的第一個PCB電路  (記得在更久以前,在就讀高職時期,就有做過小型電子琴電路,當時也是洗板子,但印象中當時Layout好像是用手繪的方式..所以當時的電子琴電路的走線沒這麼筆直)。

而當時還不流行Arduino這類的現成MCU板子,所以除了韌體程式和PC端GUI程式的撰寫之外,我們大學那間實驗室的電路板幾乎都是學生們自己做電路設計、Layout設計 和 洗版製作的。

主要透過Counter計數來自8051 MCU外部的紅外線遮斷模組的訊號,並透過GPIO顯示於LCD,同時也藉由UART輸出串列資料,再藉由ICL232  IC將8051 UART訊號電氣位準轉換為RS232 Cable訊號位準,將資料傳輸資料至PC端由GUI程式做後續應用處理。

文章標籤

阿良 (孫文良) 發表在 痞客邦 留言(0) 人氣()

下方影片為32bits ARM Cortex-M CPU based STM32 MCU韌體開發課程 之 中斷(Interrupt)機制: NVIC基本原理與應用 教材實驗影片

課程內容將介紹其基礎原理觀念 與 實驗實作過程: 在基礎觀念原理方面,將會教導NVIC (Nested Vectored Interrupt Controller)中斷機制原理基本觀念,並說明何謂Interrupt Vector Table (中斷向量表);何謂Nesting、Tail-Chaining、Late-Arriving等feature;何謂Interrupt priority grouping、Preemption priority (group priority)、Subpriority、EXTI與NVIC實驗較相關的內容等等,並帶領學員觀看ST官方技術文件之相關對應內容;

而在實作實驗的部分,將教導學員使用STM32CubeMX tool搭配IDE如KEILC(MDK ARM)或者STM32CubeIDE進行操作,以及介紹由講師所提供的範例程式中的重要API函數與流程。


將UART preemption priority設置較高,UART exception搶占EXTI exception flow

文章標籤

阿良 (孫文良) 發表在 痞客邦 留言(0) 人氣()

很多人都會迷信於 平台或技術的 新舊 這種表面來主觀判斷其好壞,而不知其實際客觀的狀況。

除了Intel在1981年出產的8051 MCU的同族加強版至今依然有許多產品在用,

事實上,就連MOS公司在1975年出的6502 Microprocessor系列,現在也還是有不少產品使用。

幾年前有和一間IC設計公司主管討論到這方面;而最近一位80即將任職韌體工程師的學員的公司也會用到6502,主要以 組合語言(Assembly Language) 進行其韌體程式開發。

其實,無論平台新舊,有許多基礎原理都是直接相關甚至共通的。如果舊的(架構較簡易的)都還不會,以為直接碰新的平台就能學的紮實? 這是許多學校老師的天大誤會  (當然也有業界人因為看得不夠多,也有可能會有類似的觀念與迷思)。

文章標籤

阿良 (孫文良) 發表在 痞客邦 留言(0) 人氣()

承接中篇文章,下篇的內容如下: 

另外有些人可能會認為,被燒錄到裝置產品內的軟體都能叫做韌體,我甚至看過有人認為開發Android 裝置的上層軟體也是在做嵌入式系統韌體開發,對於這種觀念我個人是不同意的。因為畢竟只要是能執行軟體的產品 (有電腦系統在內),有什麼不是裝置呢? 即便個人電腦PC也是裝置的一種。其實或許應該以軟體的所在層次(Level)去區分,會較客觀一些。

無論硬體平台是SoC或者MCU;無論產品類型是小體積的裝置還是PC或家電;無論主要系統軟體是屬於有無OS的類型、無論軟體單元/種類是Linux kernel、BIOS、bootloader等等,只要是位於底層層次的軟體(存取CPU、周邊暫存器記憶體的層次的軟體,我認為即可稱為韌體),撰寫韌體是需要考量到硬體狀況 (如果是控制I/O周邊用的韌體,時常還要考量及整合電腦晶片外部的電子電路設計)。

當然也有因為硬體架構較單純所以將應用程式和韌體混和撰寫的狀況,例如早期標準(至今仍可用於嵌入式基礎教學)的8051 MCU晶片的程式開發即是這種狀況(較早期的MCU硬體架構單純、資源較有限,不一定適合去將其軟體區分出太多高低階層次)。

 

文章標籤

阿良 (孫文良) 發表在 痞客邦 留言(0) 人氣()

承接上篇文章,中篇的內容如下: 

所以,若要精確一點來說(說好的初學者科普呢),個人認為何到底謂韌體、何謂軟體,其實應該以該軟體所在的層次來區分,而不是以平台來區分。

以許多 初學者 或 學生 時常撰寫non-OS類型的Arduino軟體為例,當要驅動GPIO所對應的某支腳位輸出高電位時,如果使用的方式是是直接在Arduino IDE中去呼叫digitalWrite(Pin_Number, HIGH); 若以嚴格&精確一些的標準來說,呼叫函數的本身的這層程式碼的範疇,算是應用軟體層面(屬於 只負責下參數給這個現成的函數來應用這個函數,但看不到這個函數的內容是如何、實際上是如何接觸操作了什麼硬體暫存器 的層次)。 而 真正去實現digitalWrite這個函數的內容程式碼(對GPIO的暫存器作操作存取)的部分才是意義上較精確的韌體開發。

這時有些人可能會混淆,認為上述Arduino例子的digitalWrite(Pin_Number, HIGH)既然會直接驅動硬體(會讓Arduino板子輸出數位邏輯系統的高電位5V或3.3V(視MCU款式而定)訊號,那呼叫digitalWrite的層次的軟體怎麼會不屬於韌體呢?  

如果有這個疑問的朋友,可以自己想想,有什麼APP的最終功能目的不是驅動硬體動作呢? 例如你使用LINE APP發送文字訊息給朋友,此時手機畫面的硬體、手機通訊相關硬體其實都有做事(work),但難道LINE APP是韌體類的程式嗎?  既然世界上所有的軟體本來就都是為了驅動電腦硬體做事(以達到我們人類所指定的功能),那又何必區分獨立出韌體這個名詞呢?  所以,韌體應該必須是有其特定意義的。

文章標籤

阿良 (孫文良) 發表在 痞客邦 留言(0) 人氣()

【若需要嵌入式系統技術輔導課程 可來信洽談合作方式: iws6645@gmail.com,亦可先參考這篇介紹文章

說明: 

撰寫此系列文章的目的,主要是希望能讓初學者(甚至非本科系的朋友)能了解一些關於韌體的基本觀念,所以不會使用太艱澀的方式來描述 (盡量)。

(但是後來發現這些內容對有些初學者而言可能還是會有點艱澀,所以順便廣告一下,對於許多初學者來說,有些內容或許真的需要來上課才比較容易更清楚和容易吸收,若需要課程請洽最下方的email)。

某些人對於這些專業名詞的定義和觀念或許有些差異,在這文章中,我將以個人長期以來對於MCU(微控制器,也就是單晶片微電腦) 與 SoC(系統晶片)的 軟韌體程式開發經驗(包含non-OS無作業系統類型 和 OS based有作業系統類型)來進行分析和說明。

文章標籤

阿良 (孫文良) 發表在 痞客邦 留言(1) 人氣()

歡迎透過合法的方式分享此文內容,若要轉載/轉貼,請明確貼出此原始連結並標示作者基本資訊請勿抄襲及非法轉貼(例如擷取內文但並未註明出處)

STM32_UART基礎教學之部份簡介(主要以簡易的Receive data應用為範例作教學)。

課程會介紹關於UART的基礎使用方式,包含Polling(輪詢)和interrupt(中斷)機制的差異和基本使用觀念。

而在中斷的方面,

下列影片1的情況是因為我們 沒有 讓CPU或DMA去讀(read) Receive Data Register之中的接收資料,也沒有去對RXNE flag寫0,所以RXNE flag沒有被清除,導致UART ISR flow不斷地被觸發。

文章標籤

阿良 (孫文良) 發表在 痞客邦 留言(0) 人氣()

歡迎透過合法的方式分享此文內容,若要轉載/轉貼,請明確貼出此原始連結並標示作者基本資訊請勿抄襲及非法轉貼(例如擷取內文但並未註明出處)

STM32 MCU的多數手冊都寫得不錯,但偶爾似乎還是難免會有些小問題。

今天下午看到一個關於STM32 MCU RM0090 Reference manual(STM32F405/415, STM32F407/417, STM32F427/437 and STM32F429/439 advanced Arm®-based 32-bit MCUs)  Rev 19的973~974頁USART Receiver(章節30.3.3)的Start bit detection和Character reception這兩個連續的小節的內容中,對於RXNE flag被set(被設立為1)的條件方面的文意內容的矛盾。

下列兩張圖皆為該ST手冊[1]的內容, 請注意被紅線框起的部分 :

 

文章標籤

阿良 (孫文良) 發表在 痞客邦 留言(0) 人氣()

使用STM32CubeMX + KeilC(MDK-ARM) 的 STM32 (ARM based MCU)韌體開發環境建置開課囉

主要包含以下內容:

- STM32CubeMX這款initialization code generator工具的基本使用操作

- KeilC(MDK-ARM)IDE 基本下載安裝(評估版)與使用操作

- 兩種韌體燒錄方式教學

文章標籤

阿良 (孫文良) 發表在 痞客邦 留言(0) 人氣()

歡迎透過合法的方式分享此文內容,若要轉載/轉貼,請明確貼出此原始連結並標示作者基本資訊請勿抄襲及非法轉貼(例如擷取內文但並未註明出處)

近期在對擔任韌體開發工程師的學員進行授課的過程中,以8051 MCU作為實驗目標教材,介紹到了8051 MCU四組I/O Port的內部硬體結構和運作原理,

 

8051_PORT0_ARCH

尤其是Port0的部分,因為其兼顧作為8051存取外部記憶體所使用的Address/Data bus的IO Port,當談到如何將其作為一般用途的IO Port(GPIO)時,也會介紹到Open-drain(開汲極)與外加Pull-up resister的相關原理,也會藉由ST官方的STM32 MCU AN4899這份AP note資料手冊的GPIO內部結構圖來額外補充Push-Pull output(推挽式輸出)的概念。

文章標籤

阿良 (孫文良) 發表在 痞客邦 留言(0) 人氣()

歡迎透過合法的方式分享此文內容,若要轉載/轉貼,請明確貼出此原始連結並標示作者基本資訊請勿抄襲及非法轉貼(例如擷取內文但並未註明出處)

許多人都聽說過嵌入式系統,包含許多學生、教師甚至是從業工程師,即便這是個在工程界常聽到的名詞,但卻常常有人對此名詞感到困惑。

但到底什麼是嵌入式系統呢?

我們可以看一下Wikipedia上面的定義說明(該內容重點也符合英國電機工程師協會的定義): 

An embedded system is a computer system—a combination of a computer processor, computer memory, and input/output peripheral devices—that has a dedicated function within a larger mechanical or electrical system.

文章標籤

阿良 (孫文良) 發表在 痞客邦 留言(0) 人氣()

本區於之前已開設之課程:

(一) 嵌入式系統基本理論觀念與MCU基礎實務課程(包含業界職缺介紹)

-> 以麻雀雖小五臟俱全之8051 MCU為實驗教材(以紮實基礎理論與實務觀念為課程核心,對於初學者而言,其實不會有8051太老舊的問題,希望初學者奠定紮實基礎以利初學者學習與至相關產業就業)。

(1) 嵌入式系統基本理論觀念(包含類別、業界職缺介紹)主要將以講師本身的產業任職 與 多年來輔導朋友們的經驗,希望帶領初學者認識一般學校比較不會教的知識(到底何謂嵌入式系統?有哪些分類?在產業常見的工程師職務類別有哪些?韌體可以找哪些工作?可以去挑戰哪些公司?有何限制?),甚至有需要的話都可以也可以在此課程內做相關產業職缺的求職輔導。 

(2) 在MCU實務的方面將包含基礎架構知識、指令集(組合語言實驗,包含各式定址法、8051記憶體系統架構、中斷機制等),標準8051內部各式周邊原理與驅動實驗(以C程式語言或組合語言實驗,視學員之基礎與學習狀況而定) 

文章標籤

阿良 (孫文良) 發表在 痞客邦 留言(0) 人氣()

這篇就當成一個實驗過程小記錄 (這篇和我之前的許多篇文章風格不同,在這篇文章不會去探究底層Linux device driver或者上層library的內容細節等等,僅從上層純應用Raspberry Pi的maker角度來作個簡單的記錄)

因為手邊的一個小需求,需要用樹莓派3 Model B之板子上的藍牙(實際硬體為BCM43438的藍牙+WiFi的二合一SoC chip)與APP INVENTOR2所開發出的Android的APP的藍牙功能進行連線

這次在樹莓派3上面執行的這個小應用程式是用python撰寫。起初使用bluetoothctl等一連串指令進行藍牙的連線配對後,使用pyserial lib的API直接對/dev/ttyAMA0做存取(也就是藉由UART來對板子上面的藍牙做存取)的方式(這相對類似比較沒有依賴現成藍牙API的作法。以前曾經在其他的專案的開發過程中和HC系列藍牙模組進行連線,當時這樣做是OK的)。而這次在測試與手機端Android App連線的時,在手機端Android App開啟藍牙連線的過程(與樹莓派3版子內建的藍牙連線)遇到問題(連線失敗)。

後來改搭配使用常見的libbluetooth-dev lib搭配PyBluez lib的API來撰寫樹莓派3上面執行的這個python小應用程式,就可成功連線了。

(或者就如同下sudo rfcomm0 watch hci0指令也可成功連線,當然只下指令的話還缺乏後續的應用,所以還是須要撰寫程式)

文章標籤

阿良 (孫文良) 發表在 痞客邦 留言(0) 人氣()

【若需要嵌入式系統技術輔導課程 可來信洽談合作方式: iws6645@gmail.com,亦可先點擊參考這篇介紹文章

歡迎透過合法的方式分享此文內容,若要轉載/轉貼,請明確貼出此原始連結並標示作者基本資訊請勿抄襲及非法轉貼(例如擷取內文但並未註明出處)

< 簡介 >

 

這篇文章以市面上很流行的俗稱STM32F103C8T6 MCU最小系統開發板隨附的簡易GPIO驅動範例程式為例,因為這是一個淺顯的應用範例,所以適合寫成文章分享。相信許多初學者都曾以此範例來測試板子以及開發環境,但是許多人可能對於內容細節的方面沒有較深入的探討及了解,這邊會針對一些重點部分的細節做些說明

文章標籤

阿良 (孫文良) 發表在 痞客邦 留言(0) 人氣()

有鑑於近年來許多學校師生、maker技術愛好者甚至產業公司都有許多人在拿開源的Arduino板子去作工程應用,但是卻比較少人(尤其是學校師生)藉由這個軟硬體都開源的平台去探討與學習一些軟硬體技術細節。許多人只拿板子來做應用,相當可惜。事實上,因為這是一款軟硬體開源的平台,所以可以從其函數庫的程式碼以及電路設計中去找到很多可以學習專業知識和技術觀念的地方。

小弟不才,希望分享一些內容供讀者們參考

這篇文章來針對板子上的進行簡單的分析/探討/說明/拿手上有的UNO板子進行量測實驗,以一個韌體開發人員對於嵌入式系統發所需的基本硬體觀念來闡述(或許不會太深入講解硬體細節,自己也不是專攻硬體電路的電路專家,過去幾年主要的工作是偏向嵌入式系統軟韌體,對硬體方面比較常接觸的就是一些基本的介面電路),希望藉由文章讓初學者不會太害怕了解較簡單的硬體電路原理。

P.S. 因為有時候整理校正這種字數很多的文章到想睡覺時會整理到腦子不清楚,有時會導致誤將自己在記事本寫好的某段文字貼到不對的段落,往往事後自己重複檢查時才會發現Orz...已經盡量檢查校正,若有明顯錯誤還請大家熱心提醒,感謝

--------------------------------

文章標籤

阿良 (孫文良) 發表在 痞客邦 留言(0) 人氣()

歡迎透過合法的方式分享此文內容,若要轉載/轉貼,請明確貼出此原始連結並標示作者基本資訊請勿抄襲及非法轉貼(例如擷取內文但並未註明出處)
 
在嵌入式系統的技術領域,某些與處理器或控制器相關的名詞因為常被混合使用,所以常使許多人對於這些名詞感到模糊以致觀念不清,所以這裡繼續寫這篇文章來作整理分析探討(過去我曾寫過[6]和[13]這兩篇Blog文章來解釋一些名詞定義上的觀念差異)
許多人可能較不會注意到,STM32系列其實除了MCU(Microcontroller Unit)產品之外,也有出MPU(Microprocessor Unit)系列的產品[1],例如ST公司的這顆STM32MP151A[2],這顆IC裏頭除了有有雙核心(ARM Cortex-A7和一顆ARM Cortex-M4)的CPU Cores(當然其實ARM處理器單元之中其實不只包含CPU core,以Cortex-M為例,還會有一些相較於一般周邊裝置而言與CPU更有緊密關係的周邊如NVIC、Systick timer之類的裝置)之外, 還有一些週邊單元(如I2C、SPI、UART、Ethernet MAC、USB、Camera interface、ADC、DAC等等)
文章標籤

阿良 (孫文良) 發表在 痞客邦 留言(0) 人氣()

為了闢除許多人對於嵌入式系統基礎學習的一些錯誤觀念,之前有發表過一篇文章:
 
 
但發現還是有不少朋友無法完整理解上列文章內容,在這裡做一些常見的錯誤觀念迷思的Q&A給大家參考:
文章標籤

阿良 (孫文良) 發表在 痞客邦 留言(0) 人氣()

«12 3
Close

您尚未登入,將以訪客身份留言。亦可以上方服務帳號登入留言

請輸入暱稱 ( 最多顯示 6 個中文字元 )

請輸入標題 ( 最多顯示 9 個中文字元 )

請輸入內容 ( 最多 140 個中文字元 )

reload

請輸入左方認證碼:

看不懂,換張圖

請輸入驗證碼