wordpress图片收费,杭州做seo的公司,cdr做网站怎么导出,门户网站安全建设1.配置stm32cubemx
使用串口二接收esp8266的数据#xff0c;单片机接收#xff0c;使用串口1将数据发送给串口助手 串口2波特率设置74880#xff0c;串口1设置115200 在初始化的时候需要将复位引脚拉低20ms,然后再拉高20ms, 设置GPIOB的输出模式 对PB12做输出处理
2.…1.配置stm32cubemx
使用串口二接收esp8266的数据单片机接收使用串口1将数据发送给串口助手 串口2波特率设置74880串口1设置115200 在初始化的时候需要将复位引脚拉低20ms,然后再拉高20ms, 设置GPIOB的输出模式 对PB12做输出处理
2.esp8266初始化
需要将复位引脚拉低20ms,再拉高20ms esp8266初始化化的时候有信息我们可以通过串口2获取信息然后串口1输出 需要自己实现fputc 我们发现下面有乱码应该怎么处理这里会涉及到波特率的转换
3.波特率转换
当我们遇到csum 0xde需要转换波特率 先处理波特率转换之前的数据先打印到串口1
void esp8266_response(const char*msg,uint32_t timeout)
{uint32_t CurtickHAL_GetTick();//获取当前时间uint8_t data;uint8_t i0;while(1){if(HAL_GetTick()-Curticktimeout)//如果超时2s就breakbreak;if(HAL_UART_Receive(huart2,(uint8_t*)data,1,10)HAL_TIMEOUT)//如果10ms没收到esp8266发给单片机的数据就返回HAL_TIMEOUTcontinue; //如果初始化成功不会HAL_TIMEOUT就不continue;printf(%c,data); //单片机把串口2的数据一个字节一个字节读到data中然后通过printf打印到串口1 //这里串口2的波特率为74880if(datamsg[i]) //chksum 0xde\r\n //匹配到的话就是初始化成功{i;if(istrlen(msg)){break;}}else //重新匹配{ i0;}}}波特率转换需要转换波特率为115200. //直接复制uart中的
void esp8266_setbaud(uint32_t baud)
{huart2.Instance USART2;huart2.Init.BaudRate baud;//需要传参修改需要的波特率huart2.Init.WordLength UART_WORDLENGTH_8B;huart2.Init.StopBits UART_STOPBITS_1;huart2.Init.Parity UART_PARITY_NONE;huart2.Init.Mode UART_MODE_TX_RX;huart2.Init.HwFlowCtl UART_HWCONTROL_NONE;huart2.Init.OverSampling UART_OVERSAMPLING_16;HAL_UART_Init(huart2);} 这里的ready只剩下了eady,这是因为串口涉及到硬件串口转换很快将数据给你放到data,printf还没来得及处理已经串口下次转换了所以就会覆盖所以我们将串口转换的值放到缓冲区。然后统一输出到串口1 缓冲区及下标 接下来需要将串口2的波特率转换为115200
void esp8266_setbaud(uint32_t baud)
{huart2.Instance USART2;huart2.Init.BaudRate baud;huart2.Init.WordLength UART_WORDLENGTH_8B;huart2.Init.StopBits UART_STOPBITS_1;huart2.Init.Parity UART_PARITY_NONE;huart2.Init.Mode UART_MODE_TX_RX;huart2.Init.HwFlowCtl UART_HWCONTROL_NONE;huart2.Init.OverSampling UART_OVERSAMPLING_16;HAL_UART_Init(huart2);}
4.连接wifi
使用指令即可
void esp8266_link_wifi(const char*name,const char*password)
{char buffer[128];sprintf(buffer,ATCWJAP\%s\,\%s\,name,password);//构建指令字符串HAL_UART_Transmit(huart2,(uint8_t*)buffer,strlen(buffer),HAL_MAX_DELAY);//向esp8266串口2发送指令字符串HAL_UART_Transmit(huart2,(uint8_t*)\r\n,2,HAL_MAX_DELAY);}
根据esp8266_response(const char*msg,uint32_t timeout)返回值判断是否发生成功修改esp8266_response函数
uint8_t esp8266_response(const char*msg,uint32_t timeout)
{uint32_t CurtickHAL_GetTick();//获取当前时间uint8_t data;uint8_t i0;while(1){if(HAL_GetTick()-Curticktimeout)//如果超时2s就breakreturn 0;if(HAL_UART_Receive(huart2,(uint8_t*)data,1,10)HAL_TIMEOUT)//如果10ms没收到esp8266发给单片机的数据就返回HAL_TIMEOUTcontinue; //如果初始化成功不会HAL_TIMEOUT就不continue;//printf(%c,data); //单片机把串口2的数据一个字节一个字节读到data中然后通过printf打印到串口1 //这里串口2的波特率为74880buffer[num]data; if(datamsg[i]) //chksum 0xde\r\n //匹配到的话就是初始化成功{i;if(istrlen(msg)){return 1; //匹配成功}}else //重新匹配{ i0;}}}void esp8266_link_wifi(const char*name,const char*password)
{char buffer[512];sprintf(buffer,ATCWJAP\%s\,\%s\,name,password);HAL_UART_Transmit(huart2,(uint8_t*)buffer,strlen(buffer),HAL_MAX_DELAY);HAL_UART_Transmit(huart2,(uint8_t*)\r\n,2,HAL_MAX_DELAY);if(esp8266_response(buffer,2000))//esp8266串口收到{printf(%s,buffer);}else //发送失败{printf(%s,buffer);printf(connect fail);}memset(buffer,0,512);//清空缓冲区}esp8266.c
#include esp8266.h
#include stdio.h
#include string.h
extern UART_HandleTypeDef huart2;
extern uint8_t buffer[512];
extern uint16_t num;
void esp8266_init(void)
{HAL_GPIO_WritePin(GPIOB,GPIO_PIN_12,GPIO_PIN_RESET);HAL_Delay(20);HAL_GPIO_WritePin(GPIOB,GPIO_PIN_12,GPIO_PIN_SET);HAL_Delay(20);esp8266_response(chksum 0xde\r\n,2000);HAL_Delay(50);esp8266_setbaud(115200);esp8266_response(ready\r\n,1000);printf(%s,buffer);memset(buffer,0,512);}uint8_t esp8266_response(const char*msg,uint32_t timeout)
{uint32_t CurtickHAL_GetTick();//获取当前时间uint8_t data;uint8_t i0;while(1){if(HAL_GetTick()-Curticktimeout)//如果超时2s就breakreturn 0;if(HAL_UART_Receive(huart2,(uint8_t*)data,1,10)HAL_TIMEOUT)//如果10ms没收到esp8266发给单片机的数据就返回HAL_TIMEOUTcontinue; //如果初始化成功不会HAL_TIMEOUT就不continue;//printf(%c,data); //单片机把串口2的数据一个字节一个字节读到data中然后通过printf打印到串口1 //这里串口2的波特率为74880buffer[num]data; if(datamsg[i]) //chksum 0xde\r\n //匹配到的话就是初始化成功{i;if(istrlen(msg)){return 1;}}else //重新匹配{ i0;}}}void esp8266_setbaud(uint32_t baud)
{huart2.Instance USART2;huart2.Init.BaudRate baud;huart2.Init.WordLength UART_WORDLENGTH_8B;huart2.Init.StopBits UART_STOPBITS_1;huart2.Init.Parity UART_PARITY_NONE;huart2.Init.Mode UART_MODE_TX_RX;huart2.Init.HwFlowCtl UART_HWCONTROL_NONE;huart2.Init.OverSampling UART_OVERSAMPLING_16;HAL_UART_Init(huart2);}
void esp8266_link_wifi(const char*name,const char*password)
{char buffer[512];sprintf(buffer,ATCWJAP\%s\,\%s\,name,password);HAL_UART_Transmit(huart2,(uint8_t*)buffer,strlen(buffer),HAL_MAX_DELAY);HAL_UART_Transmit(huart2,(uint8_t*)\r\n,2,HAL_MAX_DELAY);if(esp8266_response(buffer,2000))//esp8266串口收到{printf(%s,buffer);}else{printf(%s,buffer);printf(connect fail);}memset(buffer,0,512); //清空缓冲区}esp8266.h
#ifndef _ESP8266_H_
#define _ESP8266_H_
#include stm32f4xx_hal.h
void esp8266_init(void);
uint8_t esp8266_response(const char*msg,uint32_t timeout);
void esp8266_setbaud(uint32_t baud);
void esp8266_link_wifi(const char*name,const char*password);
#endif