前言
隨著物聯(lián)網(wǎng)的發(fā)展,未來(lái)的嵌入式產(chǎn)品必然朝著更加智能化、場(chǎng)景多樣化、實(shí)時(shí)性更高等趨勢(shì)發(fā)展,要處理好這些任務(wù)時(shí),一個(gè)好的RTOS少不了。對(duì)于嵌入式開(kāi)發(fā)者來(lái)說(shuō),了解和學(xué)習(xí)一個(gè)RTOS也是必要項(xiàng)之一,上手簡(jiǎn)單、及時(shí)性和可靠性高的FreeRTOS是最佳選擇,和對(duì)開(kāi)發(fā)者友好、物聯(lián)網(wǎng)開(kāi)發(fā)平臺(tái)機(jī)智云配合,剛好滿足了我對(duì)智能化開(kāi)發(fā)的需求。 下面,我將從基礎(chǔ)入手,來(lái)講講使用機(jī)智云+STM32F407+ESP8266+freeRTOS的設(shè)計(jì),分別定義了GPIO輸入輸出,PWM輸入輸出。(本文由機(jī)智云開(kāi)發(fā)者發(fā)表于CSDN,ID號(hào):霽雪寒霄)
01 WiFi模塊燒錄GAgent 1.1 在機(jī)智云官網(wǎng)上下載固件,下載好的固件如圖1-1所示。
1.2 在樂(lè)鑫官網(wǎng)下載ESP8266的燒寫(xiě)工具。其中第一欄選擇燒寫(xiě)的固件文件(32位含有combine的文件),并勾選前面的方框,起始地址填0,CrystalFreq選擇26M,SPI SPEED選擇40MHz,SPI MODE選擇DOUT,FLASH SIZE選擇32Mbit-C1。如圖1-2所示。
1.3 按照?qǐng)D1-3連接電路。點(diǎn)擊燒寫(xiě)軟件的START,會(huì)出現(xiàn)“等待上電同步”字樣,點(diǎn)擊KEY1觸發(fā)后,會(huì)顯示下載中,知道出現(xiàn)“Finish”字樣,表示固件燒寫(xiě)成功。
02 創(chuàng)建產(chǎn)品及數(shù)據(jù)點(diǎn) 2.1 進(jìn)入機(jī)智云官網(wǎng),注冊(cè)登錄后進(jìn)入開(kāi)發(fā)者中心,可以看到如圖2-1所示界面。
2.2 點(diǎn)擊創(chuàng)建產(chǎn)品,在創(chuàng)建界面設(shè)定好產(chǎn)品名稱,選擇WIFI/移動(dòng)網(wǎng)絡(luò)方案。選擇通訊方式為WIFI,數(shù)據(jù)傳輸方式為定長(zhǎng)。如圖2-2所示。
2.3 創(chuàng)建完成后,點(diǎn)擊“數(shù)據(jù)點(diǎn)”,可以新建不同類型的數(shù)據(jù)點(diǎn),如圖2-3所示,該處新建了16個(gè)不同的數(shù)據(jù)點(diǎn)。
03 使用機(jī)智云串口工具配置WiFi模塊 3.1 下載機(jī)智云串口調(diào)試助手并解壓,將WIFI模塊與USB轉(zhuǎn)TTL相連(WIFI模塊的TX連TTL的RX,RX連TTL的TX,VCC一定得接3.3V),插上計(jì)算機(jī)USB接口后,打開(kāi)機(jī)智云串口調(diào)試助手,選擇“模擬V4MCU”,如圖3-1所示。
3.2 進(jìn)入剛創(chuàng)建機(jī)智云產(chǎn)品中,點(diǎn)擊“基本信息”后,獲取到Product Key和Product Secret,如圖3-2-1所示。將Product Key和Product Secret輸入機(jī)智云串口調(diào)試助手,并點(diǎn)擊保存,會(huì)彈出如圖3-2-2的窗口,且右側(cè)會(huì)顯示我們定義的數(shù)據(jù)點(diǎn)列表。
3.3 選擇好USB轉(zhuǎn)TTL的串口,并點(diǎn)擊“打開(kāi)串口”,WIFI模塊會(huì)自動(dòng)詢問(wèn),如圖3-3所示。
3.4 打開(kāi)“指令界面”,點(diǎn)擊AirLink后,接收界面會(huì)出現(xiàn)如圖3-4類似的數(shù)據(jù),代表WIFI模塊完好。
3.5 進(jìn)入機(jī)智云手機(jī)App,注冊(cè)登錄后,點(diǎn)擊右上角“+”號(hào),選擇“一鍵配置”,輸入手機(jī)連接的WIFI的SSID和密碼(此時(shí)須保證調(diào)試的計(jì)算機(jī)與手機(jī)連接的是同一WIFI,且最好使用路由器),點(diǎn)擊“下一步”,選擇“樂(lè)鑫”,點(diǎn)擊 “確定”,再次點(diǎn)擊機(jī)智云串口調(diào)試助手指令界面的“AirLink”,再點(diǎn)擊手機(jī)App上的“我已完成上述操作”,進(jìn)入“搜索并連接設(shè)備”,具體流程如圖3-5-1,3-5-2所示。
3.6 點(diǎn)擊搜索到的設(shè)備,在手機(jī)App上控制數(shù)據(jù)點(diǎn),可以看到機(jī)智云串口調(diào)試助手?jǐn)?shù)據(jù)點(diǎn)的值跟隨變化(如圖3-6-1,3-6-2所示),則代表WIFI模塊配置完成。
04 配置MCU代碼 實(shí)現(xiàn)WIFI與MCU的通信協(xié)議(可使用機(jī)智云MCU代碼生成),配置Cube mx并生成代碼。
4.1 進(jìn)入機(jī)智云網(wǎng)站產(chǎn)品頁(yè)面,點(diǎn)擊MCU開(kāi)發(fā),硬件方案選擇“獨(dú)立MCU方案”,硬件平臺(tái)選擇“STM32F407x”,并在Product Secret處輸入該產(chǎn)品的Product Secret,點(diǎn)擊生成代碼包,如圖4-1所示。
4.2 稍等片刻待代碼包生成,下載并解壓,如圖4-2所示。
4.3 由于在該實(shí)驗(yàn)中我們使用的是STM32F407VGT6,而機(jī)智云生成代碼的MCU為STM32F407ZGT6,故我們需要移植一下,首先打開(kāi)Cube mx新建一個(gè)項(xiàng)目,選擇STM32F407VG(如圖4-3所示),雙擊創(chuàng)建項(xiàng)目。
4.4 點(diǎn)擊File->Import Project,點(diǎn)擊“…”并選擇剛才機(jī)智云生成的項(xiàng)目文件中的ioc文件(如圖4-4-1所示),點(diǎn)擊“OK”后,直到出現(xiàn)圖4-4-2所示窗口,點(diǎn)擊“Close”,表示導(dǎo)入成功,導(dǎo)入后的引腳配置如圖4-4-3所示。
4.5 首先配置SYS,Timebase Source選擇TIM14,如圖4-5-1所示。然后配置除了KEY1,KEY2的GPIO(KEY1,KEY2已經(jīng)自動(dòng)生成),如圖4-5-2所示。
4.6 配置Timers,TIM2是項(xiàng)目生成時(shí)自動(dòng)配置,所以不用配置,配置TIM4時(shí),將Clock Source選擇為Internal Clock。TIM4的Channel 1-Channel 4為PWM輸出(如圖4-6-1),該實(shí)驗(yàn)中配置的引腳為PB6-PB9,在下方的Configuration中的Parameter Settings中配置如圖4-6-2所示,其他地方使用默認(rèn)即可。
4.7 再配置ADC,勾選IN4-IN7(對(duì)應(yīng)引腳為PA4-PA7),如圖4-7-1所示。然后在下方Configuration中DMA Setting,點(diǎn)擊“Add”,出現(xiàn)如圖4-7-2所示界面,選擇ADC1,并配置成如圖4-7-3所示, Parameter Settings中配置如圖4-7-4所示,其他不用配置,保持默認(rèn)即可,值得注意的是,該處使用到了TIM8,TIM8的Mode中Clock Source選擇為Internal Clock,TIM8的Configuration配置如圖4-7-5所示。
4.8 點(diǎn)擊System Core中的NVIC,配置優(yōu)先級(jí)如圖4-8-1所示,Code generation配置如圖4-8-2所示。
4.9 點(diǎn)擊Middleware中的FREERTOS,interface選擇CMSIS_V1(如圖4-9-1所示),在下方Tasks and Queues并創(chuàng)建以下6個(gè)Task,如圖4-9-2所示。
05 編寫(xiě)外設(shè)驅(qū)動(dòng)程序 編寫(xiě)外設(shè)驅(qū)動(dòng)程序,直至手機(jī)App能與MCU建立通信,并能控制傳感器外設(shè)。
5.1 打開(kāi)keil5,在main.c中找到HAL_TIM_PeriodElapsedCallback函數(shù),將整個(gè)函數(shù)注釋掉,然后在gizwits_product.c文件中同樣可以找到同名HAL_TIM_PeriodElapsedCallback函數(shù),將剛才注釋函數(shù)的函數(shù)體內(nèi)容放入其中,如圖5-1-1,5-1-2所示。
5.2 將main.c中while(1)中內(nèi)容剪切放入創(chuàng)建的StartGizwitsHandleTask任務(wù)中,用于處理數(shù)據(jù)上行下發(fā),如圖5-2-1,5-2-2所示。
5.3 將StartSysInitTask函數(shù)中for循環(huán)內(nèi)容改為vTaskDelete(NULL),如圖5-3所示。
5.4 在gizwits_product.h文件中頭文件導(dǎo)入處添加(如圖5-4-1所示)“#include“smsis_os.h””,并添加如圖5-4-2所示內(nèi)容。
5.5 在common.h中創(chuàng)建聯(lián)合體,如圖5-5-1所示,其中高8位用以區(qū)別GPIO和PWM,次高8位用來(lái)區(qū)別引腳,后16為存入數(shù)值。在函數(shù)gizwitsEventProcess中,for循環(huán)外聲明聯(lián)合體(如圖5-5-2所示),for循環(huán)中switch—case語(yǔ)句中,注釋掉if—else判斷,對(duì)聯(lián)合體變量賦值,并利用通知將該聯(lián)合體發(fā)送出去,如圖5-5-3所示(個(gè)例)。
5.6 在StartGPIO_OutputTask函數(shù)中,在for循環(huán)外添加如圖5-6-1的聲明代碼,在for循環(huán)內(nèi),刪除原先所有代碼,添加如圖5-6-2所示代碼,本圖只舉case為1的情況,添加后可對(duì)GPIO進(jìn)行開(kāi)關(guān)操作。
5.7 在StartPWM_OutputTask函數(shù)中,需要開(kāi)啟PWM通道,并需要先將CCR置為0(在for循環(huán)外,如圖5-7-1所示),并就通知內(nèi)容的不同,做不同的動(dòng)作(在for循環(huán)內(nèi)),添加代碼部分如圖5-7-2所示。
5.8 在StartGPIO_InputTask函數(shù)中,直接利用HAL_GPIO_ReadPin讀取GPIO狀態(tài),并存入數(shù)據(jù)點(diǎn)結(jié)構(gòu)體中,如圖5-8-1所示。在StartADC_inputTask函數(shù)中,需要先開(kāi)啟DMA,其中adc_result_buf為定義的一個(gè)長(zhǎng)度為4的數(shù)組,添加代碼如圖5-8-2所示。
5.9 將main.c中的如下代碼剪切(如圖5-9-1所示)到StartSysInitTask函數(shù)中(如圖5-9-2所示)。
06 檢測(cè) 至此,兩類輸入/輸出代碼完成,可以根據(jù)不同用途添加代碼,在這里我用到了一個(gè)LED檢測(cè)了一下。
6.1 手機(jī)上打開(kāi)機(jī)智云App,控制舵機(jī)轉(zhuǎn)動(dòng)和LED亮滅。如下圖所示。
責(zé)任編輯:PSY
原文標(biāo)題:嵌入式開(kāi)發(fā)必備項(xiàng):用FreeRTOS+機(jī)智云開(kāi)發(fā)智能設(shè)備
文章出處:【微信公眾號(hào):機(jī)智云開(kāi)發(fā)者】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
-
嵌入式
+關(guān)注
關(guān)注
5152文章
19675瀏覽量
317662 -
RTOS
+關(guān)注
關(guān)注
24文章
851瀏覽量
121188 -
GPIO
+關(guān)注
關(guān)注
16文章
1280瀏覽量
54121 -
機(jī)智云
+關(guān)注
關(guān)注
3文章
617瀏覽量
26853
原文標(biāo)題:嵌入式開(kāi)發(fā)必備項(xiàng):用FreeRTOS+機(jī)智云開(kāi)發(fā)智能設(shè)備
文章出處:【微信號(hào):IoTMaker,微信公眾號(hào):機(jī)智云開(kāi)發(fā)者】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
STM32F407機(jī)智云開(kāi)發(fā)esp8266固件燒寫(xiě)一直不成功
嵌入式開(kāi)發(fā)必備項(xiàng):用FreeRTOS+STM32F4+機(jī)智云開(kāi)發(fā)智能設(shè)備
STM32F407ZGT6+esp8266軟件APP硬件組成
VScode嵌入式開(kāi)發(fā)之ESP8266詳解
自動(dòng)測(cè)量系統(tǒng)STM32F103C8+ESP8266+DHT22的相關(guān)資料分享
基于STM32與esp8266機(jī)智云app聯(lián)網(wǎng)總結(jié)
從5方面描述STM32F407+ESP8266連接機(jī)智云過(guò)程
機(jī)智云Arduino與ESP8266 ESP12-F之間的連接

基于FreeRTOS的嵌入式云臺(tái)控制系統(tǒng)設(shè)計(jì)

嵌入式開(kāi)發(fā)-WIFI模塊-ESP8266使用詳細(xì)介紹

VScode嵌入式開(kāi)發(fā)之ESP32以及ESP8266入門(mén)

【STM32F4】STM32F407+ESP8266連接機(jī)智云過(guò)程詳解

STM32F103 + ESP8266與機(jī)智云開(kāi)發(fā)常見(jiàn)問(wèn)題集錦:入門(mén)者必讀!

評(píng)論