文章

STM32MP157 的 Linux 系統處理器 -- 第二步建立 Qt Creator 開發環境

圖片
        STM32MP157開發板通電後,如下圖,開發板上面所運行 Qt 的版本為 5.12 ,因此我們從 Qt 官網下載對應的版本來開發 UI 介面,網址: https://download.qt.io/archive/qt/5.12/5.12.9/ 。 MP157 上面運行的作業系統是 OpenLinux ,要從 ST 官網下載 STM32MP1 OpenSTLinux Developer Package ,安裝包裡面有交叉編譯器和基於 Yocto 的 SDK ,安裝過程請參考 [2] 第一章或 [4] 第六章。         安裝 Qt Creator 5.12.9 後,需要將上述 cross compiler 的位置指向 ST 官方自帶的工具,如下圖所示,請參考 [2] 第二章。第一步先設定 qmake 路徑,第二步再設定 C++ 編譯器的路徑,最後再將開發環境的配置設定好。 第一個範例         利用 Qt 來編譯我們第一個範例 Hello World , Qt 能分別編譯 Ubuntu 環境的 UI 介面,也能編譯 MP157 開發板的 UI 介面。下面第一張圖是運行在 Ubuntu 系統的 Hello World ,下圖第二張是運行在 MP157 板子的 Hello World ,如果第一個範例能成功運行在不同系統的話,這代表我們上述安裝 Qt 開發環境是正確的。 參考資料 [1] STM32MP1 嵌入式 Linux 驅動開發指南 V2.0 [2] STM32MP157 出廠系統 Qt 交叉編譯環境搭建 V1.1 [3] STM32MP1 嵌入式 Linux C 應用編程指南 V1.4 [4] STM32MP157 快速體驗 V1.6

STM32MP157 的 Linux 系統處理器 -- 第一步建立開發編譯環境

圖片
STM32MP157開發板的資料非常多,本文主要是抓出建立一個開發環境的重點部分。MP157  晶片有兩顆 ARM Cortext-A7 核心 800MHz 和一顆 Cortext-M4 核心 209MHz ,其中 A7 運行 Linux 核心。由於其多核的架構適用於處理複雜的任務,比如智能家居、環境監控、安防、自動控制系統、智慧醫療監測 … 等嵌入式的 Linux 應用。 首先認識啟動過程,當晶片通電啟動後,先跑 TF-A(STM 的安全開機流程 ) ,接著運行 uboot 開機程式 ( 俗稱 bootloader) ,此時 uboot 會載入 Linux 核心到 SRAM ,最後再運行 Linux 系統,周邊設備的驅動會被 Linux 系統帶起來,呈現給我們的就是 Linux 操作介面。 由於是 ARM 為基礎的晶片,編譯過程需要用 ARM 官方的編譯工具,也就是 tool-chain 。正點原子建議使用 gcc-arm-9.2-2019.12-x86_64-arm-none- 版本,這是 2019 年底出的 9.2 版本,有分為 Linux 和 Windows 版。同時, STM 官方有提供 TF-A 、 uboot 、 Linux 內核的原始碼,為了避免編譯原始碼產生錯誤,最好用同一編譯版本 9.2 版,因為無法確認新版本編譯工具是否能成功編譯原始碼。最後留意一點,如果要修改 uboot 或 Linux 內核驅動的話,最好在 Ubuntu 的環境底下進行原始碼的編譯。 Cross Compiler交叉編譯器 首先,到 ARM 官網下載 https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-a/downloads ,搜尋 version 9.2 。 如果安裝到 Windows 環境,選 Windows (mingw-w64-i686) hosted cross compilers 底下的 AArch32 target with hard float (mingw-w64-i686-arm-none-linux-gnueabihf.tar.xz) 。然後,用 WinRAR 工具將它解壓縮到某一目錄下,接著在

工控板 STM32F407 / 24-bit ADC / 乙太網路介面

圖片
        意法 STM32 系列晶片在工業或控制領域使用是非常廣泛的,這裡介紹一塊 F407 的控制板,板子將晶片的周邊電路已經拉出來,並接到歐式端子頭,如圖一所示。簡單介紹 STM32F407 核心是 ARM Cortex-M4F,晶片最高工作頻率 168MHz ,底下列出這塊控制板的周邊介面:         1) 16 路光耦合隔離 GPI         2) 16 路光耦合隔離 GPO (有帶+24V電源的接點)         3) 4 路光耦合隔離 GPO (無電源的接點)         4) 2 路 DAC (12-bit, 0-10V)         5) 8 路 ADC (24-bit, 0~10V, 7500 samples/sec) : 接 ADS1256 晶片         6) RS-485(兩組), RS-232(一組), CAN-bus(兩組)         7) Ethernet RJ-45 接口:接 LAN8720 PHY 晶片         8) 8 路高速 PWM 輸出         9) 2 路高速 PWM 輸入 圖一:工控板系統圖示         下圖二是控制板的實體圖片,左下角是總電源 +24V 供電,右下角有一個 USB 接口 (UART to USB),用來接到電腦,當做終端機可以查看 debug 訊息,也可以當做系統參數配置的通訊介面,像是設定網路 IP 參數或系統參數....等,如下圖四所示。下方的 GPO 的數位輸出端子都會對應一個 LED 燈,當 GPO 輸出為 1 時,燈號就會亮起,反之,燈號會熄滅。 圖二:工控板實物圖示         控制板上面用了一顆 ADS1256 ADC 晶片,具有八個通道,解析度為 24-bit,總取樣率最高為 30k samples/sec。由於 F407 對於中斷處理的速度還不夠快,不足以滿足最高取樣率 30K 的條件。實測下來,如果系統只用到單一通道,則取樣率可高達到 15K  samples/sec,如果系統要多個通道掃描的話,則取樣率最多只能做到 7.5K 或者甚至更低 3.75K。         下圖三是 ADC 取樣到的點 (24-bit) 利用網路傳送到電腦上,並在電腦上將取樣點描繪出來,像是一個示波器的顯示一樣。圖中的橫軸代表取樣的點數

[模組] STM32 藍芽模組 -- BlueNRG-2 模組

圖片
模組介紹 BlueNRG 系統有兩款已認證的藍芽模組,都支援藍芽5.2,一款型號為 BLUENRG- M2SA ( 對應的開發板名稱: STEVAL-IDB008V1M) ,一款為 BLUENRG- M2SP 。模組的核心是 STM32 Cortex-M0 ,它本身就是一顆 MCU ,再外接常見的通訊界面,如: UART 、 SPI 、 I2C… 等。官方網站提供該模組的 SDK 程式碼,到官方網站下載 BlueNRG-1_2 DK-3.2.3.0-Setup.exe ,執行安裝後,如下圖所示。官網提供的模組規格  https://www.st.com/zh/wireless-connectivity/bluenrg-2.html 用 Keil IDE 開啟任一個 NRG2 的專案檔,要注意使用這兩款的模組前有三個變數要定義清楚再來編譯。 BLUENRG- M2SA 的定義如下: HS_SPEED_XTAL=HS_SPEED_XTAL_32MHZ LS_SOURCE=LS_SOURCE_ EXTERNAL_32KHZ SMPS_INDUCTOR=SMPS_INDUCTOR_ 10uH BLUENRG- M2SP 屬於更新版的模組,低速的時脈由內部自行產生,外部電路也不需要額外設計電感元件,定義如下:                               HS_SPEED_XTAL=HS_SPEED_XTAL_32MHZ                               LS_SOURCE=LS_SOURCE_ INTERNAL_RO                               SMPS_INDUCTOR=SMPS_INDUCTOR_ NONE 只要在編譯的環境裡面設定就好了,如下圖。 X-NUCLEO-BNRG2A1 是一塊 M2SP 模組 (U8) 的開發板,上面除了模組之外,還有一顆 Flash-SPI (U9) ,模組的 DIO14 腳位接了一顆 LED 燈可供我們控制。由於這塊開發板上面沒有穩壓 IC 的電路,無法自己產生穩定的 3.3V ,所以需要透過 Arduino UNO 擴充槽從外部來獲得電壓。 Q : BLUENRG- M2SP 模組如果進入休眠狀態,此時 JTAG 將無法直接連上,如何解決? A

[心得] 股市的技術指標(RSI、KD、MACD)與物理力學的關係

圖片
        過去常常思考一個問題,股市的量價關係如何與物理力學產生連結呢?股市的技術指標如何與牛頓定律扯上關係呢?我在這裡不探討數學式子,單純從概念來思考。以下謹代表個人研究心得,不負責盈虧。首先,股市的成交量能代表推力或衰退力道,股價代表移動的距離大小,股本可視為一個物體的質量。在股海時間久了,普遍的認知就是股本越大越需要更大的成交量能來推動價格,小股本的公司只需一點推力就能產生推升的效果,這樣的邏輯可以套用到力學當中的牛頓第二定律 F = MA (F: 牛頓力,M: 物體質量,A: 移動加速度),移動的距離又與速度/加速度有關。分為四種情境,往前進的速度且加速度為正,往前進的速度且加速度為負,往後退且加速度為負,往後退且加速度為正("正"代表方向轉為向前)。         股市中,常見常用的技術指標 RSI 、 KD、MACD,根據定義 RSI 代表強弱指標,以價格的最高最低來計算 RSI 數值。我們試著把價格高低點想像成移動的距離遠近,移動距離越大是不是代表發力的力道越大?於是, RSI 指標從 50 開始往上增加時,表示開始發力 ,F 開始產生作用,產生加速度 A 的移動,如下圖所示,這視為向前速度且加速度為正。         在牛頓第一慣性定律中,發力的過程即使停止發力了,物體還是會持續往前進,這是慣性也是動能。從下圖中觀察,RSI 回到 50 以上,雖然力道變得很微弱了,但是還有上升上漲的動能。講到這裡,發力強弱指的是瞬間力道,而平均力道就要觀察另一個指標 KD。 倘若 KD 維持在高檔(俗稱高檔鈍化),代表平均力道維持不墜 ,既然有力道就還有前進的速度,也就有動能。因此,觀察 KD 指標能維持高檔多久的時間代表力道的持久度,只要 KD 不斷維持 "中強" 水準,即使量能稍微偷懶沒有出力,事後再瞬間發力,這股前進的慣性還是存在於 K 線中的,如下圖所示。         最後,來講講動能,雖然前進具備動能,但是也要觀察動能的強弱,到底這次動能跟上次相比是更強還是更弱呢?技術指標的 MACD 用來判斷動能的強弱, 當高於零軸時,代表動能轉向往前進 ,低於零軸代表動能為後退(代表價格下跌)。下圖所示的 MACD 維持在零軸之上,顯示一股前進的動能,即使回到靠近零軸,仍然在前進,只要再次發力便可加速往前進。但是,

工控板 STM32F103 與網路晶片 DM9000

圖片
        網路上訂購一塊工控板 STM32F103 帶有網路介面,上面的網路晶片型號是 DM9000,過去我主要用 F207 開發網路的功能,這回使用 F103 試試看(降規打怪),MCU 與 DM9000 溝通的介面方式是 FSMC,過去也經常使用,算是熟悉 FSMC 介面。不過開發過程發現,MCU 讀取不到晶片的 Device ID,於是接上邏輯分析儀觀察腳位的變化,檢查是否符合 datasheet 的規定。測試結果,腳位訊號一切滿足規範,便聯絡廠商技術支援。聽對方工程師說,F103 速度(MCU 72MHz)比較慢所以搭配 DM9000 可能會有些問題,後續會再寄一塊新的給我。我當下思考,是否這樣的系統搭配造成良率不佳?還是說硬體設計本身有問題?         12路光耦合的隔離輸入,如下圖所示, XH 2.54 端子台。當輸入訊號為GND,觸發光耦合迴路導通,激發另一端的電晶體導通。輸入訊號只要以 +24V 或 GND 代表切換 On/Off,MCU 便能判斷輸入訊號的準位。         8路光耦合的隔離輸出,如圖 XH 2.54 端子台,MCU 控制腳位的 On/Off 觸發光耦合 IC。當光耦合開關打開時,+24V 會流向下一級的電晶體,同時開啟電晶體導通,因此輸出會導通到 GND。外部接點必須是一個具有負載的點位,無論它是繼電器或是乾濕接點,都是一個帶有電源負載的點位。 利用這塊工控板實作一個 GPS 軌跡追蹤系統,其影片連結如下: https://youtu.be/d_qeJ52fTf0

工廠設備用到的工具:串列資料傳輸轉換為網路通訊

圖片
        工廠生產設備遇到網路化的問題,偏偏產線設備不具有網路端口,這時候可以使用 RS-232 to Ethernet 模組來解決,下圖一所示。有些設備不具有網路,只要將下圖的模組 RS-232 配置設定好後(圖四),設備與模組間就算搞定了,接下來再設定網路模式。 圖一:RS-232 to Ethernet 轉換模組         網路參數的部分,分為 TCP 或 UDP 通訊模式,前者是連線保證(資料不丟失),後者是傳輸不保證(資料可能丟失)。如果是重要數據的傳輸,最好選 TCP 模式。除了通訊模式之外,要事先設定模組當做 server 或者是 client 端,圖二所示。如果做為 server 端,需要設定監聽的埠口,以便讓客戶端連線進來模組。如果做為 client 端,需要設定遠端 server IP 位址與埠口,模組通電後便會自動連線到遠端 server,建立起通訊連線。簡單說,server 角色是被動建立連線,client 角色是主動建立連線。 圖二:TCP 網路模式的參數配置         UDP 的設定就相對簡單了,下圖三所示。沒有所謂的 server 或 client 角色,只要設定本模組的通訊埠口,以及對方的 IP 位址與埠口,模組通電後,資料就會透過埠口互傳了。 圖三:UDP 網路模式的參數配置 圖四:UART 通訊模式的參數配置