ESPcopter無人機源碼分析.3(閱讀環境搭建)
ESPcopter無人機源碼分析.2(使用分時庫)
ESPcopter無人機源碼分析.1
ESPcopter無人機初探(UWB定位+ESP8266MCU)
這篇文章同樣是不完整的,因為我隔得時間太久了,我思路沒有了。
https://www.espressif.com/zh-hans/support/documents/technical-documents?keys=&field_type_tid%5B%5D=14ESP8266的文檔頁面
https://github.com/esp8266/ArduinoESP8266 arduino
https://github.com/yunswj/esp8266-drone應該源碼在我的GT上面

把源碼放一起

一個最簡單的demo

這是引入的頭文件引入的文件

啟動了很多的實例:基礎,TOF,PID,姿態解算,積木接口


對于一個無人機來講,需要管理的硬件有很多,需要一個比較強大的初始化

不知道為啥

為了串口正確初始化

這個應該是Arduino里面的封裝

要啟用的引腳

對速度的控制在應該drone里面很重要,使用PWM去體現,所有有必要對PWM展開說說。

符號樹

還有對4個電機引腳的初始化工作,使用4個PWM的通道

4給電機4個通道

全部關閉,把4個通道都關閉,占空比都關了!!!
https://github.com/espressif/ESP8266_NONOS_SDKhttps://github.com/espressif/ESP8266_RTOS_SDK樂鑫的開發有一個NONOS_SDK,還有一個RTOS
對于ESP8266_NONOS_SDK,
用ICACHE_FLASH_ATTR編譯的函數編譯到IROM部分; 對于這些功能,CPU執行指令高速緩存中的代碼。
相反,系統啟動時沒有ICACHE_FLASH_ATTR的函數加載到IRAM中。因此,使用ICACHE_FLASH_ATTR有助于降低IRAM要求。
不要在中斷處理程序中使用ICACHE_FLASH_ATTR函數,因為它可能與閃存R / W操作沖突。


static pwm_phase_array pwm_phases[3];typedef?struct?pwm_phase(pwm_phase_array)[PWM_MAX_CHANNELS?+?2];
我覺得這個時代寫的東西應該是NOSDK寫的
Non-OS SDK 主 要使?定時器和回調函數的?式實現各個功能事件的嵌套,達到特定條件下觸發特定功能 函數的?的。

此時不知道花了多少時間。。。。:
https://www.espressif.com/sites/default/files/documentation/2c-esp8266_non_os_sdk_api_reference_cn.pdfAPI在此

PWM在意的是占空比的時間,就是這個高電平的時間

這個地方看wiki的解釋好了

https://zh.wikipedia.org/zh-cn/%E8%84%88%E8%A1%9D%E5%AF%AC%E5%BA%A6%E8%AA%BF%E8%AE%8A
PWM是一個23位的硬件定時器,NMI就是個不可屏蔽中斷

總之就是很吊,爺一啟動誰都攔不住


硬件定時器不能和PWM混用,雖然Arduino的定時器控制起來很鬼畜

NMI就是要一種全部資源傾向它的中斷,很狂,但是為了這個任務一馬前行

寄存器不是很多,比較好控制

PWM的配置
PWM計算出定時器的周期,然后保存各通道的參數。中斷以后會被要求給一個新的參數,這個參數使用標志位來控制,看不懂了,看看代碼。

在這里

這是Demo,電燈的程序,PWM控制

這里就似乎跟著我們的代碼看定義,燈的定義是1,0是個傳感器設備

PWM通道5個,剩下是RGB,剩下是冷色和暖色?

這個就是我們文檔里面說的這個參數保存

因為是SDK嘛,數據類型也要自成體系

這里就是函數的修飾,這個函數編譯的時候放哪里

這個是得到通道數量

就是這個結構體的信息

set就是設置燈的占空比信息

得到PWM的周期


