文章

[筆記] ARM Compiler 6 且不勾選 MicroLIB,晶片無法開機運行?

圖片
問題:STM32晶片用 ARM compiler 6 版本編譯,不勾選 MicroLIB,如下圖設定。燒錄後,晶片不會自動運行? 1. 使用 C++ 編譯,不能再勾選 MicroLIB,因為組譯會出現錯誤。MicroLIB 不支援C++。 2. 改回 ARM Compiler 5,勾選 MicroLIB。 3. 使用 C++ 編譯,需要重新定義一些 stdio 的函數,參考  keil MDK AC5向AC6迁移后如何重定向printf_ac6 printf-CSDN博客 。 4. 使用 C++ 編譯的解決方式,新增 Compiler I/O,如下圖。如果有用到 File or TTY,就勾選起來。

STM32H743VIT6 開發板並帶有 CAM 和 LCD 模組

圖片
        STM32H743 開發板帶有 DCMI 的鏡頭模組和 LTDC 控制器可外接 LCD 顯示模組,晶片的內部時脈最高可達 480MHz,內建 Flash 和 SRAM 記憶體,開發板的正背面,如下圖所示。開發板上面還有 SD 卡槽和 USB 接口,在應用方面可開發為照相機﹑攝影機﹑行車紀錄器...等終端產品。         晶片開機啟動機制:STM32H7x 系列晶片有一根 BOOT 接腳,當腳位電壓為低時,開機通電後,系統會從 Flash 的 0x08000000 位址開始執行,這塊區域正是我們所存放的應用程式碼。萬一我們程式碼寫得不夠完整而造成晶片系統陷入異常的時候,此時可能我們也無法透過 ST-Link 燒錄或除錯,遇到這種情況,必須將 BOOT 腳位電壓拉高,再開機通電,讓晶片進入 Bootloader。晶片在生產期間,ST會將官方的 Bootloader 燒錄在 Flash 的 0x1FF00000 位址,於是通電後進入這段程式後,我們就可以透過官方工具 STM32CubeProgrammer 從 USB 端口進行燒錄下載。 開發板生產商提供鏡頭與顯示模組的範例程式碼,連結如下 http://www.fdiot.top/forum.php?mod=forumdisplay&fid=52 ,我們用 Keil IDE 環境就能編譯並除錯運行。所提供的範例不帶 RTOS 架構,為了往後擴展便利,我將此範例架構修改為 RTOS 系統。首先,在 Keil 環境下需添加三個部分:CMSIS-RTOS2 ﹑  Device-Startup ﹑  RTOS,如下所示。 然後,程式碼呼叫 osKernelInitialize() 初始化函數,再創建新的線程函數 osThreadNew ( Routine, NULL, &osAttr ),最後呼叫 osKernelStart() 啟動函數,開發板就能運行 RTOS 架構了。 操作影片 https://youtube.com/shorts/LuNI9CanfJ4?feature=share

初學 ESP32-S3 攝像模組的開發

圖片
        ESP32-S3模組的核心是 XTensa 雙核的處理器,運行最高時脈為 240MHz。這個無線模組具備 WiFi 2.4G 無線網路,還有低功耗的藍芽 BLE。模組外觀如下圖一,晶片本身帶有兩組 USB 介面,其中一組是 USB_UART 通訊介面,另一組為 USB OTG。圖一的右邊 type-C USB 是 serial 通訊端口,用來接 Arduino IDE 或者 debug 之用,圖一的左邊 type-C USB 則是 OTG 之用。 圖一:攝像模組的外觀         ESP32-S3 模組的硬體規格能從晶片命名來得知,我們從外觀圖知道這是 N16R8 編號,再根據技術文件的命名規則(下圖二),因此這顆模組帶有 Flash 16MB (Quad SPI) 以及 PSRAM 8MB (Octal SPI),這項資訊會用在稍後的 Arduino IDE 的環境設定。 圖二:晶片模組的命名規則         依據上述的規格,開啟 Arduino IDE,在工具欄位底下設定相關的參數,如下圖三。開發板選擇"ESP32S3 Dev Module",然後記憶體分配的模式設為Huge APP,這樣才有足夠的空間存放攝像模組的APP程式碼。 圖三:Arduino IDE 的環境配置         接下來,我們要驗證攝像模組是否能不能正常運作。因此,開啟範例選項,如下圖四,選擇 CameraWebServer 的參考範例。在範例的程式碼中,先要選擇這個模型,下面這段定義要被採用,編譯過程便會將模組對應的腳位啟用。最後,我們再填入無線網路的 ssid 與 password,並且檢驗編譯範例有沒有出現錯誤。                #define CAMERA_MODEL_ESP32S3_EYE    // Has PSRAM 圖四:攝像模組的參考範例         成功編譯後,再進行燒錄。在圖一的模組外觀,上面有兩顆小按鈕,左邊是 rese...

[筆記] Edge Impulse平台的影像辨識模型

圖片
        Edge Impulse 是一個提供 AI 模型訓練的雲端平台  https://edgeimpulse.com/ ,也提供幾個免費的模型讓新註冊者使用,適合初學者入門學習 AI 模型訓練( Train ),乃至生成推理參數( Inference )。此外,該平台提供的模型適用於邊緣運算,訓練後的模型參數可以移植到資源有限的嵌入式系統上面進行 AI 的推理,犧牲部分模型的精準度來換取更多周邊設備的推理應用。在網站,Edge Impulse 列出一些合作的硬體設備廠商或可移植的模組,我們可以根據這方向找適合的模組來實現。          就 EI 平台上免費提供的模型而言,可以分為一維資料的語音模型訓練,和二維資料的影像模型訓練。本文僅就影像辨識模型來介紹,請參考吉伊卡哇的臉部辨識  https://youtu.be/F2ollSB4v2g 。在平台上,物件偵測的模型 MobileNet,我們可以調整模型訓練的圈數以及學習率...等,以便達到較好的精準度。 MobileNetV2 中的 寬度因子 (Width Multiplier) 是一個關鍵參數(通常用 α 表示),用於控制模型的通道數(即寬度)。 MobileNetV2-0.1  和  MobileNetV2-0.35  的主要差別在於兩者的寬度因子不同(分別為 0.1 和 0.35),這直接影響模型的複雜度、運算量、參數量以及最終效能。 底下的圖顯示,在相同的設定圈數下,MobileNetV2-0.35 參數的整體分數比 V2-0.1 好,乃因V2-0.1為輕量模型,更進一步採用 MobileNetV2 SSD 模組來訓練,也能達到接近的精準度。MobileNetV2 SSD 比 MobileNet 模型除了物件的分類之外,還能精準物件的定位,當然在訓練的過程會花費更多的時間。簡而言之,MobileNetV2-0.35 專注於影像分類,而 MobileNetV2 SSD 則將分類與定位結合,實現更全面的影像理解。         除了上述的模型之外,EI 平台也提供 Yolo 模型,不過這模型訓練時間過長,無法提供免費...

建立一個 MQTT 測試環境

圖片
如何建立一個 MQTT server 的測試環境,在網路上有提供 MQTT Broker 的服務,其中免費的 MQTT 測試網站列表,如下: 1)       MQTT GO : https://broker.mqttgo.io/ ,使用說明參考 [1] 。 2)       EMQX : https://www.emqx.com/ ,可用谷歌或 Github 帳號登錄,然後創建 MQTT 服務。特別留意,這個網站提供的連線方式為 MQTT over TLS/SSL 。   有了網路的 Broker 服務之後,我們需要設計一個訊息發佈的終端,來模擬 IoT 的設備。利用 MQTTnet C# 設計一個 client 端的工具,可驗證 MQTT 連線與發佈,工具的操作畫面如下所示。 操作步驟 1)       設定 broker 網址以及連線的端口,標準端口: 1883 ,或者 TLS/SSL 端口: 8883 。不過,這個 MQTT GO 網站使用標準端口連線,而且不需要 user/password 。按下 Connect 鈕後,無論成功與否,會彈出一個連線結果。 2)       成功後,設定右側的 Topic 欄位,然後再填寫訊息欄,最後按下 Publish ,這則訊息會傳送到 MQTT GO 網站,我們再到網站上檢視,如下圖。 3)       開啟瀏覽器到 MQTT GO 網站,先連線後,再訂閱主題。這裡的主題就是對應上面工具的 Topic 欄位,訂閱後,就能直接在瀏覽器上面看到工具傳送的訊息。   模擬測試 根據水利署的 MQTT 資料上傳文件 [2] ,主題的格式為 Datastream( 物理量 GUID)/Observations ,而訊息內容為 JSON 格式。將 GUID 填入 1 為模擬代號,下圖是模擬的結果。   EMQX 連線資訊 EMQX 服務器的連線採用 MQTT over TLS/SSL ,...

[筆記] RTSP stream server on Windows

圖片
➤ 準備套件 MediaMTX :到 github 網站下載 zip 包  https://github.com/bluenviron/mediamtx ,參考 [1] FFmpeg :到官網下載已經編譯好的 zip 包,參考[2] ➤ 啟動 RTSP 服務         MediaMTX zip 包裡面有三個檔案,一個程式的執行檔(.exe),一個是程式的配置檔(.yml),另一個是許可檔案。配置檔就是一個文字檔,打開後可以看到 RTSP 的相關設定,還有其他串流 RTMP 的設定。在 Windows 環境下,開啟 CMD 視窗,然後執行 mediamtx.exe,顯示出下圖的結果。RTSP 串流的 TCP 端口為 8554,UDP 端口為 8000。 ➤ FFmpeg 影像編碼         編譯過的 FFmpeg 壓縮包裡面,\bin\ 目錄底下有三個執行檔,一個是 ffmpeg.exe,一個是 ffplay.exe,以及 ffprobe.exe。第一步,在 Windows 環境下開啟 CMD 視窗,然後執行 ffmpeg .exe -version 檢視版本號,看有沒有成功。         第二步,查看並列出電腦上的所有攝影機,執行 ffmpeg -list_devices true -f dshow -i dummy,結果會列出來,如下圖。         第三步,我們用 ffplay 工具執行擷取攝影機的影像數據,在 CMD 視窗執行 ffplay -f dshow -i video = "USB2.0 VGA UVC WebCam",其結果如下圖所示。         前面的步驟都成功後,進行第四步,將攝影機影像推到 RTSP 伺服器上,參考[3], ffmpeg -f dshow -i video="USB2.0 VGA UVC WebCam" -f rtsp rtsp://127.0.0.1:8554/stream 接著,我們在另一台電腦上,寫一個 RTSP client 的程式,從伺服器上面讀取攝影機的影像,如下圖,RTSP 伺服器的 ...

工控板 STM32H750 ADC / DAC / 網路介面

圖片
        在實務上,經常使用意法半導體的 MCU,本文介紹一塊高效能的工控板,如圖一所示,以 STM32H750 為基礎,其核心為 ARM Cortex-M7,最高運算時脈 480MHz。底下列出這塊工控板的周邊介面:      1) 12 路光耦合GPI      2) 8 路光耦合GPO (有帶+24V電源的接點)      4) 2 路DAC (12-bit, 0~10V)      5) 8 路ADC (16-bit, -10.24V~+10.24V, 外接 ADS8688 晶片)      6) RS-485 x 4, RS-232 x 1, FDCAN-bus x 2, USB-to-COM x 1      7) Ethernet RJ-45 (外接 LAN8720 PHY)      8) 8 路高速 PWM 輸出 值得一提的是這款工控的 CAN bus 是高速的 FDCAN (Flexible Data-rate CAN),傳輸速度可達 5Mbps,原本的 CAN 只有 1Mbps。 圖一:STM32H750 工控板的外觀         工控板上面外接了一顆 ADS8688 的 ADC 晶片,其規格是 16-bit 解析度,總取樣率為每秒 500k samples。在取樣的效能上,比起之前的 STM32F407 工控板提升了不少,請參考前文  https://han-ya.blogspot.com/2024/03/stm32f407-24-bit-adc.html 。雖然 ADS8688 晶片最高取樣率為每秒 500k,但是實際與 STM32H750 搭配後,只剩下 53.9k 左右,因為兩者間的通訊為 SPI,需要處理每筆通道的中斷服務,這會耗損不少時間。筆者也曾試著用 SPI_DMA 方式,看看能不能解放更多 MCU 的時間,無奈,效果更差,大概只剩不到 20k 左右。