OpenEdv-开源电子网

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

串口中断处理函数处理接收数据问题

[复制链接]

2

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
83
金钱
83
注册时间
2018-3-14
在线时间
19 小时
发表于 2018-4-1 16:45:36 | 显示全部楼层 |阅读模式
1金钱
本帖最后由 LGM1874 于 2018-4-1 22:55 编辑

串口通过esp8266接收手机发送数据的问题,回显数据格式为(回车换行+IPD,0,字符串长度:字符串)
手机发送led_on和led_off
printf出来应该是+IPD,0,6,led_on和+IPD,0,7,led_off
但是无法实现
请问有老师知道是什么问题嘛?
[mw_shl_code=c,true]
void USART3_IRQHandler(void)
{
        u8 res,BufLen,LenBit;        
  u8 SendLen=0;        
        u8 SendLen1=0;
        u8 SendLen2=0;
        if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET)//½óêÕμ½êy¾Y
        {         
                res =USART_ReceiveData(USART3);               

                if((USART3_RX_STA&(1<<15))==0)//&#189;óê&#213;íêμ&#196;ò&#187;&#197;úêy&#190;Y,&#187;1&#195;&#187;óD±&#187;′|àí,&#212;ò2&#187;&#212;ù&#189;óê&#213;&#198;&#228;&#203;&#251;êy&#190;Y
                {
                        if(USART3_RX_STA<USART3_MAX_RECV_LEN)        //&#187;1&#191;éò&#212;&#189;óê&#213;êy&#190;Y
                        {
                                        USART3_RX_BUF[USART3_RX_STA++]=res;        //&#188;&#199;&#194;&#188;&#189;óê&#213;μ&#189;μ&#196;&#214;μ        
                                       
                                                
                                        if(USART3_RX_BUF[0]!=0x0d)//è&#231;1&#251;&#189;óêüμ&#189;&#187;&#216;&#207;&#212;&#195;&#187;&#189;óê&#213;μ&#189;ê&#214;&#187;úêy&#190;Y
                                        {
                                                
                                                if(res==0x0a)
                                                        USART3_RX_STA|=1<<15;                                                        
                                        }
                                        else
                                        {
                                                
                                                if((USART3_RX_BUF[USART3_RX_STA-1]==':')&&(USART3_RX_BUF[USART3_RX_STA-3]==','))//&#187;&#241;è&#161;&#191;í&#187;§&#182;&#203;·¢&#203;í×&#214;·&#251;′&#174;3¤&#182;è
                                                {        
                                                        LenBit=1;
                                                        SendLen=USART3_RX_BUF[USART3_RX_STA-2]-'0';
                                                        BufLen=LenBit+SendLen+10;
                                                        printf("&#191;í&#187;§&#182;&#203;×&#214;·&#251;′&#174;3¤&#182;è=%c\r\n",USART3_RX_BUF[USART3_RX_STA-2]);        
                                                
                                                }
                                                if((USART3_RX_BUF[USART3_RX_STA-1]==':')&&(USART3_RX_BUF[USART3_RX_STA-4]==','))
                                                {               
                                                        LenBit=2;
                                                        SendLen1=USART3_RX_BUF[USART3_RX_STA-2]-'0';
                                                        SendLen2=USART3_RX_BUF[USART3_RX_STA-3]-'0';
                                                        SendLen=10*SendLen1+SendLen2;
                                                        BufLen=LenBit+SendLen+10;
                                                        printf("&#191;í&#187;§&#182;&#203;×&#214;·&#251;′&#174;3¤&#182;è=%c%c\r\n",USART3_RX_BUF[USART3_RX_STA-3],USART3_RX_BUF[USART3_RX_STA-2]);        //&#187;&#241;è&#161;&#191;í&#187;§&#182;&#203;·¢&#203;í×&#214;·&#251;′&#174;3¤&#182;è
                                                }                                                                                       
                                                if((SendLen!=0)&&(USART3_RX_STA&0x3fff)>(BufLen-1))
                                                        USART3_RX_STA|=1<<15;                                                                                                                                                               
                                        }
                        }
                }                                
        }
        else
        {
                        USART3_RX_STA|=1<<15;        
        }
}
                [/mw_shl_code]

初始化完成后手机端发送led_on,能正确计算字符串长度,但是无法使USART3_RX_STA置1

初始化完成后手机端发送led_on,能正确计算字符串长度,但是无法使USART3_RX_STA置1
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2018-4-2 01:25:00 | 显示全部楼层
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-9 11:04

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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