1、前面测试了F5333的GPIO和SPI,这里准备测试一下通用异步收发器UART,实际板子上的USART1已经做成了串口调试打印功能,可以往PC端打印程序调试信息。通用异步收发器是一种通用串行数据总线,用于异步通信。该总线双向通信,可以实现全双工传输和接收。在嵌入式设计中,UART用来与PC进行通信,包括与监控调试器和其它器件,如EEPROM通信等等,也是一个非常常用和易用的通讯方式。
2、看手上有一个ESP-12F的WIFI模块,ESP-12F 模块支持标准的 IEEE802.11 b/g/n 协议,完整的 TCP/IP 协议栈。这个模块的核心处理器是ESP8266芯片,可以方便地进行二次开发,接入云端服务, 只需通过SPI/SDIO接口或UART接口即可作为Wi-Fi适配器,应用到基于任何微控制器设计中,所以正好采用MM32F5330做一个WIFI tcp客户端与PC连接测试。
3、在硬件连接方面先是将模块的TX、RX、RESET脚与板子的UART2相对应连接。初始化UART2,波特率为115200,长度为8位,1位停止位,无校验、无流控。
4、添加进来原先写好的esp8266.h、esp8266.c,还有tcp.h、tcp.c,分别是wifi模块的功能函数还有tcp客户端的功能函数。 写入wifi信息: #define User_ESP8266_SSID "wifi003" //wifi名 #define User_ESP8266_PWD "88888888" //wifi密码 写入tcp server信息: #define User_ESP8266_TCPServer_IP "192.168.2.101" //服务器IP #define User_ESP8266_TCPServer_PORT "8888" //服务器端口号 5、编写Esp_UART_Init();和ESP8266_Init();初始化函数,放到main的里面。 void UART2_Configure(uint32_t Baudrate)
{
GPIO_InitTypeDef GPIO_InitStruct;
UART_InitTypeDef UART_InitStruct;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART2, ENABLE);
UART_StructInit(&UART_InitStruct);
UART_InitStruct.BaudRate = Baudrate;
UART_InitStruct.WordLength = UART_WordLength_8b;
UART_InitStruct.StopBits = UART_StopBits_1;
UART_InitStruct.Parity = UART_Parity_No;
UART_InitStruct.HWFlowControl = UART_HWFlowControl_None;
UART_InitStruct.Mode = UART_Mode_Rx | UART_Mode_Tx;
UART_Init(UART2, &UART_InitStruct);
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource2, GPIO_AF_7);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource3, GPIO_AF_7);
GPIO_StructInit(&GPIO_InitStruct);
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_2;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_High;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA, &GPIO_InitStruct);
GPIO_StructInit(&GPIO_InitStruct);
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_3;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOA, &GPIO_InitStruct);
UART_Cmd(UART2, ENABLE);
}
这是主要的串口发送函数接口,只需要将USART_printf 函数中的串口发送采用MM32F5330的串口2发送指令即可。 #define ESP8266_USART(fmt, ...) USART_printf (1,fmt, ##__VA_ARGS__)
6、编写ESP8266_STA_TCPClient_Test();功能函数实现tcp的连接和数据的发送; void ESP8266_STA_TCPClient_Test(void)
{
uint8_t res;
char str[100]={0};
ESP8266_Rst();
PLATFORM_DelayMS(2000);
ESP8266_USART("AT+RESTORE\r\n");
PLATFORM_DelayMS(1000);
ESP8266_USART("AT\r\n");
PLATFORM_DelayMS(1000);
ESP8266_USART("AT+CWMODE=1\r\n");
PLATFORM_DelayMS(1000);
ESP8266_USART("AT+CWJAP=\"wifi003\",\"88888888\"\r\n");
PLATFORM_DelayMS(20000);
ESP8266_USART("AT+CIPMUX=0\r\n");
PLATFORM_DelayMS(1000);
ESP8266_Link_Server(enumTCP, User_ESP8266_TCPServer_IP, User_ESP8266_TCPServer_PORT, Single_ID_0);
PLATFORM_DelayMS(1000);
ESP8266_USART("AT+CIPMODE=1\r\n");
PLATFORM_DelayMS(1000);
ESP8266_USART("AT+CIPSEND\r\n");
PLATFORM_DelayMS(2000);
while(1){
sprintf (str,"bbs.21ic.com\r\nid:forgot\r\n");
ESP8266_SendString ( ENABLE, str, 0, Single_ID_0 );
PLATFORM_DelayMS(2000);
}
}
7、在192.168.2.101 PC上打开TCP SERVER,开端口8888进行监听; 8、可是看到连接成功后,顺利发送TCP数据到PC端的TCP/UDP 网络调试助手。
这是第一次使用 Star-MC1 内核的 MCU 产品,可以看得出MM32F5330比较擅长在工业控制和家电控制领域。需要提出的是为什么demo例程的功能函数注释那么少,可能对于第一次使用的新手不是很友好。
|