由于自己使用APM32F427做物联网项目需要使用到ESP8266进行联网远程控制。RT-Thread有着丰富的网络组件包所以基于RT-Thread的组件进行ESP8666 WIFI联网控制。RT-Thread Studio可以图形可视化的进行各种组件的配置比RT-Thread的ENV命令行工具更好用也有人更喜欢ENV的命令行个人习惯。所以下面的开发介绍是基于 RT-Thread Studio 环境下使用的。1. 基于APM42F4系列芯片支持包新建工程1.1 安装APM32F4系列SDK包打开RT-Thread Studio的SDK管理器然后找到Geehy厂商的软件支持包安装我们所需要的APM32F4系列芯片支持包如下图1.2 新建APM32F407的项目工程我的项目使用的芯片是APM32F427但是由于官方可能还没有添加APM32F427芯片的支持所以我找不到这个APM32F427的型号进行创建工程。但是没关系我查阅了下APM32F427的手册与407的差异不大我所使用的就算把系统运行的主频代码修改为官方可以支持的跑到240MHz即可。下面介绍下如何创建1、点击创建RT-Thread项目2、然后结合自己的硬件板子选择合适的配置创建项目即可。1.3 把APM32F407项目修改为APM32F427项目我们需要把新建的APM32F407工程修改为适用于运行在APM32F427芯片型号上。对于我的项目只要修改一下芯片运行的频率即可。1、打开工程中的drv_clk.c文件修改 clk_init 函数对于时钟的初始化函数。2、修改clk_init函数调用 SystemInit 函数的实现。我们把该函数修改为时钟可以运行240MHz就行可以参考官方SDK进行修改。修改代码如下复制voidSystemInit(void){/* FPU settings */#if (__FPU_PRESENT 1) (__FPU_USED 1)SCB-CPACR | ((3UL 10*2)|(3UL 11*2));//! set CP10 and CP11 Full Access#endif/* Reset the RCM clock configuration to the default reset state *//* Set HSIEN bit */RCM-CTRL_B.HSIEN BIT_SET;/* Reset CFG register */RCM-CFG 0x00000000;/* Reset HSEEN, CSSEN and PLL1EN bits */RCM-CTRL (uint32_t)0xFEF6FFFF;/* Reset PLL1CFG register */RCM-PLL1CFG 0x24003010;/* Reset HSEBCFG bit */RCM-CTRL (uint32_t)0xFFFBFFFF;/* Disable all interrupts */RCM-INT 0x00000000;#if defined(DATA_IN_ExtSRAM)SystemInit_ExtSRAM();#endif/* DATA_IN_ExtSRAM */SystemClockConfig();/* Configure the Vector Table location add offset address */#ifdef VECT_TAB_SRAMSCB-VTOR SRAM_BASE | VECT_TAB_OFFSET;/* Vector Table Relocation in Internal SRAM */#elseSCB-VTOR FMC_BASE | VECT_TAB_OFFSET;/* Vector Table Relocation in Internal FLASH */#endif}2. 编译测试生成的APM32F427基本工程没有错误下载完成之后我们编译刚创建完成的工程然后再下载到我们的硬件板子运行。可以看到编译完成没有任何的警告和错误。然后下载到板子运 行刚创建好的工程main函数时不断想串口输出字符串的打开串口终端打印信息如下可以看到串口已经正常打印字符以及接收串口输入的命令说明我们新建的工程已经正常运行。3. APM32F427添加ESP8266组件RT-Thread Studio有非常丰富的组件可以使用其中就包括ESP8266的组件。我们可以在配置界面直接点击使能ESP8266软件包就可以使用了。所以说在RT-Thread上使用ESP8266非常的简单主要是人家帮我们把ESP8266的驱动AT命令解析等代码都写好了。1、双击 RT-Thread Settings 文件打开配置界面然后找到软件包 - IoT物联网 - AT设备... 如下图2、使能AT客户端以及配置相关选项。实际上我们开启了ESP8266软件包之后会自动帮我们使能AT客户端组件的因为ESP8266软件包要依赖该组件。如下图4. 使能APM32F427连接ESP8266的UART24.1 使能UART2上面我们使能了ESP8266软件包然后就可以编译下载到板子看看运行情况了。这个时候是可以正常编译通过的。下载到板子的运行情况如下很明显提示说没有开启UART2设备这是因为我们上一步配置时使用的是串口2连接ESP8266模块但是我们却没有使能串口2所以才有这样的报错。下面使能串口2其实很简单只要在board.h定义串口2的宏即可使能串口2。不过我看了APM32的串口驱动代码串口引脚的初始化代码是要用户编写的当然如果做的更完善的话串口引脚的初始化代码都不需要用户编写。但是没关系只是串口引脚的初始化代码而已我们在apm32_msp.c文件中厂商提供的驱动函数中已经初始化了UART1和UART2的串口引脚了如下图也就是说我们使用这两个串口的话那就不用我们自己写引脚的初始化代码了。当然如果你使用的是其他的串口根据这里的示例代码自己对着编写一下也没什么。4.2 添加使能ESP8266引脚的初始化代码我所使用的ESP8266模块还需要向该模块的使能引脚输出高电平ESP8266模块才能正常工作。这个引脚使用普通的GPIO口即可我的引脚板子连接到模块的是PA0所以初始化代码如下复制voidESP8266_EN_GPIO_Init(void){GPIO_Config_T GPIO_ConfigStruct;RCM_EnableAHBPeriphClock(RCM_AHB_PERIPH_GPIOA);GPIO_ConfigStruct.mode GPIO_MODE_OUT;GPIO_ConfigStruct.pin GPIO_PIN_0;GPIO_ConfigStruct.speed GPIO_SPEED_50MHz;GPIO_ConfigStruct.outtype GPIO_OUT_TYPE_PP;GPIO_ConfigStruct.pupd GPIO_PUPD_NO;GPIO_Config(GPIOA, GPIO_ConfigStruct);/* PA0 1, enable esp8266 */GPIO_SetBit(GPIOA, GPIO_PIN_0);}我们把该函数编写到drv_common.c文件中然后在该文件的 hw_board_init 函数中调用该函数如下图5. 验证测试使能了UART2以及添加了ESP8266模块使能引脚拉高的代码之后这个时候再次编译下载就可以正常运行了。可以看到AT Client初始化成功然后把ESP8266模块的版本信息给打印出来如下图当然我们可以看到一个错误说一行数据溢出了。关于这个问题我看了很多网上的说法是ESP8266模块在启动的时候有一个复位命令该命令会返回一串很长的字符串从而导致有这个错误但是我们可以忽略该错误因为不影响我们使用。如果我们填写的WIFI名称和密码正确的话那么可以正常连上WIFI的如下图我们可以使用ifconfig命令查看IP地址如果我们的路由器能正常上网那么我们使用ping命令就可以正常平台百度的网址如下图可以看到有数据返回说明ESP8266模块已经能正常联网了。上面就是基于APM32F427使用ESP8266实现了联网功能主要还是使用了RT-Thread的组件这样很多代码不用自己写。后面我需要基于这个工程实现MQTT协议的物联网控制。后面再写。。---------------------作者luobeihai链接https://bbs.21ic.com/icview-3501385-1-1.html来源21ic.com此文章已获得原创/原创奖标签著作权归21ic所有任何人未经允许禁止转载。