前言
本篇文章將分享單片機(jī)移植的經(jīng)驗。可以下載并按步驟移植,也可以直接使用已移植好的工程文件。文中將介紹我在移植過程中遇到的問題,并提供解決方案,供大家參考。
準(zhǔn)備工作
1.硬件:主控:stm32f103c8t6 ,WiFi模塊:ESP-01s ,下載器:ST-LINK
代碼資源:未移植和移植后
(注:本文是基于stm32標(biāo)準(zhǔn)庫移植,不是HAL庫,HAL可參考第一期給的資源)
各模塊介紹
1、keil工程說明
下載完未移植的代碼包后,打開工程,在System中有我配置的配網(wǎng)的基本模塊:USART1(用于串口調(diào)試,接USB轉(zhuǎn)TTL連接到電腦上,打開串口助手對后期通信進(jìn)行測試,單本部分功能我并未用上,也未進(jìn)行測驗,就不誤人子弟了,不影響配網(wǎng)),USART3(用于WiFi通信,必要),TIM3(1ms定時,必要);在Hardware中有個RGB模塊(其實就是點燈),后期用于驗證。
2、MCU代碼包說明
代碼移植
1、打開開發(fā)指南,開發(fā)指南中有我們移植需要做的具體工作,以及每個文件,函數(shù)的說明,就不在過多介紹,下面直接開始移植。
2、將MCU代碼包的Gizwits和Utils復(fù)制到keil的工程文件夾中。
3、打開工程,將上面兩個文件加入工程中,并將路徑包含進(jìn)去。
(注:如果運行報錯可以看下C/C++文件路徑:keil5的include路徑要根據(jù)自己下載的keil5路徑選擇;Linker也可看下是否有此行,同理根據(jù)自己的keil5的下載路徑找)
4.通信串口(USART3)接收配置:開發(fā)指南中給的是USART2,不過不影響,也可以改用其他的串口(注:stm32f103c8t6只有USART1-3)。將開發(fā)手冊中串口2的中斷函數(shù)移植到工程文件的USART3中斷函數(shù)處。并將串口2改成串口3:USART_ClearITPendingBit(USART3,USART_IT_RXNE);
value = USART_ReceiveData(USART3);移植完后會報一個警告,在上面加上( #include "gizwits_product.h" )頭文件即可。
4、發(fā)送數(shù)據(jù)配置:在工程中打開gizwits_product.c文件,找到開發(fā)手冊中給出的函數(shù),將紅色部分串口改為3,
USART_SendData(USART3, buf[i]);
while (USART_GetFlagStatus(USART3, USART_FLAG_TXE) == RESET);
USART_SendData(USART3,0x55);
while (USART_GetFlagStatus(USART3, USART_FLAG_TXE) == RESET);移植進(jìn)去,再將usart3的頭文件( #include "usart3.h" )包含進(jìn)去。
5、1ms定時器(TIM3)配置:開發(fā)指南給的是TIM3,這里我們也選擇TIM3(也可配置其他定時器,但此開發(fā)板只有TIM1-4,建議不要使用TIM1高級定時器,因為其他三個定時器都有TIMx_IRQn中斷,但TIM1沒有,用TIM1_UP_IRQn沒有效果,這是我在配置過程中遇到的問題之一,僅供參考,有大佬知道原因也可以告訴我。)只需將紅色部分( gizTimerMs(); )移入我們工程的TIM3中斷函數(shù)處,在加上( #include "gizwits_product.h" )頭文件,此時依舊會報一個警告,我們再回到gizwits_product.c文件,找到void gizTimerMs(void);將其復(fù)制到gizwits_product.h文件中聲明一下。
6、芯片復(fù)位:打開gizwits_product.c文件,找到void mcuRestart(void),將機(jī)智云提供的復(fù)位函數(shù)
__set_FAULTMASK(1);
NVIC_SystemReset();
復(fù)制進(jìn)去。
7、串口打印功能(USART1):此部分功能我并未測試,大家可以自己去測試看看,不測試也沒關(guān)系,大家保留工程中的USART1文件內(nèi)容不變即可,不影響配網(wǎng),但要注意,由于文件中有重定向的的函數(shù)int fputc(int ch, FILE *f),所以在編譯前一定要在魔法棒里C/C++中勾選Use MicroLIB,否則程序會卡死。!!!另外,在此文件中一定要加上頭文件( #include "gizwits_protocol.h" )。這是我后面下載后發(fā)現(xiàn)產(chǎn)生不了WIFI信號又補充的。
8、串口和定時器配置完成后,我們在main.c文件中進(jìn)行添加頭文件( #include "USART3.h"
#include "usart1.h" #include "tim3.h" )和初始化( USART3_Init(9600);USART1_Init();
Timer_TIM3_Init(10-1,7200-1); ),編譯運行,沒有報錯。
9、main.c函數(shù)移植:打開之前生成的MCU包,打開User里的main.c,將userInit(); gizwitsInit();和userHandle();gizwitsHandle((dataPoint_t *)¤tDataPoint);復(fù)制到我們工程文件的main.c文件對應(yīng)處,此時會報錯,我們再將頭文件( #include "gizwits_product.h"
#include "gizwits_protocol.h" )添加進(jìn)去。
10、配網(wǎng)設(shè)置:配網(wǎng)模式有AIRLINK(自動)和SOFTAP(手動)兩種,機(jī)智云給的開發(fā)指南建議用按鍵進(jìn)行配網(wǎng),由于本工程并沒有按鍵模塊,所以我們不用按鍵,直接進(jìn)行配網(wǎng)。將開發(fā)指南的兩個
配網(wǎng)指令( gizwitsSetMode(WIFI_SOFTAP_MODE);gizwitsSetMode(WIFI_AIRLINK_MODE); )直接復(fù)制到main.c文件中,先啟用SOFTAP模式,編譯。
硬件連接
(注:EN引腳一定要使能,接VCC,否則即使文件配置好了,也不會產(chǎn)生WIFI,我之前就是沒配置EN引腳,導(dǎo)致我花了好幾天才找到這個問題)
配網(wǎng)(SOFTAP)
1、手機(jī)先產(chǎn)生一個熱點。設(shè)備名稱:盡量為英文,短點 ,密碼:配置簡單點,重點是在更多共享配置里將熱點的AP頻段配置成2.4GHz。
2、將程序下載進(jìn)開發(fā)板,調(diào)試,此步驟需要進(jìn)行反復(fù)調(diào)試,運氣好可能可能第一次就會收到一個WIFI信號,運氣不好可能就要反復(fù)調(diào)試。
調(diào)試的辦法有:1.程序下載完成后,拔掉ST-LINK,再充新插上,剛上電可能看見WiFi模塊上的藍(lán)燈頻繁閃爍,打開手機(jī)WIFI搜索熱點,看看是否有XPG-GAgent-開頭的熱點,如果燈滅了還有熱點,那么就繼續(xù)拔掉重插。
3、將WIFI模塊的vcc供電拔掉,重新插上,開始時WIFI的藍(lán)燈閃爍的也比較頻繁,打開手機(jī)WIFI搜索熱點,看看是否有XPG-GAgent-開頭的熱點,如果燈滅了還有熱點,那么就繼續(xù)拔掉重插。
(如果前面步驟沒問題,重復(fù)上面兩步,就可以接收到一個XPG-GAgent-開頭的熱點,我也不知道怎么回事,我前一個項目很好配,而這個項目我在寫文章的時候要調(diào)試好幾遍,才能配上,可能串口不一樣吧。)
4、打開手機(jī)機(jī)智云APP,直接跳過登錄,點擊右上角加號-------熱點配網(wǎng)-------手機(jī)要連接上路由器或者另一個手機(jī)的熱點(這個連上直接有,一般不用填)--------然后填寫機(jī)智云的熱點和密碼(默認(rèn):123456789)------下一步------選擇WIFI模塊(ESP-01s選樂鑫就行)-----一直下一步跳轉(zhuǎn)到XPG-GAgent-連接頁面-----連接之后退回-----開始搜索,這個即使配網(wǎng)完成也不會自動取消,到時未取消會顯示配置超時,不用管,返回就可以看到配網(wǎng)成功。
01
02
03

04
此時,配網(wǎng)就完成了(同理也可以配置成AIRLINK模式,在keil里燒錄對應(yīng)指令,然后手機(jī)一鍵配網(wǎng))。
驗證
即使連上網(wǎng)了,我們?nèi)绾沃朗欠衲艹晒Πl(fā)送數(shù)據(jù)呢,我們以LED點亮驗證一下。
在開發(fā)指南中提到了數(shù)據(jù)下發(fā)和上報的兩個功能函數(shù)userHandle();和gizwitsHandle((dataPoint_t *)¤tDataPoint); 我們也將其放在while循環(huán)中,下面我們就用它們來驗證功能。
1、回到keil工程,打開gizwits_product.c文件,將rgb.h的頭文件包含進(jìn)去( #include "rgb.h" ),然后將開燈和關(guān)燈的指令分別放進(jìn)以下位置。(注意:自己的led是怎樣的,我用的是共陰的RGB燈)。
2、編譯,下載。然后拔掉電源重新配網(wǎng)。(第二次配的就比較快了)。
結(jié)果演示
開關(guān):
-
單片機(jī)
+關(guān)注
關(guān)注
6067文章
44991瀏覽量
650409 -
代碼
+關(guān)注
關(guān)注
30文章
4900瀏覽量
70731 -
機(jī)智云
+關(guān)注
關(guān)注
3文章
617瀏覽量
26846
發(fā)布評論請先 登錄
評論