问答1 问答5 问答50 问答500 问答1000
网友互助专业问答平台

stm32f103 keil5 怎么用WiFi串口发送接收某个变量

提问网友 发布时间:2022-04-23 14:21
声明:本网页内容为用户发布,旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:1656858193@qq.com
1个回答
热心网友 回答时间:2023-10-18 02:20

1.WIFI板块+秉火STM32MINI板

2.通过APP控制WIFI板块串口输出“ONA”,“ONB”,“ONF”,MINI板接收,控制电平转换以控制电机正转,反转,停止

现在问题是程序烧好了,发送端(WIFI串口输出)也没问题了,但是不知道程序问题出在哪?

3.附上程序:

#include "stm32f10x_lib.h"

#include "stdio.h"

#include "stm32f10x_it.h"

void RCC_Configuration(void);

void GPIO_Configuration(void);

void NVIC_Configuration(void);

void USART_Configuration(void);

void delay_nms(u16 time);

void TIM4_Configuration(void);

void SendCom_Juge(void);

void TIM3_Configuration(void);

char instruct[5],j;

u8 Recv_Comp;

u16 Rev=4000;//转速

/*******************************************************************************

* 函数名                 : main

* 函数描述       : Main 函数

*******************************************************************************/

int main(void)

RCC_Configuration();

GPIO_Configuration();

NVIC_Configuration();

USART_Configuration();

TIM4_Configuration();

TIM3_Configuration();

while(1)

delay_nms(30);

SendCom_Juge();

void delay_nms(u16 time)

u16 i=0;

while(time--)

i=12000;  //自己定义

while(i--) ;

/*******************************************************************************

* 函数名                  : NVIC_Configuration

*******************************************************************************/

void NVIC_Configuration(void)

NVIC_InitTypeDef NVIC_InitStructure;

#ifdef  VECT_TAB_RAM

NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);/* Set the Vector Table base location at 0x20000000 */

#else  /* VECT_TAB_FLASH  */           /* Set the Vector Table base location at 0x08000000 */

NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);

#endif

NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQChannel ;  //通道设置为串口1中断

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;   //中断占先等级0

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;          //中断响应优先级0,赋予高的优先级

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;             //打开中断

NVIC_Init(&NVIC_InitStructure);

NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQChannel; /*TIM3中断*/

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; /*先占优先级0级*/

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2; /*从优先级3级*/

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; /*IRQ通道被使能*/

NVIC_Init(&NVIC_InitStructure);

/*******************************************************************************

* 函数名                  : USART_Configuration

*******************************************************************************/

void USART_Configuration(void)

USART_InitTypeDef USART_InitStructure;

USART_InitStructure.USART_BaudRate = 9600;

USART_InitStructure.USART_WordLength = USART_WordLength_8b;

USART_InitStructure.USART_StopBits = USART_StopBits_1;

USART_InitStructure.USART_Parity = USART_Parity_No ;

USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;

USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;

USART_Init(USART2 , &USART_InitStructure);

USART_Cmd(USART2 , ENABLE);

USART_ITConfig(USART2,USART_IT_RXNE,ENABLE); //一定要开启串口接收中断

USART_ClearFlag(USART2,USART_FLAG_TC);                     //发送完成标志位

/*******************************************************************************

* 函数名        : RCC_Configuration

* 函数描述  : 设置系统各部分时钟

*******************************************************************************/

void RCC_Configuration(void)

ErrorStatus HSEStartUpStatus;        /* 定义枚举类型变量 HSEStartUpStatus */

RCC_DeInit();          /* 复位系统时钟设置*/

RCC_HSEConfig(RCC_HSE_ON);                  /* 开启HSE*/

HSEStartUpStatus = RCC_WaitForHSEStartUp();                  /* 等待HSE起振并稳定*/

if(HSEStartUpStatus == SUCCESS)                /* 判断HSE起是否振成功,是则进入if()内部 */

RCC_HCLKConfig(RCC_SYSCLK_Div1);             /* 选择HCLK(AHB)时钟源为SYSCLK 1分频 */

RCC_PCLK2Config(RCC_HCLK_Div1);             /* 选择PCLK2时钟源为 HCLK(AHB) 1分频 */

RCC_PCLK1Config(RCC_HCLK_Div2);                     /* 选择PCLK1时钟源为 HCLK(AHB) 2分频 */

FLASH_SetLatency(FLASH_Latency_2);                    /* 设置FLASH延时周期数为2 */

FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);            /* 使能FLASH预取缓存 */

RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);             /* 选择锁相环(PLL)时钟源为HSE 1分频,倍频数为9,则PLL输出频率为 8MHz * 9 = 72MHz */

RCC_PLLCmd(ENABLE);                    /* 使能PLL */

while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);            /* 等待PLL输出稳定 */

RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);             /* 选择SYSCLK时钟源为PLL */

while(RCC_GetSYSCLKSource() != 0x08);              /* 等待PLL成为SYSCLK时钟源 */

/* 打开APB2总线上的GPIOA时钟*/

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB, ENABLE);

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4|RCC_APB1Periph_TIM3|RCC_APB1Periph_USART2 , ENABLE );     //

/*******************************************************************************

* 函数名                  : GPIO_Configuration

* 函数描述            : 设置各GPIO端口功能

*******************************************************************************/

void GPIO_Configuration(void)

GPIO_InitTypeDef GPIO_InitStructure;

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;    /* 设置USART2的Tx脚(PA.2)为第二功能推挽输出模式 */

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOA , &GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;            /* 设置USART2的Rx脚(PA.3)为浮空输入脚 */

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;

GPIO_Init(GPIOA , &GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5;//推挽输出

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO_Init(GPIOA , &GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;//脉冲

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;;

GPIO_Init(GPIOA , &GPIO_InitStructure);

void TIM3_Configuration(void)

TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;/* 定义 TIM_TimeBase 初始化结构体 TIM_TimeBaseStructure */

TIM_OCInitTypeDef  TIM_OCInitStructure;        /* 定义 TIM_OCInit 初始化结构体 TIM_OCInitStructure */

TIM_TimeBaseStructure.TIM_Period = 4600;  //15KHZ 计数重载值

TIM_TimeBaseStructure.TIM_Prescaler = 0;// 预分频值为(0+ 1 = 1)

TIM_TimeBaseStructure.TIM_ClockDivision = 0; //时钟分割0

TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;//向上计数模式

TIM_TimeBaseInit(TIM3 , &TIM_TimeBaseStructure);

TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //        工作模式为 PWM 输出模式

TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;

TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;

TIM_OCInitStructure.TIM_Pulse = Rev;//

TIM_OC2Init(TIM3, &TIM_OCInitStructure);

TIM_OC2PreloadConfig(TIM3 , TIM_OCPreload_Enable);        /* 使能预装载寄存器 */

TIM_ARRPreloadConfig(TIM3, ENABLE);

TIM_Cmd(TIM3 , ENABLE);                /* 启动 TIM 计数 */

int fputc(int ch, FILE *f)

USART_SendData(USART2, (u8) ch);

while(USART_GetFlagStatus(USART2, USART_FLAG_TC) == RESET);

return ch;

void TIM4_Configuration(void)

TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;

TIM_TimeBaseStructure.TIM_Period = 4;

TIM_TimeBaseStructure.TIM_Prescaler = 7199;

TIM_TimeBaseStructure.TIM_ClockDivision = 0;

TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;

TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);

TIM_ClearFlag(TIM4, TIM_FLAG_Update);

TIM_ARRPreloadConfig(TIM4, DISABLE);

TIM_ITConfig(TIM4,TIM_IT_Update,ENABLE);

void SendCom_Juge(void)

if(Recv_Comp==1)

Recv_Comp=0;

j=0;

if((instruct[0] == 'O') && (instruct[1] == 'N')&& (instruct[2] == 'A'))

GPIO_SetBits(GPIOA,GPIO_Pin_4);

GPIO_ResetBits(GPIOA,GPIO_Pin_5);

if((instruct[0] == 'O') && (instruct[1] == 'N')&& (instruct[2] == 'B'))

GPIO_ResetBits(GPIOA,GPIO_Pin_4);

GPIO_SetBits(GPIOA,GPIO_Pin_5);

if((instruct[0] == 'O') && (instruct[1] == 'N')&& (instruct[2] == 'F'))

GPIO_SetBits(GPIOA,GPIO_Pin_4);

GPIO_SetBits(GPIOA,GPIO_Pin_5);

热心网友 回答时间:2023-10-18 02:20

1.WIFI板块+秉火STM32MINI板

2.通过APP控制WIFI板块串口输出“ONA”,“ONB”,“ONF”,MINI板接收,控制电平转换以控制电机正转,反转,停止

现在问题是程序烧好了,发送端(WIFI串口输出)也没问题了,但是不知道程序问题出在哪?

3.附上程序:

#include "stm32f10x_lib.h"

#include "stdio.h"

#include "stm32f10x_it.h"

void RCC_Configuration(void);

void GPIO_Configuration(void);

void NVIC_Configuration(void);

void USART_Configuration(void);

void delay_nms(u16 time);

void TIM4_Configuration(void);

void SendCom_Juge(void);

void TIM3_Configuration(void);

char instruct[5],j;

u8 Recv_Comp;

u16 Rev=4000;//转速

/*******************************************************************************

* 函数名                 : main

* 函数描述       : Main 函数

*******************************************************************************/

int main(void)

RCC_Configuration();

GPIO_Configuration();

NVIC_Configuration();

USART_Configuration();

TIM4_Configuration();

TIM3_Configuration();

while(1)

delay_nms(30);

SendCom_Juge();

void delay_nms(u16 time)

u16 i=0;

while(time--)

i=12000;  //自己定义

while(i--) ;

/*******************************************************************************

* 函数名                  : NVIC_Configuration

*******************************************************************************/

void NVIC_Configuration(void)

NVIC_InitTypeDef NVIC_InitStructure;

#ifdef  VECT_TAB_RAM

NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);/* Set the Vector Table base location at 0x20000000 */

#else  /* VECT_TAB_FLASH  */           /* Set the Vector Table base location at 0x08000000 */

NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);

#endif

NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQChannel ;  //通道设置为串口1中断

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;   //中断占先等级0

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;          //中断响应优先级0,赋予高的优先级

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;             //打开中断

NVIC_Init(&NVIC_InitStructure);

NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQChannel; /*TIM3中断*/

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; /*先占优先级0级*/

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2; /*从优先级3级*/

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; /*IRQ通道被使能*/

NVIC_Init(&NVIC_InitStructure);

/*******************************************************************************

* 函数名                  : USART_Configuration

*******************************************************************************/

void USART_Configuration(void)

USART_InitTypeDef USART_InitStructure;

USART_InitStructure.USART_BaudRate = 9600;

USART_InitStructure.USART_WordLength = USART_WordLength_8b;

USART_InitStructure.USART_StopBits = USART_StopBits_1;

USART_InitStructure.USART_Parity = USART_Parity_No ;

USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;

USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;

USART_Init(USART2 , &USART_InitStructure);

USART_Cmd(USART2 , ENABLE);

USART_ITConfig(USART2,USART_IT_RXNE,ENABLE); //一定要开启串口接收中断

USART_ClearFlag(USART2,USART_FLAG_TC);                     //发送完成标志位

/*******************************************************************************

* 函数名        : RCC_Configuration

* 函数描述  : 设置系统各部分时钟

*******************************************************************************/

void RCC_Configuration(void)

ErrorStatus HSEStartUpStatus;        /* 定义枚举类型变量 HSEStartUpStatus */

RCC_DeInit();          /* 复位系统时钟设置*/

RCC_HSEConfig(RCC_HSE_ON);                  /* 开启HSE*/

HSEStartUpStatus = RCC_WaitForHSEStartUp();                  /* 等待HSE起振并稳定*/

if(HSEStartUpStatus == SUCCESS)                /* 判断HSE起是否振成功,是则进入if()内部 */

RCC_HCLKConfig(RCC_SYSCLK_Div1);             /* 选择HCLK(AHB)时钟源为SYSCLK 1分频 */

RCC_PCLK2Config(RCC_HCLK_Div1);             /* 选择PCLK2时钟源为 HCLK(AHB) 1分频 */

RCC_PCLK1Config(RCC_HCLK_Div2);                     /* 选择PCLK1时钟源为 HCLK(AHB) 2分频 */

FLASH_SetLatency(FLASH_Latency_2);                    /* 设置FLASH延时周期数为2 */

FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);            /* 使能FLASH预取缓存 */

RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);             /* 选择锁相环(PLL)时钟源为HSE 1分频,倍频数为9,则PLL输出频率为 8MHz * 9 = 72MHz */

RCC_PLLCmd(ENABLE);                    /* 使能PLL */

while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);            /* 等待PLL输出稳定 */

RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);             /* 选择SYSCLK时钟源为PLL */

while(RCC_GetSYSCLKSource() != 0x08);              /* 等待PLL成为SYSCLK时钟源 */

/* 打开APB2总线上的GPIOA时钟*/

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB, ENABLE);

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4|RCC_APB1Periph_TIM3|RCC_APB1Periph_USART2 , ENABLE );     //

/*******************************************************************************

* 函数名                  : GPIO_Configuration

* 函数描述            : 设置各GPIO端口功能

*******************************************************************************/

void GPIO_Configuration(void)

GPIO_InitTypeDef GPIO_InitStructure;

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;    /* 设置USART2的Tx脚(PA.2)为第二功能推挽输出模式 */

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOA , &GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;            /* 设置USART2的Rx脚(PA.3)为浮空输入脚 */

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;

GPIO_Init(GPIOA , &GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5;//推挽输出

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO_Init(GPIOA , &GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;//脉冲

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;;

GPIO_Init(GPIOA , &GPIO_InitStructure);

void TIM3_Configuration(void)

TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;/* 定义 TIM_TimeBase 初始化结构体 TIM_TimeBaseStructure */

TIM_OCInitTypeDef  TIM_OCInitStructure;        /* 定义 TIM_OCInit 初始化结构体 TIM_OCInitStructure */

TIM_TimeBaseStructure.TIM_Period = 4600;  //15KHZ 计数重载值

TIM_TimeBaseStructure.TIM_Prescaler = 0;// 预分频值为(0+ 1 = 1)

TIM_TimeBaseStructure.TIM_ClockDivision = 0; //时钟分割0

TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;//向上计数模式

TIM_TimeBaseInit(TIM3 , &TIM_TimeBaseStructure);

TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //        工作模式为 PWM 输出模式

TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;

TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;

TIM_OCInitStructure.TIM_Pulse = Rev;//

TIM_OC2Init(TIM3, &TIM_OCInitStructure);

TIM_OC2PreloadConfig(TIM3 , TIM_OCPreload_Enable);        /* 使能预装载寄存器 */

TIM_ARRPreloadConfig(TIM3, ENABLE);

TIM_Cmd(TIM3 , ENABLE);                /* 启动 TIM 计数 */

int fputc(int ch, FILE *f)

USART_SendData(USART2, (u8) ch);

while(USART_GetFlagStatus(USART2, USART_FLAG_TC) == RESET);

return ch;

void TIM4_Configuration(void)

TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;

TIM_TimeBaseStructure.TIM_Period = 4;

TIM_TimeBaseStructure.TIM_Prescaler = 7199;

TIM_TimeBaseStructure.TIM_ClockDivision = 0;

TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;

TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);

TIM_ClearFlag(TIM4, TIM_FLAG_Update);

TIM_ARRPreloadConfig(TIM4, DISABLE);

TIM_ITConfig(TIM4,TIM_IT_Update,ENABLE);

void SendCom_Juge(void)

if(Recv_Comp==1)

Recv_Comp=0;

j=0;

if((instruct[0] == 'O') && (instruct[1] == 'N')&& (instruct[2] == 'A'))

GPIO_SetBits(GPIOA,GPIO_Pin_4);

GPIO_ResetBits(GPIOA,GPIO_Pin_5);

if((instruct[0] == 'O') && (instruct[1] == 'N')&& (instruct[2] == 'B'))

GPIO_ResetBits(GPIOA,GPIO_Pin_4);

GPIO_SetBits(GPIOA,GPIO_Pin_5);

if((instruct[0] == 'O') && (instruct[1] == 'N')&& (instruct[2] == 'F'))

GPIO_SetBits(GPIOA,GPIO_Pin_4);

GPIO_SetBits(GPIOA,GPIO_Pin_5);

本文如未解决您的问题请添加抖音号:51dongshi(抖音搜索懂视),直接咨询即可。

有谁知道农商银行对公账户里面的贷款账户怎么对账的? 农村信用社开公户费用- 问一问 农商银行对公账户上操作员号是什么 中国农商银行对公账户是对的开户行弄错了会到账吗 农商银行对公账户怎么激活 在农商行预约开设对公账户怎么看进度? 北京农商银行开对公账户有什么要求? 福建农商银行公户周末可以跨行转账吗 深圳农商行开对公账户,要那些手续 农商行对公账户怎么设置余额变动提醒 农商银行的对公帐号怎么把银行流水导出来? 农商银行对公账户没有银行卡吗 农商行对公账户怎么登录 农商能不能办理对公账户? 农商银行对公账户一年多少钱? 牛肉炖西红柿木耳的家常做法 番茄山药炖牛肉的做法步骤图,怎么做好吃 西红柿炖牛肉的做法图解,西红柿炖牛肉怎么做 做,怎么做,家常西红柿炖牛肉做法大全附图 请问粉橘色酱汁的法式番茄炖牛肉怎么做? 72x125ⅹ15的简单算法? 为什么stm32f103的sdio 可以接sd卡 不能做wifi stm32f103单片机开发板哪个比较好,最好带单片机源码和APP源码?有推荐吗 物联网STM32 wifi开发板提供stm32 串口/uart例程吗,有详细的讲解吗? 基于WiFi和移动终端的智能照明控制系统设计 掌握物联网开发技术,未来究竟有多吃香 有哪位大神用过STM32F103驱动USB WIFI模块吗 服装店挂衣服卖的架子叫什么? 服装店的展示架摆放有什么讲究,灯光有什么要求。 STM32开发都有什么工具 服装店装修展示架要怎么选择 ESP32 如何配置 CAN 双滤波器模式 男女服装集合店用什么颜色架子最合适 服装店货架如何陈列摆放? 小型服装店货架怎样摆放好( 服装店里挂衣服的架子多高? 请问哪里有服装店的衣架展示架卖呢? 10平米的服装店怎么装修好点,是用展示架好,还是用展示柜 武汉哪里可以买到服装店展示架 服装店里的展示架、服装架这些去哪买呢?
Top