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