STM32 隨手筆記 === ###### tags: `stm32`, `HiYouGood` 因為hackpad太亂了 所以想說搬家一下,不過資料量有點大,所以可以也是慢慢建立吧~ 這篇我主要是玩stm32F407 與stm32f429 --- ## 燒錄與編譯方法 玩板子最重要的就是改好程式之後要放板子上啦 ### st-link/v2 一種可以專門用來debug的功能元件,須輸入以下指令 **更新板** ```shell= sudo apt-get install automake* libtool libusb-1.0-0-dev git clone http://github.com/texane/stlink.git cd stlink make release cd build/release make sudo make install ``` **舊的(目前缺乏 autogen.sh)** ```shell= sudo apt-get install automake* libtool libusb-1.0-0-dev git clone http://github.com/texane/stlink.git cd stlink ./autogen.sh ./configure --prefix=/usr make sudo make install sudo cp 49-stlinkv2.rules /etc/udev/rules.d/ ``` 執行" ./configure --prefix=/usr " 會遇到有遇到syntax error near unexpected token USB的問題,要使用下面這個安裝來解決 ```shell= sudo apt-get install pkg-config ``` 這裡安裝完後可能要從./autogen.sh重新開始往下執行 以前王國明有問我''sudo cp 49-stlinkv2.rules /etc/udev/rules.d/" 這行在幹麻 cp 是liunx的複製指令,所以他是把49-stlinkv2.rules複製到 /etc/udev/rules.d這個路徑底下,那這個/etc/udev/是專門管理週邊元件系統rules.d是則是週邊裝置的屬性設定,所以應該是屬性設定。 ### compiler下載 再來就是要安裝arm特有的compiler,沒有安裝這個下載程式做make會出現一堆stm32 蛇摸週邊裝置的Error ```shell= sudo apt-get install gcc-arm-none-eabi ``` ## 點燈測試 {%youtube ckJ5_NJ8X7c %} --- ## SG90 AC servo 馬達控制 ![](https://i.imgur.com/lysZ0Lv.jpg) 簡單來說就是要控制上面照片的馬達 ### 馬達規格 Tower Pro SG90 三條線顏色分別是黃、紅、棕,對應訊號、電源、接地 重量:9g 尺寸:23*12.2*29mm 工作電壓:4.8V 轉矩:1.8kg-cm,當工作電壓為4.8V時 運轉速度:0.1秒 ∕ 60度 ,當工作電壓為4.8V時 脈衝寬度範圍:500~2400µs 死頻帶寬度(dead band width):10µs ### 範例程式執行方法 ```shell= git clone https://github.com/whosyourdadd/sg90_test cd sg90_test make cd TIM_PWM_Output make make flash ``` {%youtube bP_F8wBSxPU %} SG90應用:自動餵食器 之前說要做自動餵食器,被同事說是說說而已,因此就參考以下網址做了一個簡單板的。 http://www.koitw.com.tw/discuz/forum.php?mod=viewthread&tid=1776 ![](https://i.imgur.com/CSCg2oQ.jpg) 上圖為利用厚紙板做出簡單的機構 ![](https://i.imgur.com/FL8mGnc.jpg) stm32每24小時轉180度將飼料投入魚缸中,並重新記時 黑色按鈕可以重新記時,並且使馬達立即旋轉180度 程式在此 https://github.com/whosyourdadd/AutoFeedFish --- ## joystick搖桿+螢幕控制 ![](https://chenfuguo.gitbooks.io/arduino/content/Shields/JoyStick.png) 這種搖桿主要是透過可變電阻造成不同方向的控制 其中有五個輸入: 5v,GND,VRx,VRy,SW * 5V,GND: 就不講了,主要來講其他的功能 * VRx,VRy: 原始值為1023往左會逐漸減成0,往右會逐漸遞增成2048 * SW: 起始值為 1(高準位),按下去時變成0(低準位) {%youtube WObCj7ppaic %} --- ## BLDC & ESC 近買了一台四軸來玩,裡面用直流無刷馬達與電子調速器做控制. ![](https://i.imgur.com/RjGTLzn.png) 間這個就是電子調速器ESC,右下是無刷馬達,圖中可以看到電容兩邊有紅黑兩條線,這兩條是專門接電池用的,電池印象是11v,左上有三條黃紅棕,則是控制用的線.若電池通電,或是ESC端接電,後方的小燈會亮,並且發出一些聲音,可以確認ESC是否被開啟 ESC控制線的部份須注意一以下方式做連接: 棕色(或黑色):地線與板子一同接地 紅色:電源線vdd與板子5 v相同 黃色(或白色):PWM訊號線,這條線最重要,根據不同的PWM訊號可以對ESC做控制 再來要講PWM的部份: 之前在玩sg90的時候,有寫說適用的脈寬在0.5~2.5ms左右,而ESC的部份好像也是。利用這個範圍的波寬,ESC會產生三個相位的信號驅動BLDC.但是按照ESC的datasheet目前我還沒辦法確定常用的油門最低到底對應的脈寬是多少ms.因此ESC的初始化流程還需要配合遙控才能做完善得初始化 接下來要做的應該就是買一組按鈕,配上之前買的另一塊stm32做成遙控器,連結RF模組,根據按下去的時間長短來驅動PWM脈寬. ## stm32 SYSTEM Clocks 系統時脈 三種系統實脈可以選擇的 * HSI * HSE * Main PLL ![](https://i.imgur.com/eDQMClq.png) http://www.programering.com/a/MzM0QjMwATM.html 可以參考這篇來分析stm32的時脈 內容大概是說,可以透過system_stm32f4xx.c這個檔案做分析 參考程式裡面相關下面的片段 ``` clike= /**************** PLL Parameters ***************************/ /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */ #define PLL_M 25 #define PLL_N 300 /* SYSCLK = PLL_VCO / PLL_P */ #define PLL_P 2 /* USB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQ */ #define PLL_Q 7 #endif /* HSE_VALUE */ /***********************************************************/ ``` 內部石英振盪器的部份參考stm32f4xx.h其中的這個片段 ``` clike= #if !defined (HSE_VALUE) #define HSE_VALUE ((uint32_t)25000000) /*!< Value of the External oscillator in Hz */ #endif /* HSE_VALUE */ ``` 總括來說透過鎖相迴路(PLL)做計算,上面的PLL Param有公式 SYSCLK = PLL_VCO / PLL_P 目前系統時脈是用內部振盪器,所以 PLL_VCO = (25M /25 ) *300 = 300M SYSCLK = PLL_VCO / PLL_P = 300M / 2 = 150 M 想看這個截圖的實際參考資料可以看stm32f4系列的手冊 ## NRF24L01 http://www.micro4you.com/files/itead/NRF24L01.JPG 在此專案有兩個類似的傳輸方式: I2C 給 ms5611 (氣壓感測器) 傳輸用的 SPI 給 nrf24l01(RF模組) 傳輸用的 ---------------------- 這裡先介紹nrf24l01部份 [nRF24L01-Datasheet] [參考連結] [相關文獻] [nRF教學 ] github: [QuadrotorGroundStation](https://github.com/zxc2694/QuadrotorGroundStation) note: 必須使用3.3V 做為電源, 因為nRF24L01的工作電壓是1.9~3.6V,使用5V的電壓會把模組燒壞。 此飛控板用的是SPI2的腳位。 會用到的接腳: GND VCC (3.3V) CSN (PB12) SCK (PB13) MISO (PB14) MOSI (PB15) IRQ (PC5) CE (PC4) 補充: [其它模組nRF2401AG](http://blog.sina.com.cn/s/blog_9eb7f83f0101517g.html) [nRF2401AG Datasheet ](http://pdf1.alldatasheet.com/datasheet-pdf/view/144036/ETC1/NRF2401AG.html) [xbee](https://sites.google.com/site/playrobotquickstart/home/xbee-wu-xian-tao-jian) https://www.freertos.org/FreeRTOS-Windows-Simulator-Emulator-for-Visual-Studio-and-Eclipse-MingW.html --- ## 參考資料 老王賣瓜自賣自誇 https://github.com/whosyourdadd/