中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

網(wǎng)站seo優(yōu)化關(guān)鍵詞國內(nèi)外搜索引擎大全

網(wǎng)站seo優(yōu)化關(guān)鍵詞,國內(nèi)外搜索引擎大全,如何利用淘寶建設(shè)網(wǎng)站掙錢,網(wǎng)站的建立串口透傳 “透傳”通常指的是數(shù)據(jù)的透明傳輸,意思是在不對數(shù)據(jù)進(jìn)行任何處理或修改的情況下,將數(shù)據(jù)從一個接口轉(zhuǎn)發(fā)到另一個接口。值得注意的是要避免串口之間無限制的透明,可以采用互斥鎖的方式進(jìn)行限制使用方法 對USART1和USART3(用他倆舉例…

串口透傳

  • “透傳”通常指的是數(shù)據(jù)的透明傳輸,意思是在不對數(shù)據(jù)進(jìn)行任何處理或修改的情況下,將數(shù)據(jù)從一個接口轉(zhuǎn)發(fā)到另一個接口。
  • 值得注意的是要避免串口之間無限制的透明,可以采用互斥鎖的方式進(jìn)行限制
  • 使用方法
  1. 對USART1和USART3(用他倆舉例)的模式都是設(shè)置為Asynchronous,并開啟對應(yīng)的中斷。
  2. RCC的High SPeed CLock模式設(shè)置為Crystal/Ceramic
  3. 配置對應(yīng)的時鐘為64Mhz
  4. 在main函數(shù)中啟動串口1和串口3的空閑中斷模式,接收數(shù)據(jù) HAL_UARTEx_ReceiveToIdle_IT(&huart1, rxbuf1, sizeof(rxbuf1));
    HAL_UARTEx_ReceiveToIdle_IT(&huart3, rxbuf3, sizeof(rxbuf3));
  5. void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef* huart, uint16_t Size)寫對應(yīng)的透傳即可
  • 代碼示例
#include "main.h"
#include <string.h>UART_HandleTypeDef huart1; // 定義串口1的句柄
UART_HandleTypeDef huart3; // 定義串口3的句柄char rxbuf1[128] = {0}; // 用于接收串口1數(shù)據(jù)的緩沖區(qū)
char rxbuf3[128] = {0}; // 用于接收串口3數(shù)據(jù)的緩沖區(qū)
uint8_t uart1_to_uart3_enable = 1;  // 控制串口1是否允許發(fā)送數(shù)據(jù)到串口3的標(biāo)志位
uint8_t uart3_to_uart1_enable = 1;  // 控制串口3是否允許發(fā)送數(shù)據(jù)到串口1的標(biāo)志位/*** @brief 串口接收中斷回調(diào)函數(shù)* 該函數(shù)在接收到數(shù)據(jù)后觸發(fā),并根據(jù)當(dāng)前接收的是串口1還是串口3的數(shù)據(jù),進(jìn)行對應(yīng)的處理。* @param huart 串口句柄* @param Size 接收到的數(shù)據(jù)大小*/
void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef* huart, uint16_t Size)
{printf("HAL_UARTEx_RxEventCallback triggered\n");// 判斷當(dāng)前接收的數(shù)據(jù)是否來自串口1,并且標(biāo)志位允許發(fā)送給串口3if (huart == &huart1 && uart1_to_uart3_enable){uart3_to_uart1_enable = 0; // 禁止串口3將數(shù)據(jù)回傳給串口1,防止死循環(huán)HAL_UART_Transmit(&huart3, (uint8_t*)rxbuf1, Size, HAL_MAX_DELAY); // 將串口1接收的數(shù)據(jù)發(fā)送給串口3memset(rxbuf1, 0, sizeof(rxbuf1)); // 清空串口1接收緩沖區(qū)HAL_UARTEx_ReceiveToIdle_IT(&huart1, rxbuf1, sizeof(rxbuf1)); // 重新啟動串口1接收中斷uart3_to_uart1_enable = 1; // 允許串口3傳輸數(shù)據(jù)到串口1printf("port1 sent to port 3\n");}// 判斷當(dāng)前接收的數(shù)據(jù)是否來自串口3,并且標(biāo)志位允許發(fā)送給串口1else if (huart == &huart3 && uart3_to_uart1_enable){uart1_to_uart3_enable = 0; // 禁止串口1將數(shù)據(jù)回傳給串口3,防止死循環(huán)HAL_UART_Transmit(&huart1, (uint8_t*)rxbuf3, Size, HAL_MAX_DELAY); // 將串口3接收的數(shù)據(jù)發(fā)送給串口1memset(rxbuf3, 0, sizeof(rxbuf3)); // 清空串口3接收緩沖區(qū)HAL_UARTEx_ReceiveToIdle_IT(&huart3, rxbuf3, sizeof(rxbuf3)); // 重新啟動串口3接收中斷uart1_to_uart3_enable = 1; // 允許串口1傳輸數(shù)據(jù)到串口3printf("port3 sent to port 1\n");}return;
}/*** @brief 重定向printf函數(shù),將其輸出重定向到串口1* @param ch 需要輸出的字符* @return 返回輸出的字符*/
int __io_putchar(int ch)
{HAL_UART_Transmit(&huart1, (unsigned char*)&ch, 1, HAL_MAX_DELAY); // 將字符通過串口1發(fā)送return ch; // 返回字符
}/*** @brief 主函數(shù)*/
int main(void)
{HAL_Init(); // 初始化HAL庫SystemClock_Config(); // 配置系統(tǒng)時鐘MX_GPIO_Init(); // 初始化GPIOMX_USART1_UART_Init(); // 初始化串口1MX_USART3_UART_Init(); // 初始化串口3// 啟動串口1和串口3的空閑中斷模式,接收數(shù)據(jù)HAL_UARTEx_ReceiveToIdle_IT(&huart1, rxbuf1, sizeof(rxbuf1));HAL_UARTEx_ReceiveToIdle_IT(&huart3, rxbuf3, sizeof(rxbuf3));while (1){// 主循環(huán)中可以進(jìn)行其他任務(wù)處理}
}/*** @brief 配置系統(tǒng)時鐘* 設(shè)置MCU的時鐘源、倍頻系數(shù)等,保證系統(tǒng)運行在正確的時鐘頻率*/
void SystemClock_Config(void)
{RCC_OscInitTypeDef RCC_OscInitStruct = {0}; // 配置RCC振蕩器參數(shù)RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; // 配置RCC時鐘源及分頻系數(shù)RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; // 使用外部高速振蕩器(HSE)RCC_OscInitStruct.HSEState = RCC_HSE_ON; // 開啟HSERCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1; // HSE預(yù)分頻值為1RCC_OscInitStruct.HSIState = RCC_HSI_ON; // 開啟內(nèi)部高速振蕩器(HSI)RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; // 開啟PLLRCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; // PLL時鐘源為HSERCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL8; // PLL倍頻系數(shù)為8if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK){Error_Handler(); // 時鐘配置失敗,進(jìn)入錯誤處理函數(shù)}RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2; // 配置不同的時鐘類型RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; // 系統(tǒng)時鐘源設(shè)置為PLLRCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; // AHB時鐘不分頻RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; // APB1時鐘分頻系數(shù)為2RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; // APB2時鐘不分頻if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK){Error_Handler(); // 時鐘配置失敗,進(jìn)入錯誤處理函數(shù)}
}/*** @brief 初始化串口1* 配置波特率、數(shù)據(jù)位、停止位等串口參數(shù)*/
static void MX_USART1_UART_Init(void)
{huart1.Instance = USART1; // 設(shè)置串口1的實例huart1.Init.BaudRate = 115200; // 波特率設(shè)置為115200huart1.Init.WordLength = UART_WORDLENGTH_8B; // 數(shù)據(jù)位長度為8位huart1.Init.StopBits = UART_STOPBITS_1; // 停止位為1位huart1.Init.Parity = UART_PARITY_NONE; // 無校驗位huart1.Init.Mode = UART_MODE_TX_RX; // 使能接收和發(fā)送模式huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE; // 不使用硬件流控huart1.Init.OverSampling = UART_OVERSAMPLING_16; // 過采樣設(shè)置為16倍if (HAL_UART_Init(&huart1) != HAL_OK){Error_Handler(); // 初始化失敗,進(jìn)入錯誤處理函數(shù)}
}/*** @brief 初始化串口3* 配置波特率、數(shù)據(jù)位、停止位等串口參數(shù)*/
static void MX_USART3_UART_Init(void)
{huart3.Instance = USART3; // 設(shè)置串口3的實例huart3.Init.BaudRate = 115200; // 波特率設(shè)置為115200huart3.Init.WordLength = UART_WORDLENGTH_8B; // 數(shù)據(jù)位長度為8位huart3.Init.StopBits = UART_STOPBITS_1; // 停止位為1位huart3.Init.Parity = UART_PARITY_NONE; // 無校驗位huart3.Init.Mode = UART_MODE_TX_RX; // 使能接收和發(fā)送模式huart3.Init.HwFlowCtl = UART_HWCONTROL_NONE; // 不使用硬件流控huart3.Init.OverSampling = UART_OVERSAMPLING_16; // 過采樣設(shè)置為16倍if (HAL_UART_Init(&huart3) != HAL_OK){Error_Handler(); // 初始化失敗,進(jìn)入錯誤處理函數(shù)}
}/*** @brief GPIO初始化* 配置GPIO端口,用于其他硬件外設(shè),如LED、按鍵等*/
static void MX_GPIO_Init(void)
{GPIO_InitTypeDef GPIO_InitStruct = {0};// 啟用GPIO時鐘__HAL_RCC_GPIOD_CLK_ENABLE();__HAL_RCC_GPIOB_CLK_ENABLE();__HAL_RCC_GPIOC_CLK_ENABLE();__HAL_RCC_GPIOA_CLK_ENABLE();// 配置PC6、PC7、PC8引腳為推挽輸出模式,初始化為低電平,用于驅(qū)動LED或其他外設(shè)HAL_GPIO_WritePin(GPIOC, GPIO_PIN_6 | GPIO_PIN_7 | GPIO_PIN_8, GPIO_PIN_RESET);GPIO_InitStruct.Pin = GPIO_PIN_6 | GPIO_PIN_7 | GPIO_PIN_8; // 設(shè)置要配置的引腳GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; // 配置為推挽輸出模式GPIO_InitStruct.Pull = GPIO_NOPULL; // 不使用上拉或下拉電阻GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; // 設(shè)置為低速HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); // 初始化GPIO端口PC6、PC7、PC8
}/*** @brief 錯誤處理函數(shù)* 當(dāng)系統(tǒng)發(fā)生錯誤時調(diào)用該函數(shù)??梢栽诖撕瘮?shù)中添加錯誤處理邏輯,如重啟系統(tǒng)或記錄日志。*/
void Error_Handler(void)
{__disable_irq(); // 禁用全局中斷,防止進(jìn)一步的干擾while (1) {// 無限循環(huán),防止系統(tǒng)繼續(xù)運行。可以在此添加LED閃爍等故障指示}
}#ifdef USE_FULL_ASSERT
/*** @brief 斷言失敗時調(diào)用此函數(shù)* 當(dāng)遇到斷言參數(shù)錯誤時,報告源文件和行號,幫助調(diào)試* @param file 指向發(fā)生錯誤的源文件名的指針* @param line 發(fā)生錯誤的代碼行號*/
void assert_failed(uint8_t *file, uint32_t line)
{// 可以在此添加打印或記錄錯誤的實現(xiàn),例如:// printf("Wrong parameters value: file %s on line %d\r\n", file, line);
}
#endif /* USE_FULL_ASSERT */

ESP8266與STM32

  • ESP8266 是一款集成了Wi-Fi通信功能的低功耗微控制器,廣泛應(yīng)用于物聯(lián)網(wǎng)(IoT)設(shè)備中。
  • Station 模式:可以像普通的 Wi-Fi 設(shè)備一樣連接到現(xiàn)有的無線網(wǎng)絡(luò)。
  • AP 模式:可以創(chuàng)建自己的 Wi-Fi 熱點,讓其他設(shè)備連接到 ESP8266。
  • Station + Access Point 混合模式(STA + AP 模式):ESP8266 同時充當(dāng)客戶端和熱點,既可以連接到現(xiàn)有的 Wi-Fi 網(wǎng)絡(luò)(作為 STA),又可以作為熱點允許其他設(shè)備連接到它(作為 AP)。
AT+CWMODE=1:設(shè)置為 Station 模式。
AT+CWMODE=2:設(shè)置為 AP 模式。
AT+CWMODE=3:設(shè)置為 STA + AP 混合模式。
  • 服務(wù)器
www.daxia.com//下載SSCOM即可
STATION模式
  • 配置uart1- printf,uart3-esp上網(wǎng)(因為WiFi芯片在串口3)
    在這里插入圖片描述
使用方法
  • 新建stm32工程中添加WiFi-ops.c和WiFi-ops.h
  • 開啟時鐘頻率為64Mhz和RCC的Crystal
  • 開啟UART1和UART3串口為異步通信,且開啟中斷。
  • 并配置LED燈管腳留作測試
  • 代碼示例
#include "main.h"
#include "stdio.h"
#include "string.h"
#include "wifi-ops.h"// UART句柄
UART_HandleTypeDef huart1;
UART_HandleTypeDef huart3;void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_USART1_UART_Init(void);
static void MX_USART3_UART_Init(void);
// 日志狀態(tài)標(biāo)志
int log_success_flags = 0;  // 0 - 未初始化,1 - 日志成功,2 - 日志失敗/*** @brief  ESP8266 Station模式回調(diào)函數(shù)* @param  data: 接收到的數(shù)據(jù)* @param  len: 數(shù)據(jù)長度* @retval 返回值說明*/
int esp_station_callback(char *data, int len)
{printf("recv from serv: %s\r\n", data);// 更新日志狀態(tài)標(biāo)志if (strstr(data, "log success")) {log_success_flags = 1;} else if (strstr(data, "log failed")) {log_success_flags = 2;}return 0;
}/*** @brief  UART接收事件回調(diào)函數(shù)* @param  huart: UART句柄* @param  Size: 接收的數(shù)據(jù)大小* @retval None*/
void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
{// 處理接收事件,沒有傳給另一個串口wifi_uart_prepare_idle(huart);  // 接收完成后,準(zhǔn)備UART進(jìn)行下一次接收
}/*** @brief  重定向putchar到UART1* @param  ch: 要發(fā)送的字符* @retval 返回發(fā)送的字符*/
int __io_putchar(int ch)
{HAL_UART_Transmit(&huart1, (unsigned char *)&ch, 1, 1);return ch;
}/*** @brief  主函數(shù)入口* @retval 程序返回值*/
int main(void)
{HAL_Init(); // 初始化HAL庫SystemClock_Config(); // 配置系統(tǒng)時鐘// 初始化所有配置的外設(shè)MX_GPIO_Init();MX_USART1_UART_Init();MX_USART3_UART_Init();int ret;char sendbuf[128] = {0}; // 用于發(fā)送數(shù)據(jù)的緩沖區(qū)// 準(zhǔn)備UART3進(jìn)行ESP8266通信,使用串口3wifi_uart_prepare_idle(&huart3);// 初始化ESP8266 Station模式,使用串口3ret = wifi_station_init(&huart3, esp_station_callback);if (ret < 0) {printf("%s-%d wifi_station_init err\r\n", __func__, __LINE__);return -35;}// 連接到指定的APret = wifi_station_join_ap(&huart3, "xiaomimobile", "12345600");if (ret < 0) {printf("%s-%d wifi_station_join_ap err\r\n", __func__, __LINE__);return -35;}// 連接到指定的TCP服務(wù)器ret = wifi_station_tcp_connect(&huart3, "107.148.201.156", 10005);if (ret < 0) {printf("%s-%d wifi_station_tcp_connect err\r\n", __func__, __LINE__);return -35;}// 發(fā)送日志請求數(shù)據(jù)。特定格式snprintf(sendbuf, sizeof(sendbuf), "toServ:action=log,usrname=%s,passwd=%s,devname=sml001;", "xiaowang", "123456");ret = wifi_station_tcp_send_data(&huart3, sendbuf, strlen(sendbuf));if (ret < 0) {printf("%s-%d wifi_station_tcp_send_data err\r\n", __func__, __LINE__);}// 等待日志發(fā)送結(jié)果for (int i = 0; i < 50; i++) {if (log_success_flags == 2) {printf("%s-%d log failed \r\n", __func__, __LINE__);return -23;} else if (log_success_flags == 1) {printf("%s-%d log success \r\n", __func__, __LINE__);break;}HAL_Delay(10);}// 循環(huán)發(fā)送獲取時間請求,這個是該服務(wù)器的特定格式strcpy(sendbuf, "toServ:action=gettime;");while (1){ret = wifi_station_tcp_send_data(&huart3, sendbuf, strlen(sendbuf));if (ret < 0) {printf("%s-%d wifi_station_tcp_send_data err\r\n", __func__, __LINE__);}HAL_Delay(500); // 等待500毫秒}
}/*** @brief  配置系統(tǒng)時鐘* @retval None*/
void SystemClock_Config(void)
{RCC_OscInitTypeDef RCC_OscInitStruct = {0};RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};// 初始化RCC振蕩器RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;RCC_OscInitStruct.HSEState = RCC_HSE_ON;RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;RCC_OscInitStruct.HSIState = RCC_HSI_ON;RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL8;if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) {Error_Handler();}// 初始化CPU、AHB和APB總線時鐘RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2;RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) {Error_Handler();}
}/*** @brief  初始化USART1* @retval None*/
static void MX_USART1_UART_Init(void)
{huart1.Instance = USART1;huart1.Init.BaudRate = 115200;huart1.Init.WordLength = UART_WORDLENGTH_8B;huart1.Init.StopBits = UART_STOPBITS_1;huart1.Init.Parity = UART_PARITY_NONE;huart1.Init.Mode = UART_MODE_TX_RX;huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;huart1.Init.OverSampling = UART_OVERSAMPLING_16;if (HAL_UART_Init(&huart1) != HAL_OK) {Error_Handler();}
}/*** @brief  初始化USART3* @retval None*/
static void MX_USART3_UART_Init(void)
{huart3.Instance = USART3;huart3.Init.BaudRate = 115200;huart3.Init.WordLength = UART_WORDLENGTH_8B;huart3.Init.StopBits = UART_STOPBITS_1;huart3.Init.Parity = UART_PARITY_NONE;huart3.Init.Mode = UART_MODE_TX_RX;huart3.Init.HwFlowCtl = UART_HWCONTROL_NONE;huart3.Init.OverSampling = UART_OVERSAMPLING_16;if (HAL_UART_Init(&huart3) != HAL_OK) {Error_Handler();}
}/*** @brief  初始化GPIO* @retval None*/
static void MX_GPIO_Init(void)
{GPIO_InitTypeDef GPIO_InitStruct = {0};// 啟用GPIO端口時鐘__HAL_RCC_GPIOD_CLK_ENABLE();__HAL_RCC_GPIOB_CLK_ENABLE();__HAL_RCC_GPIOC_CLK_ENABLE();__HAL_RCC_GPIOA_CLK_ENABLE();// 配置GPIO輸出級別HAL_GPIO_WritePin(GPIOC, GPIO_PIN_6 | GPIO_PIN_7 | GPIO_PIN_8, GPIO_PIN_RESET);// 配置GPIO引腳GPIO_InitStruct.Pin = GPIO_PIN_6 | GPIO_PIN_7 | GPIO_PIN_8;GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;GPIO_InitStruct.Pull = GPIO_NOPULL;GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
}/*** @brief  錯誤處理函數(shù)* @retval None*/
void Error_Handler(void)
{__disable_irq();while (1) {}
}/*** @brief  報告斷言失敗的文件名和行號* @param  file: 源文件名* @param  line: 錯誤行號* @retval None*/
void assert_failed(uint8_t *file, uint32_t line)
{// 用戶可以添加自己的實現(xiàn)來報告文件名和行號
}
混合模式
  • 默認(rèn)情況下,ESP8266 的 IP 地址在 AP 模式下是 192.168.4.1,以便其他設(shè)備連接到該 AP 時可以進(jìn)行通信。
  • 代碼

#include "main.h"#include "stdio.h"
#include "string.h"
#include "wifi-ops.h"UART_HandleTypeDef huart1;
UART_HandleTypeDef huart3;void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_USART1_UART_Init(void);
static void MX_USART3_UART_Init(void);#ifdef ESP_STATION/*當(dāng)stm32收到 esp/服務(wù)器發(fā)來消息, 會自動執(zhí)行該函數(shù)* 	data,len 表示收到的具體數(shù)據(jù)和長度*** 該函數(shù)是在 中斷執(zhí)行,不好執(zhí)行耗時/睡眠工作* */int log_success_flags = 0;		//0-uninit  1-log  2-failedint esp_station_callback (char *data,int len)
{printf("recv from serv: %s\r\n",data);//登陸成功失敗標(biāo)志位if( strstr(data,"log success") ){log_success_flags = 1;}else if(strstr(  data, "log failed")){log_success_flags = 2;}}
#endif/* 希望手機發(fā)來消息,該函數(shù) 被調(diào)用,  data len分別是對方發(fā)來的消息和長度*/
int esp_ap_callback(char *data,int len)
{printf("recv from phone: %s\r\n",data);		//cmd:wifiname=hyx,wifipasswd=8888888,usrname=xiaowang,passwd=123456;
}void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
{//other thing to dowifi_uart_prepare_idle(huart);	//after recv success, wo must prepare uart for next time
}int __io_putchar(int ch)
{HAL_UART_Transmit(&huart1, (unsigned char *)&ch,  1,     1);return ch;
}int main(void)
{HAL_Init();SystemClock_Config();MX_GPIO_Init();MX_USART1_UART_Init();MX_USART3_UART_Init();/* USER CODE BEGIN 2 */int ret;int linkid;	//每個手機都可以連接ap,都會安排一個idchar sendbuf[128]={0};#ifdef ESP_STATION//預(yù)處理uart3 for esp ...wifi_uart_prepare_idle(&huart3);ret = wifi_station_init(&huart3,  esp_station_callback );if(ret < 0 ){	printf("%s-%d wifi_station_init err\r\n",__func__,__LINE__);		return -35;}ret = wifi_station_join_ap(&huart3,"WANGQINGFA","1234567890");if(ret < 0 ){	printf("%s-%d wifi_station_join_ap err\r\n",__func__,__LINE__);		return -35;}ret = wifi_station_tcp_connect(&huart3,"107.148.201.156",10001);if(ret < 0 ){	printf("%s-%d wifi_station_tcp_connect err\r\n",__func__,__LINE__);	return -35;}/*登陸服務(wù)器		toServ:action=log,usrname=xiaowang,passwd=123456,devname=sml001;		*/snprintf(sendbuf,sizeof(sendbuf), "toServ:action=log,usrname=%s,passwd=%s,devname=sml001;","xiaowang","123456" );ret = wifi_station_tcp_send_data(&huart3,sendbuf,strlen(sendbuf));if(ret < 0 ){	printf("%s-%d wifi_station_tcp_connect err\r\n",__func__,__LINE__);	   }for(int i=0;i<50;i++){if(log_success_flags == 2){printf("%s-%d log failed \r\n",__func__,__LINE__);return -23;}else if(log_success_flags == 1){printf("%s-%d log success \r\n",__func__,__LINE__);break;}HAL_Delay(10);}
#endifwifi_uart_prepare_idle(&huart3);ret = wifi_ap_init(&huart3,  esp_ap_callback);if(ret < 0 ){	printf("%s-%d wifi_ap_init err\r\n",__func__,__LINE__);		return -35;}ret = wifi_ap_set_args(&huart3, "zhangsan","12345678");if(ret < 0 ){	printf("%s-%d wifi_ap_set_args err\r\n",__func__,__LINE__);		return -35;}linkid = wifi_ap_tcp_listen_and_wait_connect_timeout(&huart3,10001,     5*60*1000);if(linkid < 0 ){	printf("%s-%d wifi_ap_tcp_listen_and_wait_connect_timeout err\r\n",__func__,__LINE__);		return -35;}/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */strcpy(sendbuf,"cmd:hello phone,I have got you messgae,please reset it;");while (1){wifi_ap_tcp_send_data(&huart3, linkid , sendbuf,strlen(sendbuf)    );#ifdef ESP_STATIONret = wifi_station_tcp_send_data(&huart3,sendbuf,strlen(sendbuf));if(ret < 0 ){	printf("%s-%d wifi_station_tcp_connect err\r\n",__func__,__LINE__);	   }
#endifHAL_Delay(500);/* USER CODE END WHILE *//* USER CODE BEGIN 3 */}/* USER CODE END 3 */
}/*** @brief System Clock Configuration* @retval None*/
void SystemClock_Config(void)
{RCC_OscInitTypeDef RCC_OscInitStruct = {0};RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};/** Initializes the RCC Oscillators according to the specified parameters* in the RCC_OscInitTypeDef structure.*/RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;RCC_OscInitStruct.HSEState = RCC_HSE_ON;RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;RCC_OscInitStruct.HSIState = RCC_HSI_ON;RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL8;if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK){Error_Handler();}/** Initializes the CPU, AHB and APB buses clocks*/RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK){Error_Handler();}
}/*** @brief USART1 Initialization Function* @param None* @retval None*/
static void MX_USART1_UART_Init(void)
{/* USER CODE BEGIN USART1_Init 0 *//* USER CODE END USART1_Init 0 *//* USER CODE BEGIN USART1_Init 1 *//* USER CODE END USART1_Init 1 */huart1.Instance = USART1;huart1.Init.BaudRate = 115200;huart1.Init.WordLength = UART_WORDLENGTH_8B;huart1.Init.StopBits = UART_STOPBITS_1;huart1.Init.Parity = UART_PARITY_NONE;huart1.Init.Mode = UART_MODE_TX_RX;huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;huart1.Init.OverSampling = UART_OVERSAMPLING_16;if (HAL_UART_Init(&huart1) != HAL_OK){Error_Handler();}}static void MX_USART3_UART_Init(void)
{huart3.Instance = USART3;huart3.Init.BaudRate = 115200;huart3.Init.WordLength = UART_WORDLENGTH_8B;huart3.Init.StopBits = UART_STOPBITS_1;huart3.Init.Parity = UART_PARITY_NONE;huart3.Init.Mode = UART_MODE_TX_RX;huart3.Init.HwFlowCtl = UART_HWCONTROL_NONE;huart3.Init.OverSampling = UART_OVERSAMPLING_16;if (HAL_UART_Init(&huart3) != HAL_OK){Error_Handler();}/* USER CODE BEGIN USART3_Init 2 *//* USER CODE END USART3_Init 2 */}/*** @brief GPIO Initialization Function* @param None* @retval None*/
static void MX_GPIO_Init(void)
{GPIO_InitTypeDef GPIO_InitStruct = {0};/* GPIO Ports Clock Enable */__HAL_RCC_GPIOD_CLK_ENABLE();__HAL_RCC_GPIOB_CLK_ENABLE();__HAL_RCC_GPIOC_CLK_ENABLE();__HAL_RCC_GPIOA_CLK_ENABLE();/*Configure GPIO pin Output Level */HAL_GPIO_WritePin(GPIOC, GPIO_PIN_6|GPIO_PIN_7|GPIO_PIN_8, GPIO_PIN_RESET);/*Configure GPIO pins : PC6 PC7 PC8 */GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_7|GPIO_PIN_8;GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;GPIO_InitStruct.Pull = GPIO_NOPULL;GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);}/* USER CODE BEGIN 4 *//* USER CODE END 4 *//*** @brief  This function is executed in case of error occurrence.* @retval None*/
void Error_Handler(void)
{__disable_irq();while (1){}/* USER CODE END Error_Handler_Debug */
}#ifdef  USE_FULL_ASSERT
/*** @brief  Reports the name of the source file and the source line number*         where the assert_param error has occurred.* @param  file: pointer to the source file name* @param  line: assert_param error line source number* @retval None*/
void assert_failed(uint8_t *file, uint32_t line)
{/* USER CODE BEGIN 6 *//* User can add his own implementation to report the file name and line number,ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) *//* USER CODE END 6 */
}
#endif /* USE_FULL_ASSERT */
  • 如圖所示,用的TCP/IP調(diào)試軟件
    在這里插入圖片描述
http://www.risenshineclean.com/news/9617.html

相關(guān)文章:

  • 學(xué)校網(wǎng)站設(shè)計的作用營銷平臺建設(shè)
  • wordpress限制站點使用時間河南品牌網(wǎng)站建設(shè)
  • 最基本的網(wǎng)絡(luò)營銷站點西安優(yōu)化網(wǎng)站公司
  • wordpress做的好的網(wǎng)站如何優(yōu)化網(wǎng)站快速排名
  • 萊山做網(wǎng)站的公司熊貓關(guān)鍵詞工具官網(wǎng)
  • 域名注冊后怎么建網(wǎng)站全網(wǎng)營銷推廣案例
  • 商城網(wǎng)站都有什么功能模塊免費網(wǎng)站推廣工具
  • 網(wǎng)站建設(shè)規(guī)劃書的空間seo軟文代寫
  • 做網(wǎng)站學(xué)習(xí)營銷策略范文
  • 長沙企業(yè)網(wǎng)站建設(shè)服務(wù)怎么做網(wǎng)址
  • 淮北市住房和城鄉(xiāng)建設(shè)局網(wǎng)站出售外鏈
  • 門戶網(wǎng)站類型北京疫情消息1小時前
  • 手機網(wǎng)站制作費用多少seo廠商
  • 黃驊市海邊深圳優(yōu)化排名公司
  • 網(wǎng)站制作服務(wù)公司婚戀網(wǎng)站排名前三
  • 怎樣做營銷型網(wǎng)站推廣ppt抖音seo軟件
  • 網(wǎng)頁設(shè)計和網(wǎng)站開發(fā)有什么區(qū)別百度競價是什么工作
  • 如何給一個網(wǎng)站做定時的更新深圳網(wǎng)站制作推廣
  • 國內(nèi)永久在線免費建站百度網(wǎng)盤資源搜索引擎入口
  • 深圳和海楓建設(shè)集團有限公司網(wǎng)站百度推廣關(guān)鍵詞
  • node做網(wǎng)站優(yōu)勢東莞發(fā)布最新通告
  • 生產(chǎn)做網(wǎng)站表帶的制造廠家seo整站優(yōu)化系統(tǒng)
  • 專業(yè)網(wǎng)站建設(shè)模板怎么在百度推廣自己的網(wǎng)站
  • 購物網(wǎng)站的圖片輪播怎么做短鏈接在線生成官網(wǎng)
  • 找別人做公司網(wǎng)站第一步做什么最新網(wǎng)站推廣方法
  • 做網(wǎng)站哪些公司好百度分析
  • 常德網(wǎng)站建設(shè)案例教程360優(yōu)化大師app
  • 自己做網(wǎng)站 為什么出現(xiàn)403營銷渠道名詞解釋
  • 使用他人注冊商標(biāo)做網(wǎng)站湖南網(wǎng)站托管
  • 醫(yī)療器械做網(wǎng)站到哪里先備案網(wǎng)絡(luò)營銷方法