🥸 最近在本園區所開設的 「嵌入式系統基礎原理與實務課程」內,和幾位工程師學員講解到GPIO的部分,頗有感觸。
目前分類:嵌入式系統 (51)
- Oct 10 Sun 2021 17:32
【嵌入式系統基礎原理與實務課程】 GPIO單元之簡介推廣
- Sep 04 Sat 2021 21:47
適合初學者的【嵌入式系統基礎原理與實務課程】
‼ 在此推廣一下 適合初學者的【嵌入式系統基礎原理與實務課程】‼
👉 本po文的影片內容為一個簡易的小範例,由8051 MCU GPIO之Output(輸出)驅動LED完成簡易跑馬燈功能。
影片內容包含從操作KEIL C51 IDE的免費評估版對程式碼進行編譯,並且藉由 ISP (In System Programming) 燒錄方式(便宜又好用) 對8051 MCU進行燒錄並觀察執行結果。
- Aug 16 Mon 2021 23:34
【阿良的嵌入式系統技術學習區】STM32系列MCU韌體程式設計基礎實務 課程內容介紹
課程涵蓋內容如下:
- 韌體程式常用程式語言
- 組合語言指令集與MCU架構簡介
- 以架構簡潔清晰的Intel MCS51指令集為教材範例
- C語言基礎複習
- 高階與低階語言(C語言 與 組合語言Assembly)差異介紹與實驗驗證
- 組合語言指令集與MCU架構簡介
- 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)
- GPIO架構與驅動原理
- Timer/Counter(計時器/計數器)
- 計時器
- 計數器
- 輪詢與中斷應用實驗
- UART (通用非同步串列傳輸通訊介面)
- UART之協定原理
- 輪詢與中斷應用實驗 (與其它具備UART介面之設備進行通訊實驗)
- RS232與RS485纜線介紹
- 電氣位準轉換原理
- 相關IC介紹
- ADC(類比轉數位轉換器)
- 輪詢與中斷機制 搭配 亮度感測器 進行實驗
- I²C串列通訊介面
- SPI串列通訊介面
- 其它各種周邊裝置、I/O介面或協定(PWM、1-wire、DAC、DMA...)
- GPIO(通用輸入/輸出介面)
- Jul 30 Fri 2021 20:57
於10年前,在大二暑假時期設計製作的以8051 MCU為核心的PCB電路,順便聊聊某些名校大學系所的推甄文化。
想當初就讀大學時期,除了堅持學業成績常保持在第一之外,幾乎每個寒暑假、甚至修課讀書以外的時間都自願在實驗室做專題專案度過(坦白說比起多數人的大學生活來說,真的不輕鬆,但很充實,將碩班生活提前到大學時期來過),
當時主要為了想要多參加教育部競賽,以便推甄名校大學的碩士班。沒想到後來到了所謂名校大學,看到不少名校大學大學部直升的學生幾乎是不用花太多時間做專題,更不用積極參加校外全國競賽,很輕易就可以直升本系碩士班( (有些系所真的只看考生大學就讀的校名、系名,或者看是否有認識的教授推薦,就佔了大部分的錄取因素,但如此的作法確實也錄取了許多大學時期不太用心在專業方面的直升學生,說真的不少人的專業實力在大學時期是真的沒什麼累積,就連學科理論基礎也未必比較有概念),坦白說,時至今日,個人對某些不太客觀的推甄錄取標準現象仍感到有些感慨。
分享一下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程式做後續應用處理。
- Jul 29 Thu 2021 22:37
【課程內容介紹】STM32 MCU韌體開發課程 之 中斷(Interrupt)機制: NVIC基本原理與應用 課程簡介
下方影片為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
- Jul 25 Sun 2021 14:40
學習8051 MCU會太老舊過時嗎? 告訴你更老舊的6502 CPU/MPU的實際狀況!
很多人都會迷信於 平台或技術的 新舊 這種表面來主觀判斷其好壞,而不知其實際客觀的狀況。
除了Intel在1981年出產的8051 MCU的同族加強版至今依然有許多產品在用,
事實上,就連MOS公司在1975年出的6502 Microprocessor系列,現在也還是有不少產品使用。
幾年前有和一間IC設計公司主管討論到這方面;而最近一位80即將任職韌體工程師的學員的公司也會用到6502,主要以 組合語言(Assembly Language) 進行其韌體程式開發。
其實,無論平台新舊,有許多基礎原理都是直接相關甚至共通的。如果舊的(架構較簡易的)都還不會,以為直接碰新的平台就能學的紮實? 這是許多學校老師的天大誤會 (當然也有業界人因為看得不夠多,也有可能會有類似的觀念與迷思)。
- Jul 16 Fri 2021 00:37
【阿良的韌體科普系列】「韌體」是啥? 和軟體一樣嗎?【下篇】
承接中篇文章,下篇的內容如下:
另外有些人可能會認為,被燒錄到裝置產品內的軟體都能叫做韌體,我甚至看過有人認為開發Android 裝置的上層軟體也是在做嵌入式系統韌體開發,對於這種觀念我個人是不同意的。因為畢竟只要是能執行軟體的產品 (有電腦系統在內),有什麼不是裝置呢? 即便個人電腦PC也是裝置的一種。其實或許應該以軟體的所在層次(Level)去區分,會較客觀一些。
無論硬體平台是SoC或者MCU;無論產品類型是小體積的裝置還是PC或家電;無論主要系統軟體是屬於有無OS的類型、無論軟體單元/種類是Linux kernel、BIOS、bootloader等等,只要是位於底層層次的軟體(存取CPU、周邊暫存器、記憶體的層次的軟體,我認為即可稱為韌體),撰寫韌體是需要考量到硬體狀況 (如果是控制I/O周邊用的韌體,時常還要考量及整合電腦晶片外部的電子電路設計)。
當然也有因為硬體架構較單純所以將應用程式和韌體混和撰寫的狀況,例如早期標準(至今仍可用於嵌入式基礎教學)的8051 MCU晶片的程式開發即是這種狀況(較早期的MCU硬體架構單純、資源較有限,不一定適合去將其軟體區分出太多高低階層次)。
- Jul 16 Fri 2021 00:34
【阿良的韌體科普系列】「韌體」是啥? 和軟體一樣嗎?【中篇】
承接上篇文章,中篇的內容如下:
所以,若要精確一點來說(說好的初學者科普呢),個人認為何到底謂韌體、何謂軟體,其實應該以該軟體所在的層次來區分,而不是以平台來區分。
以許多 初學者 或 學生 時常撰寫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是韌體類的程式嗎? 既然世界上所有的軟體本來就都是為了驅動電腦硬體做事(以達到我們人類所指定的功能),那又何必區分獨立出韌體這個名詞呢? 所以,韌體應該必須是有其特定意義的。
- Jul 16 Fri 2021 00:27
【阿良的韌體科普系列】「韌體」是啥? 和軟體一樣嗎? 【上篇】
【若需要嵌入式系統技術輔導課程 可來信洽談合作方式: iws6645@gmail.com,亦可先參考這篇介紹文章】
說明:
撰寫此系列文章的目的,主要是希望能讓初學者(甚至非本科系的朋友)能了解一些關於韌體的基本觀念,所以不會使用太艱澀的方式來描述 (盡量)。
(但是後來發現這些內容對有些初學者而言可能還是會有點艱澀,所以順便廣告一下,對於許多初學者來說,有些內容或許真的需要來上課才比較容易更清楚和容易吸收,若需要課程請洽最下方的email)。
某些人對於這些專業名詞的定義和觀念或許有些差異,在這文章中,我將以個人長期以來對於MCU(微控制器,也就是單晶片微電腦) 與 SoC(系統晶片)的 軟韌體程式開發經驗(包含non-OS無作業系統類型 和 OS based有作業系統類型)來進行分析和說明。
- May 21 Fri 2021 17:09
【課程內容介紹】【STM32】STM32 UART基礎教學之部份簡介(主要以簡易的Receive data應用為範例作教學)
歡迎透過合法的方式分享此文內容,若要轉載/轉貼,請明確貼出此原始連結並標示作者基本資訊,請勿抄襲及非法轉貼(例如擷取內文但並未註明出處)
STM32_UART基礎教學之部份簡介(主要以簡易的Receive data應用為範例作教學)。
課程會介紹關於UART的基礎使用方式,包含Polling(輪詢)和interrupt(中斷)機制的差異和基本使用觀念。
而在中斷的方面,
下列影片1的情況是因為我們 沒有 讓CPU或DMA去讀(read) Receive Data Register之中的接收資料,也沒有去對RXNE flag寫0,所以RXNE flag沒有被清除,導致UART ISR flow不斷地被觸發。
- May 20 Thu 2021 19:03
【STM32】記錄今天看到的STM32 MCU RM0090 Reference manual Rev 19的973~974頁 USART Receiver(章節30.3.3)的一個寫法上的小問題
歡迎透過合法的方式分享此文內容,若要轉載/轉貼,請明確貼出此原始連結並標示作者基本資訊,請勿抄襲及非法轉貼(例如擷取內文但並未註明出處)
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]的內容, 請注意被紅線框起的部分 :
- Mar 23 Tue 2021 16:19
【課程介紹】使用STM32CubeMX + KeilC(MDK-ARM) 的 STM32(ARM based MCU)韌體開發環境建置 開課啦STM
使用STM32CubeMX + KeilC(MDK-ARM) 的 STM32 (ARM based MCU)韌體開發環境建置開課囉
主要包含以下內容:
- STM32CubeMX這款initialization code generator工具的基本使用操作
- KeilC(MDK-ARM)IDE 基本下載安裝(評估版)與使用操作
- 兩種韌體燒錄方式教學
- Mar 18 Thu 2021 18:34
【課程內容介紹】本學習區之嵌入式系統SoC/MCU晶片內部IO Port結構、Open-drain(開汲極)、Push-Pull output(推挽式輸出)等相關課程內容介紹
歡迎透過合法的方式分享此文內容,若要轉載/轉貼,請明確貼出此原始連結並標示作者基本資訊,請勿抄襲及非法轉貼(例如擷取內文但並未註明出處)
近期在對擔任韌體開發工程師的學員進行授課的過程中,以8051 MCU作為實驗目標教材,介紹到了8051 MCU四組I/O Port的內部硬體結構和運作原理,
尤其是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(推挽式輸出)的概念。
- Mar 08 Mon 2021 17:17
什麼是嵌入式系統?
歡迎透過合法的方式分享此文內容,若要轉載/轉貼,請明確貼出此原始連結並標示作者基本資訊,請勿抄襲及非法轉貼(例如擷取內文但並未註明出處)
許多人都聽說過嵌入式系統,包含許多學生、教師甚至是從業工程師,即便這是個在工程界常聽到的名詞,但卻常常有人對此名詞感到困惑。
但到底什麼是嵌入式系統呢?
我們可以看一下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.
- Jan 30 Sat 2021 23:38
【課程介紹】本學習區已開設 & 未來即將開設之嵌入式系統軟韌體技術課程 簡介
本區於之前已開設之課程:
(一) 嵌入式系統基本理論觀念與MCU基礎實務課程(包含業界職缺介紹)
-> 以麻雀雖小五臟俱全之8051 MCU為實驗教材(以紮實基礎理論與實務觀念為課程核心,對於初學者而言,其實不會有8051太老舊的問題,希望初學者奠定紮實基礎以利初學者學習與至相關產業就業)。
(1) 嵌入式系統基本理論觀念(包含類別、業界職缺介紹)主要將以講師本身的產業任職 與 多年來輔導朋友們的經驗,希望帶領初學者認識一般學校比較不會教的知識(到底何謂嵌入式系統?有哪些分類?在產業常見的工程師職務類別有哪些?韌體可以找哪些工作?可以去挑戰哪些公司?有何限制?),甚至有需要的話都可以也可以在此課程內做相關產業職缺的求職輔導。
(2) 在MCU實務的方面將包含基礎架構知識、指令集(組合語言實驗,包含各式定址法、8051記憶體系統架構、中斷機制等),標準8051內部各式周邊原理與驅動實驗(以C程式語言或組合語言實驗,視學員之基礎與學習狀況而定)
- Dec 23 Wed 2020 18:53
樹莓派3(Raspberry Pi 3)內建藍牙與APP INVENTOR 2的藍牙連線問題記錄(使用pyserial lib的API直接對/dev/ttyAMA0做存取)
這篇就當成一個實驗過程小記錄 (這篇和我之前的許多篇文章風格不同,在這篇文章不會去探究底層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指令也可成功連線,當然只下指令的話還缺乏後續的應用,所以還是須要撰寫程式)
- Dec 11 Fri 2020 00:54
【STM32】【ARM 】ARM Cortex-M3 CPU bit-banding功能機制講解,以STM32F103之GPIO範例程式為例
- Dec 03 Thu 2020 01:14
【你所不知道的Arduino】Arduino UNO電源選擇電路之設計機制與動作原理分析 & 實際量測實驗結果之差異探討
有鑑於近年來許多學校師生、maker技術愛好者甚至產業公司都有許多人在拿開源的Arduino板子去作工程應用,但是卻比較少人(尤其是學校師生)藉由這個軟硬體都開源的平台去探討與學習一些軟硬體技術細節。許多人只拿板子來做應用,相當可惜。事實上,因為這是一款軟硬體開源的平台,所以可以從其函數庫的程式碼以及電路設計中去找到很多可以學習專業知識和技術觀念的地方。
小弟不才,希望分享一些內容供讀者們參考
這篇文章來針對板子上的進行簡單的分析/探討/說明/拿手上有的UNO板子進行量測實驗,以一個韌體開發人員對於嵌入式系統發所需的基本硬體觀念來闡述(或許不會太深入講解硬體細節,自己也不是專攻硬體電路的電路專家,過去幾年主要的工作是偏向嵌入式系統軟韌體,對硬體方面比較常接觸的就是一些基本的介面電路),希望藉由文章讓初學者不會太害怕了解較簡單的硬體電路原理。
P.S. 因為有時候整理校正這種字數很多的文章到想睡覺時會整理到腦子不清楚,有時會導致誤將自己在記事本寫好的某段文字貼到不對的段落,往往事後自己重複檢查時才會發現Orz...已經盡量檢查校正,若有明顯錯誤還請大家熱心提醒,感謝
--------------------------------
- Nov 13 Fri 2020 15:27
MPU/MCU/Embedded Microprocessor/Embedded Processor名詞定義探討與整理
- Sep 16 Wed 2020 03:07
8051 MCU 錯誤觀念闢除 第二彈文章!