嵌入式开发:如何使用机智云+STM32F407+ESP8266+freeRTOS设计

发布时间:2024-01-04  

前言

随着物联网的发展,未来的嵌入式产品必然朝着更加智能化、场景多样化、实时性更高等趋势发展,要处理好这些任务时,一个好的RTOS少不了。对于嵌入式开发者来说,了解和学习一个RTOS也是必要项之一,上手简单、及时性和可靠性高的FreeRTOS是最佳选择,和对开发者友好、物联网开发平台机智云配合,刚好满足了我对智能化开发的需求。 下面,我将从基础入手,来讲讲使用机智云+STM32F407+ESP8266+freeRTOS的设计,分别定义了GPIO输入输出,PWM输入输出。(本文由机智云开发者发表于CSDN,ID号:霁雪寒霄)


01 WiFi模块烧录GAgent 1.1 在机智云官网上下载固件,下载好的固件如图1-1所示。

2c7f0cf4-5818-11eb-8b86-12bb97331649.png

1.2 在乐鑫官网下载ESP8266的烧写工具。其中第一栏选择烧写的固件文件(32位含有combine的文件),并勾选前面的方框,起始地址填0,CrystalFreq选择26M,SPI SPEED选择40MHz,SPI MODE选择DOUT,FLASH SIZE选择32Mbit-C1。如图1-2所示。

2d66cc74-5818-11eb-8b86-12bb97331649.png


1.3 按照图1-3连接电路。点击烧写软件的START,会出现“等待上电同步”字样,点击KEY1触发后,会显示下载中,知道出现“Finish”字样,表示固件烧写成功。

2d919148-5818-11eb-8b86-12bb97331649.png

02 创建产品及数据点 2.1 进入机智云官网,注册登录后进入开发者中心,可以看到如图2-1所示界面。

2dd50860-5818-11eb-8b86-12bb97331649.png

2.2 点击创建产品,在创建界面设定好产品名称,选择WIFI/移动网络方案。选择通讯方式为WIFI,数据传输方式为定长。如图2-2所示。

2e405df4-5818-11eb-8b86-12bb97331649.png


2.3 创建完成后,点击“数据点”,可以新建不同类型的数据点,如图2-3所示,该处新建了16个不同的数据点。

2e99e32e-5818-11eb-8b86-12bb97331649.png

03 使用机智云串口工具配置WiFi模块 3.1 下载机智云串口调试助手并解压,将WIFI模块与USB转TTL相连(WIFI模块的TX连TTL的RX,RX连TTL的TX,VCC一定得接3.3V),插上计算机USB接口后,打开机智云串口调试助手,选择“模拟V4MCU”,如图3-1所示。

2efb83a4-5818-11eb-8b86-12bb97331649.png


3.2 进入刚创建机智云产品中,点击“基本信息”后,获取到Product Key和Product Secret,如图3-2-1所示。将Product Key和Product Secret输入机智云串口调试助手,并点击保存,会弹出如图3-2-2的窗口,且右侧会显示我们定义的数据点列表。

2f235ec4-5818-11eb-8b86-12bb97331649.png

30234de8-5818-11eb-8b86-12bb97331649.png


3.3 选择好USB转TTL的串口,并点击“打开串口”,WIFI模块会自动询问,如图3-3所示。

30d5a33a-5818-11eb-8b86-12bb97331649.png


3.4 打开“指令界面”,点击AirLink后,接收界面会出现如图3-4类似的数据,代表WIFI模块完好。

3168f82e-5818-11eb-8b86-12bb97331649.png


3.5 进入机智云手机App,注册登录后,点击右上角“+”号,选择“一键配置”,输入手机连接的WIFI的SSID和密码(此时须保证调试的计算机与手机连接的是同一WIFI,且最好使用路由器),点击“下一步”,选择“乐鑫”,点击 “确定”,再次点击机智云串口调试助手指令界面的“AirLink”,再点击手机App上的“我已完成上述操作”,进入“搜索并连接设备”,具体流程如图3-5-1,3-5-2所示。

3193b582-5818-11eb-8b86-12bb97331649.png

31b2b702-5818-11eb-8b86-12bb97331649.png


3.6 点击搜索到的设备,在手机App上控制数据点,可以看到机智云串口调试助手数据点的值跟随变化(如图3-6-1,3-6-2所示),则代表WIFI模块配置完成。

322608ba-5818-11eb-8b86-12bb97331649.png

324f2560-5818-11eb-8b86-12bb97331649.png

04 配置MCU代码 实现WIFI与MCU的通信协议(可使用机智云MCU代码生成),配置Cube mx并生成代码。
4.1 进入机智云网站产品页面,点击MCU开发,硬件方案选择“独立MCU方案”,硬件平台选择“STM32F407x”,并在Product Secret处输入该产品的Product Secret,点击生成代码包,如图4-1所示。

32ad7700-5818-11eb-8b86-12bb97331649.png


4.2 稍等片刻待代码包生成,下载并解压,如图4-2所示。

32fd3b32-5818-11eb-8b86-12bb97331649.png


4.3 由于在该实验中我们使用的是STM32F407VGT6,而机智云生成代码的MCU为STM32F407ZGT6,故我们需要移植一下,首先打开Cube mx新建一个项目,选择STM32F407VG(如图4-3所示),双击创建项目。

33700c7a-5818-11eb-8b86-12bb97331649.png


4.4 点击File->Import Project,点击“…”并选择刚才机智云生成的项目文件中的ioc文件(如图4-4-1所示),点击“OK”后,直到出现图4-4-2所示窗口,点击“Close”,表示导入成功,导入后的引脚配置如图4-4-3所示。

35553592-5818-11eb-8b86-12bb97331649.png

35f15332-5818-11eb-8b86-12bb97331649.png

3670048e-5818-11eb-8b86-12bb97331649.png


4.5 首先配置SYS,Timebase Source选择TIM14,如图4-5-1所示。然后配置除了KEY1,KEY2的GPIO(KEY1,KEY2已经自动生成),如图4-5-2所示。

37085dec-5818-11eb-8b86-12bb97331649.png

377a268e-5818-11eb-8b86-12bb97331649.png


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所示,其他地方使用默认即可。

37ad8bbe-5818-11eb-8b86-12bb97331649.png

37daef1e-5818-11eb-8b86-12bb97331649.png

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所示。

380753c4-5818-11eb-8b86-12bb97331649.png

3864c0ea-5818-11eb-8b86-12bb97331649.png

38af9002-5818-11eb-8b86-12bb97331649.png

38f82b1e-5818-11eb-8b86-12bb97331649.png

3a0a1616-5818-11eb-8b86-12bb97331649.png


4.8 点击System Core中的NVIC,配置优先级如图4-8-1所示,Code generation配置如图4-8-2所示。

3a5dcc02-5818-11eb-8b86-12bb97331649.png

3a8b981c-5818-11eb-8b86-12bb97331649.png


4.9 点击Middleware中的FREERTOS,interface选择CMSIS_V1(如图4-9-1所示),在下方Tasks and Queues并创建以下6个Task,如图4-9-2所示。

3afbf940-5818-11eb-8b86-12bb97331649.png

3b4083ee-5818-11eb-8b86-12bb97331649.png

05 编写外设驱动程序 编写外设驱动程序,直至手机App能与MCU建立通信,并能控制传感器外设。
5.1 打开keil5,在main.c中找到HAL_TIM_PeriodElapsedCallback函数,将整个函数注释掉,然后在gizwits_product.c文件中同样可以找到同名HAL_TIM_PeriodElapsedCallback函数,将刚才注释函数的函数体内容放入其中,如图5-1-1,5-1-2所示。

3bc244c4-5818-11eb-8b86-12bb97331649.png

3c03e3a2-5818-11eb-8b86-12bb97331649.png


5.2 将main.c中while(1)中内容剪切放入创建的StartGizwitsHandleTask任务中,用于处理数据上行下发,如图5-2-1,5-2-2所示。

3cb47618-5818-11eb-8b86-12bb97331649.png

3cf770ee-5818-11eb-8b86-12bb97331649.png


5.3 将StartSysInitTask函数中for循环内容改为vTaskDelete(NULL),如图5-3所示。

3d20c872-5818-11eb-8b86-12bb97331649.png


5.4 在gizwits_product.h文件中头文件导入处添加(如图5-4-1所示)“#include“smsis_os.h””,并添加如图5-4-2所示内容。

3d6ad9f8-5818-11eb-8b86-12bb97331649.png

3db90da8-5818-11eb-8b86-12bb97331649.png


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所示(个例)。

3e4d715a-5818-11eb-8b86-12bb97331649.png

3ef72ab0-5818-11eb-8b86-12bb97331649.png

3f5c55a2-5818-11eb-8b86-12bb97331649.png


5.6 在StartGPIO_OutputTask函数中,在for循环外添加如图5-6-1的声明代码,在for循环内,删除原先所有代码,添加如图5-6-2所示代码,本图只举case为1的情况,添加后可对GPIO进行开关操作。

3fcd8b1e-5818-11eb-8b86-12bb97331649.png

400e1aa8-5818-11eb-8b86-12bb97331649.png


5.7 在StartPWM_OutputTask函数中,需要开启PWM通道,并需要先将CCR置为0(在for循环外,如图5-7-1所示),并就通知内容的不同,做不同的动作(在for循环内),添加代码部分如图5-7-2所示。

4061a204-5818-11eb-8b86-12bb97331649.png

40d3341e-5818-11eb-8b86-12bb97331649.png


5.8 在StartGPIO_InputTask函数中,直接利用HAL_GPIO_ReadPin读取GPIO状态,并存入数据点结构体中,如图5-8-1所示。在StartADC_inputTask函数中,需要先开启DMA,其中adc_result_buf为定义的一个长度为4的数组,添加代码如图5-8-2所示。

415b5db2-5818-11eb-8b86-12bb97331649.png

4192e728-5818-11eb-8b86-12bb97331649.png


5.9 将main.c中的如下代码剪切(如图5-9-1所示)到StartSysInitTask函数中(如图5-9-2所示)。

42767a56-5818-11eb-8b86-12bb97331649.png

43001522-5818-11eb-8b86-12bb97331649.png

06 检测 至此,两类输入/输出代码完成,可以根据不同用途添加代码,在这里我用到了一个LED检测了一下。
6.1 手机上打开机智云App,控制舵机转动和LED亮灭。如下图所示。

463f375e-5818-11eb-8b86-12bb97331649.png


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>