野火电子论坛

 找回密码
 注册

扫一扫,访问微社区

查看: 124|回复: 9

[F1-指南者] stm32 chuank将收到数据返回给串口调试助手。不管串口调试助手发送什么,返回的值....

[复制链接]
发表于 2019-6-6 14:36:59 | 显示全部楼层 |阅读模式
我发送了4个aaaa但是从仿真里看到只接受到一个a然后就出了中断,关键是这时候标志位没有置1进不了main中的while(1)里但是在串口调试助手上用16进制显示却可以看到00 00.希望大佬指点一二。@fire @WishWish

USARTx.rar

759.32 KB, 下载次数: 9

回复

使用道具 举报

发表于 2019-6-6 15:24:33 | 显示全部楼层
我打开看了你的程序看晕了,不知道你想实现什么
回复 支持 反对

使用道具 举报

发表于 2019-6-6 15:37:03 | 显示全部楼层
本帖最后由 非谢家之宝树 于 2019-6-6 15:44 编辑

接收中断,使用uart接收函数读取数据后rxne会自动清除,所以把清除放读取后面或者不清除 然后把中断里面的==1改成==SET看看

回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-6 18:15:52 | 显示全部楼层
非谢家之宝树 发表于 2019-6-6 15:37
接收中断,使用uart接收函数读取数据后rxne会自动清除,所以把清除放读取后面或者不清除 然后把中断里面的= ...

把清除屏蔽之后试了不行
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-6 18:18:22 | 显示全部楼层
WishWish 发表于 2019-6-6 15:24
我打开看了你的程序看晕了,不知道你想实现什么

就是电脑上的串口调试助手给板子串口1发送东西,串口1接受后存到数组里然后在主函数中用串口1返回给电脑的串口调试助手
回复 支持 反对

使用道具 举报

发表于 2019-6-6 22:15:17 | 显示全部楼层
[C] 纯文本查看 复制代码
//全局数组
u8 buff[20];

//接收计数
u8 RxNum=0;

//命令字符串标志
u8 CMD_FLAG=0;

void CMD_FUN(void )
{
        for(int i=0;i<20;i++)
        {
                
      USART_SendData(USART1,buff[i]); 
                
        }
        
        RxNum=0;
        
        CMD_FLAG=0;
                
}

void USART1_IRQHandler(void)
{
    u8 temp;

    if(USART_GetITStatus(USART1,USART_IT_RXNE)==SET)
    {
                temp=USART_ReceiveData(USART1);
                
                
                if(CMD_FLAG==0)
                {        

          if( temp!='\n')
              {           
                     buff[RxNum]=temp;
                   
                     if(RxNum<19)
                     {
                           RxNum++;
                     }else
                     {  
                           CMD_FLAG=1;
                           
                           printf("Exceeding the limit");
                     }
                   
              }else if( temp=='\n')
                  {
                          CMD_FLAG=1;
                          
                         // CMD_FUN()//建议放在main轮询判断CMD_FLAG==1来调用
                                                                                
                  }
        }                        
    }
}
123nan 发表于 2019-6-6 18:18
就是电脑上的串口调试助手给板子串口1发送东西,串口1接受后存到数组里然后在主函数中用串口1返回给电脑 ...

你看串口章节例程里面的哪个环形队列,用空闲中断来判断你发完一串,再把数组里收到的for发出去

如果你想用比如\n来判断包结束,你参考我下面随便写的吧,可能有BUG,看个意思就行了,

回复 支持 反对

使用道具 举报

发表于 2019-6-6 22:15:54 | 显示全部楼层
123nan 发表于 2019-6-6 18:15
把清除屏蔽之后试了不行

判断改了吗?这函数返回的是SET
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-9 15:50:07 | 显示全部楼层
WishWish 发表于 2019-6-6 22:15
[mw_shl_code=c,true]//全局数组
u8 buff[20];

咱俩写的不是一个意思吗?其实我只是想知道我自己写的错在哪了。
捕获.JPG
捕获1.JPG
捕获2.JPG
回复 支持 反对

使用道具 举报

发表于 2019-6-9 15:56:06 | 显示全部楼层
123nan 发表于 2019-6-9 15:50
咱俩写的不是一个意思吗?其实我只是想知道我自己写的错在哪了。

光看看不问题的话,就进debug调试
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-9 16:20:01 | 显示全部楼层
WishWish 发表于 2019-6-9 15:56
光看看不问题的话,就进debug调试

我找到问题了。while(1)中的RX_Buf【i】和中断中的printf去掉,就好了。
回复 支持 反对

使用道具 举报

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

本版积分规则

野火电子公众号

手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号-2 大学生ARM嵌入式2群

GMT+8, 2019-6-18 18:48 , Processed in 0.041018 second(s), 33 queries , Gzip On.

野火电子论坛

© 2014-2016 www.firebbs.cn

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