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