OpenEdv-开源电子网

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

求助一个小问题

[复制链接]

21

主题

64

帖子

0

精华

初级会员

Rank: 2

积分
147
金钱
147
注册时间
2017-3-6
在线时间
32 小时
发表于 2017-3-22 10:04:58 | 显示全部楼层 |阅读模式
2金钱
我想将USART3接受到的数据存放到数组USART3_RX_BUF[],再将USART3_RX_BUF[]的数据发给USART1,最后显示到串口助手
                       for(t=0;t<len;t++)
                        {
                                USART_SendData(USART3,USART3_RX_BUF[t]);
                                while(USART_GetFlagStatus(USART3,USART_FLAG_TC)!=SET);
                        }

我想问的是直接用这串代码可行么?

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

使用道具 举报

1

主题

98

帖子

0

精华

高级会员

Rank: 4

积分
618
金钱
618
注册时间
2015-11-20
在线时间
89 小时
发表于 2017-3-22 10:24:00 | 显示全部楼层
你这不是还是在用USART3发送么?
回复

使用道具 举报

21

主题

64

帖子

0

精华

初级会员

Rank: 2

积分
147
金钱
147
注册时间
2017-3-6
在线时间
32 小时
 楼主| 发表于 2017-3-22 10:29:52 | 显示全部楼层
gsndragon 发表于 2017-3-22 10:24
你这不是还是在用USART3发送么?

for(t=0;t<len;t++)
                        {
                          USART_SendData(USART1,USART3_RX_BUF[t]);
                                while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);
                        }
之前复制错了,抱歉!大神帮我看看这串代码有问题么?我想将USART3_RX_BUF[]中的数据发送给USART1,最后显示在串口助手上
回复

使用道具 举报

21

主题

64

帖子

0

精华

初级会员

Rank: 2

积分
147
金钱
147
注册时间
2017-3-6
在线时间
32 小时
 楼主| 发表于 2017-3-22 10:30:22 | 显示全部楼层
gsndragon 发表于 2017-3-22 10:24
你这不是还是在用USART3发送么?

for(t=0;t<len;t++)
                        {
                          USART_SendData(USART1,USART3_RX_BUF[t]);
                                while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);
                        }
之前复制错了,抱歉!大神帮我看看这串代码有问题么?我想将USART3_RX_BUF[]中的数据发送给USART1,最后显示在串口助手上
回复

使用道具 举报

21

主题

64

帖子

0

精华

初级会员

Rank: 2

积分
147
金钱
147
注册时间
2017-3-6
在线时间
32 小时
 楼主| 发表于 2017-3-22 10:30:42 | 显示全部楼层
gsndragon 发表于 2017-3-22 10:24
你这不是还是在用USART3发送么?

for(t=0;t<len;t++)
                        {
                          USART_SendData(USART1,USART3_RX_BUF[t]);
                                while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);
                        }
之前复制错了,抱歉!大神帮我看看这串代码有问题么?我想将USART3_RX_BUF[]中的数据发送给USART1,最后显示在串口助手上
回复

使用道具 举报

21

主题

64

帖子

0

精华

初级会员

Rank: 2

积分
147
金钱
147
注册时间
2017-3-6
在线时间
32 小时
 楼主| 发表于 2017-3-22 10:32:25 | 显示全部楼层
gsndragon 发表于 2017-3-22 10:24
你这不是还是在用USART3发送么?

之前复制错了。现在将上面代码中的串口3改成串口1可行不?
回复

使用道具 举报

21

主题

64

帖子

0

精华

初级会员

Rank: 2

积分
147
金钱
147
注册时间
2017-3-6
在线时间
32 小时
 楼主| 发表于 2017-3-22 10:32:57 | 显示全部楼层
yklstudent 发表于 2017-3-22 10:12
你这是发送代码,用于USART1发送没什么问题

        while(1)
        {
          for(i=0;i<6;i++)
                        {
                          while(USART_GetFlagStatus(USART3,USART_FLAG_TC)==RESET);
                          USART_SendData(USART3,ch);
                        }
                if(USART3_RX_STA&0x8000)
                {
                        len=USART3_RX_STA&0x3fff;
                        for(t=0;t<len;t++)
                        {
                          USART_SendData(USART1,USART3_RX_BUF[t]);
                                while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);
                        }
                    USART3_RX_STA=0;
                }else
                {
                 
                        times++;
                        if(times%30==0)LED0=!LED0;
                        delay_ms(20);
                }
        }
}
回复

使用道具 举报

21

主题

64

帖子

0

精华

初级会员

Rank: 2

积分
147
金钱
147
注册时间
2017-3-6
在线时间
32 小时
 楼主| 发表于 2017-3-22 10:33:38 | 显示全部楼层
yklstudent 发表于 2017-3-22 10:12
你这是发送代码,用于USART1发送没什么问题

帮我看看这串代码可行不?
回复

使用道具 举报

8

主题

45

帖子

0

精华

高级会员

Rank: 4

积分
757
金钱
757
注册时间
2016-3-1
在线时间
90 小时
发表于 2017-3-22 11:26:03 | 显示全部楼层
首先,先配置串口1和串口3.

先在USART3那里接受数据,接受到的数据存放到数组USART3_RX_BUF[]
unsigned char UART3GetByte(unsigned char* GetData)
{             
        if(USART_GetFlagStatus(USART3, USART_FLAG_RXNE) == RESET)
        {  return 0;//没有接收到数据
                }
        *GetData = USART_ReceiveData(USART1);
        return 1;//收到数据
}
我使用的是查询的方式。没有开中断。
void UART1Test(void)
{
       unsigned char i = 0;

       while(1)
       {   
                 while(UART1GetByte(&i))
        {
         USART_SendData(USART1,i); 把数据发出去
        }      
       }     
}
UART1Test()你可以放到主循环中
回复

使用道具 举报

21

主题

64

帖子

0

精华

初级会员

Rank: 2

积分
147
金钱
147
注册时间
2017-3-6
在线时间
32 小时
 楼主| 发表于 2017-3-22 13:27:49 | 显示全部楼层
linzhijiang_sz 发表于 2017-3-22 11:26
首先,先配置串口1和串口3.

先在USART3那里接受数据,接受到的数据存放到数组USART3_RX_BUF[]

我不太了解查询的方式,我想问这条语句 while(UART1GetByte(&i))是等待USART1接受字符么?
回复

使用道具 举报

8

主题

45

帖子

0

精华

高级会员

Rank: 4

积分
757
金钱
757
注册时间
2016-3-1
在线时间
90 小时
发表于 2017-3-22 14:23:54 | 显示全部楼层
咎落 发表于 2017-3-22 13:27
我不太了解查询的方式,我想问这条语句 while(UART1GetByte(&i))是等待USART1接受字符么?

不好意思,while循环的判断写错了!
void UART1Test(void)
{
       unsigned char i = 0;

       while(1)
       {   
                 while(UART3GetByte(&i))
        {
         USART_SendData(USART1,i); 把数据发出去
        }      
       }     
}
改成while(UART3GetByte(&i))才对
回复

使用道具 举报

21

主题

64

帖子

0

精华

初级会员

Rank: 2

积分
147
金钱
147
注册时间
2017-3-6
在线时间
32 小时
 楼主| 发表于 2017-3-22 19:27:40 | 显示全部楼层
linzhijiang_sz 发表于 2017-3-22 14:23
不好意思,while循环的判断写错了!
void UART1Test(void)
{

我对查询方式比较陌生,我之前学的是通过中断来接受数据存放到USART_RX_BUF[]中。
UART3GetByte()的入口参数是自己定义的数组么?是不是还需要将这个函数放入main函数中?
回复

使用道具 举报

21

主题

64

帖子

0

精华

初级会员

Rank: 2

积分
147
金钱
147
注册时间
2017-3-6
在线时间
32 小时
 楼主| 发表于 2017-3-22 19:51:47 | 显示全部楼层
linzhijiang_sz 发表于 2017-3-22 14:23
不好意思,while循环的判断写错了!
void UART1Test(void)
{

还请大神帮我看一下主函数的程序,十分感谢,对于有些低级错误还请包涵!
int main(void)
{

        u8 i;
        u8 ch[5]={0x68,0x04,0x00,0x04,0x08};
        u8 USART_RX_BUF[200];
        delay_init(168);
        UART13_Init(9600);
        LED_Init();

        while(1)
        {
          for(i=0;i<6;i++)
                        {
                          while(USART_GetFlagStatus(USART3,USART_FLAG_TC)==RESET);
                          USART_SendData(USART3,ch);
                        }
                        if(USART_ReceiveData(USART3))
                {
                   LED1=!LED1;
                   delay_ms(30);
                }
                UART3GetByte(USART_RX_BUF[200]);
                UART1Test();
        }
  
}
回复

使用道具 举报

8

主题

45

帖子

0

精华

高级会员

Rank: 4

积分
757
金钱
757
注册时间
2016-3-1
在线时间
90 小时
发表于 2017-3-23 09:32:29 | 显示全部楼层
咎落 发表于 2017-3-22 19:51
还请大神帮我看一下主函数的程序,十分感谢,对于有些低级错误还请包涵!
int main(void)
{

是不是UART1Test();没有实现你的功能呢?
回复

使用道具 举报

21

主题

64

帖子

0

精华

初级会员

Rank: 2

积分
147
金钱
147
注册时间
2017-3-6
在线时间
32 小时
 楼主| 发表于 2017-3-23 19:37:29 | 显示全部楼层
linzhijiang_sz 发表于 2017-3-23 09:32
是不是UART1Test();没有实现你的功能呢?

我已经用中断实现我想要的结果了,对于查询方式还是不太懂。感觉主程序不怎么会写,没接触过查询方式,不知道查询方式主程序该用些什么函数?还请大神具体给我讲解一下
回复

使用道具 举报

8

主题

45

帖子

0

精华

高级会员

Rank: 4

积分
757
金钱
757
注册时间
2016-3-1
在线时间
90 小时
发表于 2017-3-24 11:29:59 | 显示全部楼层
咎落 发表于 2017-3-23 19:37
我已经用中断实现我想要的结果了,对于查询方式还是不太懂。感觉主程序不怎么会写,没接触过查询方式,不 ...

查询的方式就是每段时间去查串口接收信号的flag置起了没有。就譬如说,假如你要查你的快递是否到了。你可以每段时间去官网查它的状态,到了哪里,这就是查询方式。或者你可以等待,等待服务台给你发信息说你的快递到了,这就是中断。大概就这么个意思!
回复

使用道具 举报

39

主题

234

帖子

0

精华

高级会员

Rank: 4

积分
630
金钱
630
注册时间
2016-8-25
在线时间
57 小时
发表于 2017-3-25 11:25:41 | 显示全部楼层
咎落 发表于 2017-3-23 19:37
我已经用中断实现我想要的结果了,对于查询方式还是不太懂。感觉主程序不怎么会写,没接触过查询方式,不 ...

最近发现查询方式也可以通过while-break循环来实现,可以尝试一下
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-18 20:20

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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