abcd
abcd - 認證專家
我只是個路過的老年人~

注冊於 2年前

回答
83
文章
8
關注者
2

如果是w800做SPI主機,就參考demo目錄下wm_master_spi_demo.c。

tick最小改到1000,不能再小了。關於延時,如果延時時間大於tick值,可以用tls_os_time_delay(N * tick)來實現,如果想延時更小的時間,可以自己寫個for循環調用__NOP();接口來延時,具體循環多少次可以用個IOpin拉高拉低,用示波器或者邏輯分析儀來測量延時時間長短。

w800做softap時不會去連接路由器,它的作用並不是網絡覆蓋範圍變大,而是某些情況下需要起一個熱點創造一個局域網環境來通信。

g_crypto_ctx.gpsec_lock定義的是一個互斥鎖,在SDK的初始化時有調用tls_crypto_init,在這裡創建了該信號量,初始值是1,所以在沒有其他地方用到該模塊時,調用tls_os_sem_acquire(g_crypto_ctx.gpsec_lock, 0);會立即返回接著往下執行。如果有其他地方調用了就會等待,直到能獲取到信號量才能接著往下執行,起到一個互斥鎖的功能。調用tls_os_sem_acquire獲取,信號量的個數會減一,調用tls_os_sem_release釋放,信號量的個數會加一,這兩個接口是成對使用的。在使用信號量實現互斥鎖的功能時,創建信號量時初始值會設置為1,這樣有一個地方獲取了鎖的使用權後,其他地方就需要等待這裡釋放了才能獲取,起到防止出現同一個模塊或者變量或者接口被同時操作的情況。並不是一個物理信號。

可以看下技術文檔下面的《WM_W800_SDK_DEMO使用指導_V1.5.pdf》,需要先打開聯網和mqtt的demo宏,編譯固件,然後需要先發送聯網的命令,聯網成功後再發送mqtt的命令。但是demo中的服務器是不可用的,需要換成自己的服務器地址、端口號、client id等相關的參數。或者用mqtt.isme.fun:1883試下。https://www.winnermicro.com/html/1/156/158/558.html

為什麼用w800給自己的串口發送AT指令的?AT指令是上位機通過串口控制W800工作的,如果是用代碼,那就是在W800上做二次開發,直接調用相關的接口來實現功能就可以了,不需要用到AT指令。如果用自己的APP藍牙配網,可以參考官網的APP代碼把藍牙配網的功能加到自己的APP中,這樣就不需要改動W800的代碼了。也可以開發自己的配網協議,只是需要在W800端配套實現對應的協議。

旋轉編碼器就是2~3個普通的IO口,用W800的GPIO設置為輸入模式連接就可以。剩下的就是讀GPIO的狀態,然後根據旋轉編碼器的時序來判斷旋轉方向。

聯網成功後,調用gethostbyname接口來獲取域名對應的IP地址。

SDK的doc目錄下有w800_apis.chm文件,裡面有各個模塊的接口。具體使用demo目錄下都有相關的demo參考。

DNS server是W801做softap模式時用到的,而且只是把dnsname和自己的IP地址對應,對於應用層來說,一般不會用到這裡的接口。

WIFI協議這部分是封在庫裡面的,沒有對外開放。按你的描述應該是需要改動庫裡面的代碼才能實現的。目前是沒有支持私有協商協議的方式的。

新建文件夾.rar
更新下這兩個文件的改動試下,然後初始化的時候hpmu.ClkSource選PMU_CR_32KRCBYPASS,這種情況下32K時鐘是從40M分出來的,會比較準確,在sleep模式下可以用作時鐘源,而PMU_CLKSOURCE_32RC是用的32K震蕩產生的,會有誤差。

我現在手頭沒有工程了,就改那幾個地方就行,你目前的問題是卡在哪一步了,具體描述下

發布
問題