再見了, 阿公 取得連結 Facebook X Pinterest 以電子郵件傳送 其他應用程式 8月 09, 2012 人生真的很奇怪, 早上我才寫完生日note 傍晚的時候, 接到電話, 我的阿公剛過世了 於是在吃好料的路上, 掉頭, 回頭去見阿公最後一面 阿公臥病在床很多年了, 也許對他來說是種解脫, 可以不用再受苦 我握著阿公的手, 我想說, 謝謝您, 照顧我長大 孫子雖然不成材, 嘴砲一流, 但起碼會自己照顧自己 連老婆都討了, 我以後也會努力活下去的 !! KEEP WALKING 取得連結 Facebook X Pinterest 以電子郵件傳送 其他應用程式 留言
STM32 UART + DMA,使用HAL實作TX/RX,以及不定長度接收 3月 01, 2021 前言 我一般用Segger-RTT來debug。不過這東西也有限制,比如MCU進出sleep mode,他的data stream就會斷掉,也是不方便 http://lihgong.blogspot.com/2016/05/segger-rtt-1.html http://lihgong.blogspot.com/2016/05/segger-rtt-2.html http://lihgong.blogspot.com/2016/05/segger-rtt-3_6.html 我不是很喜歡UART,根本原因是把他 用好 其實不容易。當年選用Segger RTT其實就是要逃避這題(笑);很多年過去了,總是要回來解決這題 STM32 HAL UART driver足足有3726Lines,這代表他的複雜度。假如UART跑在115200bps來說,傳送1byte需要約100us,假設CPU跑在16Mhz就需要1600T。簡單用Polling mode丟資料(或是接收資料)效能很悲劇;用了中斷模式會好一點,但是每個字元都來中斷,遇到高速UART其實效率也不大好;這題的根本解法是需要DMA mode 這篇我會介紹怎在使用STM32CubeIDE,把UART+DMA mode跑起來,TX/RX都有,實作我心裡最佳的框架。這篇直接講結論和步驟,原理很複雜,但是架起來卻很簡單 環境 STM32CubeIDE 你改用STM32CubeIDE了嗎?如果還沒,可以試試看;我用起來很滿意! Nucleo F411RE Board 上面有ST-LINK加開發版,帶條USB線就能出去玩;缺點是MINI-USB線有點討厭 MobaXTerm 好用的Terminal工具,可以連SSH/ RDP/ Serial Terminal UART-TX設定步驟 STM32CUBEIDE設定UART,關鍵是要打開UART中斷,以及打開TX/RX的DMA Enable UART IRQ Enable UART DMA channels 假如要傳送資料,這一段code能幫上忙。這裡面有個資料結構內藏ring-buf,每次user要寫東西就往buf[]擺,並且更新wptr;資料擺上去會呼叫UART HAL library的API來傳送;或是DMA傳送完了,也會檢查還有沒有剩下的要傳。因為有Global variabl... Read more »
小米掃地機器人S20+ review 1月 28, 2025 貓吉與新的掃地機器人 初代小米掃地機器人 我的初代機是 2017四月上市 購買,報價8895元。八年來出動4269次,執勤2130小時,非常耐用 換過不少耗材,模組化設計,幾乎什麼都買得到 常見耗材:主刷,濾網,邊刷 不常見耗材:行走輪,雷射感應頭,主刷馬達,電池*3 經過八年以後,機器開始會不大可靠,也別再逼他了 不容易啟動,似乎馬達需要啟動幾次才開始動 充電失敗,有時候抱怨充電異常,有時候是充電座沒電 小米掃拖機器人S20+ 前一台表現良好,我決定再買一台;我偏好簡單的機器(比較不會壞)。官網有兩台,我分不出明顯的差異,所以買貴的,價格都比8895便宜 S20 :4495 S20+ :6795 使用體驗,都過八年了,變厲害也不過分 基於全室地圖運作 初次使用建立地圖後,可以針對某個區塊掃地或拖地 舊機器每次都是獨立事件,沒有房間的概念 機器比較安靜 睡前按下去掃,噪音不影響睡覺,睡醒就掃好了 拖地功能 平常不用。額外多買了抹布,每個房間拖完換下一條抹布,用抹布海解決問題 除塵盒改善 多了初級濾網,沒讓高階濾網直接碰灰塵;比較好清洗 速度 似乎掃得比較快 電力 似乎有改善耗電量,能用較低的功耗,達成一樣的效果 辨識功能加強 能辨認地毯,並且經過時增強吸力 希望這台機器能像小米初代機一樣耐操。舊的機器還是能當救援投手,每天掃貓砂 Read more »
玩CAN bus的傢伙們 (1) CandleLight-based USB-CAN 3月 06, 2021 硬體介紹 要玩CAN bus,準備一條USB-CAN的線,搭配一台筆電就能樂無窮,我們就從這條線講起。這條線的檔次變化很大,這篇先從[最便宜]的版本說起 這上面其實就是兩樣東西 MCU: STM32F042x6 or STM32F072RB CAN Transceiver: NXP TJA1051/3 簡單看一下MCU的block diagram,關鍵是圖上紅框的CAN和USB介面,完成介面的轉換。我愛用的STM32 F103 C8T6也有這兩個介面,但是USB/CAN不能同時開;倒是比較低階的F0就沒這個限制 這東西的結構簡單,其實網路上很多來源都買得到這個硬體 https://github.com/HubertD/candleLight https://wiki.linklayer.com/index.php/CANtact https://canable.io/ TAOBAO 想要自己做可以參考這個 線路圖 ,很簡單 韌體介紹 最早Geschwister Schneider Technologie生產USB-CAN裝置(以下簡稱gs_usb),他的 Linux kernel driver 已經合入公版,各大Linux版本可以直接使用。驅動程式揭漏gs_usb通訊協定,於是有高手仿照通訊協定寫了 CandleLight FW ,燒入MCU後,電腦就認為這是gs_usb! 分析一下FW的效能,這些介面轉換的東西,不掉封包是基本的需求。STM32F0的記憶體不大,只有16K,他的source code宣告QUEUE深度是64層 假設我們的封包都是8byte放到滿(沒放到滿時case,狀況更差了),不同CAN bus速度能承受的時間如下 1000Kbps, 1us per bit, ~100bit per packet = 100us, 64x = 6.4ms 500Kbps, 2us per bit, ~100bit per packet = 200us, 64x = 12.8ms 125Kbps, 8us per bit, ~100bit per packet = 800us, 64x = 25.6ms USB是主機主機端定期詢問裝置是否有封包要傳送,如果電腦USB很忙,比如正在傳輸檔案,能分到的頻寬就變少;或是CAN bus很滿,buff... Read more »
留言