[TOC] # 背景知識 - [微處理器基礎](https://hackmd.io/6Rj1vNC5S2ya2y2MNScFbg) - **C與嵌入式C** - 針對輸出入來說,一般**C語言**程式通常與特定硬件無關,並且可以在不同的平台上進行編譯和執行。**嵌入式C**則高度依賴於特定硬體,需要直接訪問和控制硬體資源(如I/O端口、計時器、中斷等),因此嵌入式C通常是針對特定的處理器或微控制器編寫的。 - 對於大型運算或受限硬體,嵌入式C需注意記憶體資源或時鐘限制等需求 - 微處理器常需要處理硬件中斷或實時性問題,必須確保程式能夠快速響應硬體事件並且在預定時間內完成任務,因此有時要盡量避免阻塞型寫法或避免使用可能卡住的while迴圈 - 嵌入式C一些常見但你可能不熟的關鍵詞 - [const, static, extern, volatile.........](https://hackmd.io/@ITTfbB0ERYiVmzZhsSs2uw/rkzjHE7MF) - [**基礎控制原理**](https://hackmd.io/uVwsvbctTvyy-59kZsJwLQ) - [**直流有刷馬達原理**](https://youtu.be/-GlYAJTQxRE) - **驅動器** - [驅動器](https://hackmd.io/ahwAnss7RhOiV-Dmt7td_A) - 雖然DC馬達接上正負電源就能做動,但通常微處理器的輸出電流都有限制,除了特小的馬達外幾乎無法驅動,而且直接用接腳接上馬達也有其他問題。試著問問chat哥 : - 為什麼需要馬達驅動器 - 直接用微處理器接馬達正負端有什麼風險 - DC馬達最常見的驅動電路是[H橋電路](https://techweb.rohm.com.tw/product/motor/brushed-motor/brushed-motor-basic/260/) # STM簡介 - [初識STM32](https://ithelp.ithome.com.tw/articles/10264112) - 新訓使用**STM32F407VG**開發板,相關資訊手冊可見FTP - 需注意硬體資訊 - <font color="red">STM32工作電壓為3.3V</font> - 一般拿電表量輸出腳位高電平為3V左右,而有些腳位做為input則是 5V tolerance的,使用上需注意 # 開發方式 ## 軟體介紹 - 教學使用CubeMX、Keil、STMstudio做開發,網路上也有使用其他軟體做 - **CubeMX**圖形化介面可以方便的設定晶片暫存器成指定功能或模式,最後可生成一份含有這些設定的程式碼草稿方便編輯。 - **Keil**主要用於編譯與燒錄,同時也有debug功能能在運行時監測數據 - 在keil中使用debug模式監看全域變數時,若在watch window中,變數的Type顯示uchar,數值無法顯示時,可以嘗試: 1.在main函數中,while迴圈之前,再對變數賦質。 2.將option for target中 C/C++ 欄位的優化選項改成disable。 - **STMstudio**主要用於運行時監測數據 - 使用方法見PPT ## STM 程式庫 - [HAL與LL](https://www.yahboom.com/public/upload/upload-html/1701740148/HAL%E5%BA%93%E5%92%8CLL%E5%BA%93%E4%BB%8B%E7%BB%8D.html) - 實驗室目前使用HAL庫開發,查找資料須注意 ## HAL庫與功能使用 - 以下教學多有查找 Library 部分,對於Library在功能實現上會更有感覺,看過即可不必較真 ### [以LED實例看GPIO與HAL庫](https://hackmd.io/Qt0iS497R3SHwmm_C4xTaA?both) ### [STM的NVIC與GPIO外部中斷](https://hackmd.io/tGaNgWrpTeOGctcVgKFdWA) ### [stm的時鐘樹與總線](https://hackmd.io/CjAqkyoISyy1WQEHbDXYyg) ### [stm的timer與timer中斷](https://hackmd.io/wYWiJ8uUTzaSe_S_LzIykQ?both) ### [stm的高級timer和pwm輸出](https://hackmd.io/TxKDANhpTLCuXCzVzh-R2g) ### [stm的QEP](https://hackmd.io/yXilh4vxT_iCwBD1UJcV5w) ### [stm的ADC](https://hackmd.io/HQB1gfhWQQKIBUjwuMMqng) # 新訓馬達控制 - [新訓馬達控制](https://hackmd.io/cB_Dh7OTQKOQlXPTXn6mNw#%E6%96%B0%E8%A8%93%E9%A0%85%E7%9B%AE)