OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3403|回复: 2

STM32F103VE WIFI转串口发送数据 能发送 但收不到

[复制链接]

3

主题

16

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2016-9-2
在线时间
8 小时
发表于 2016-12-28 17:56:29 | 显示全部楼层 |阅读模式
10金钱
[mw_shl_code=cpp,true]//初始化
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_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;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
    GPIO_Init(GPIOA , &GPIO_InitStructure);

    NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2 ;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;                //
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                        //IRQ通道使能
        NVIC_Init(&NVIC_InitStructure);        //根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器USART1

//配置
        /*       
    *        串口2-WIFI(TX2 RX2)-波特率为19200bps
    */
    USART_InitStructure.USART_BaudRate = 19200;
    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_ITConfig(USART2, USART_IT_RXNE, ENABLE);
        /* 使能USART2*/
        USART_Cmd(USART2 , ENABLE);

//中断函数
u8 n1=0;
u8 enableCnt=0;
void USART2_IRQHandler(void)
{
        u16 rcvdata=0;
        if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)  //接收中断(接收到的数据必须是0xFB开头+小车编号+数据1+数据2+0xBF结尾)
        {
                USART_ClearITPendingBit(USART2, USART_IT_RXNE);

                //校验完成
                rcvdata=USART_ReceiveData(USART2);
                if(rcvdata==0xFB)
                {
                        n1=0;
                        enableCnt=1;
                }
                if(enableCnt==1)
                {
                        Cmd[n1]=rcvdata;
                        n1++;
                        if(n1==10)//
                        {
                                enableCnt=0;
                                if(Cmd[0]==0xFB && Cmd[9]==0xBF)
                                {
                                        FLAG_COM3_STA=0x80;
                                }
                                control_mode=Cmd[1];
                                control_Cmd=Cmd[3];
                        }
                }
                if(USART_GetFlagStatus(USART2, USART_FLAG_ORE) == SET)
                {
                        USART_ClearFlag(USART2, USART_FLAG_ORE);
                        USART_ReceiveData(USART2);
                }
        }
}

//发送函数
void USART2_SendData(u8 tem)//串口2发送
{
        if(USART_GetFlagStatus(USART2, USART_FLAG_TC) == SET)
                USART_ClearFlag(USART2, USART_FLAG_TC);
       
        USART_SendData(USART2 ,tem);
        while(USART_GetFlagStatus(USART2,USART_FLAG_TXE) == RESET);
}

[/mw_shl_code]

以上是有关串口操作的代码。
现在的问题是:在计算机刚与单片连接时(即第一次连接成功),是能正常的收、发数据的。在计算机要求单片做完自动的过程(这个过程耗时比较长),再次下发指令,要求单片回传数据时,上位计算机收不到数据。通过JTAG在线监视,上位计算机的指令成功的下发,并且也取得了相关的数据,也执行了上面的USART2_SendData函数,可上位计算机就是收不到数据。调用发送函数如下:
    USART2_SendData(0xFA);
    USART2_SendData(0x02);
    USART2_SendData(Voltage);
    USART2_SendData(0xAF);   
请工程师们不吝赐教。当然确实可行的话,会适当的给予经济补偿(200RMB)。感激不尽!

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

16

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2016-9-2
在线时间
8 小时
 楼主| 发表于 2016-12-28 18:19:46 | 显示全部楼层
可能大家都很忙,自己顶一下吧……
回复

使用道具 举报

19

主题

176

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1105
金钱
1105
注册时间
2015-10-27
在线时间
206 小时
发表于 2016-12-30 14:14:26 | 显示全部楼层
抛开WIFI不说,你发送的数据,用串口是否能接收到数据
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-23 00:09

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表