OpenEdv-开源电子网

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

2台单片机串口通信之间没反应,单独都能收发到电脑上,stm32f103RCT6芯片的原子迷你板

[复制链接]

3

主题

12

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2018-7-16
在线时间
2 小时
发表于 2018-7-20 19:43:38 | 显示全部楼层 |阅读模式
2金钱
接收程序代码:int main(void) {
       
        delay_init();                     //延时函数初始化       
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 设置中断优先级分组2
        uart_init(9600);         //串口初始化为9600
        LED_Init();                           //初始化与LED连接的硬件接口
        LCD_Init();
                POINT_COLOR=RED;                                 
                LCD_Clear(WHITE);
                POINT_COLOR=RED;          
       
  while(1)
        {
                if(USART_RX_STA&0x8000)
                {                                          
                       
                        LCD_ShowString(45,120,200,24,24,USART_RX_BUF);       
                        delay_ms(1000);          
                        USART_RX_STA=0;
                }
                       

        }         

}
发送程序代码:int main(void)
{       
        u8 t;
        u8 len;         
         u8 x[]=" Do my best !";
        delay_init();                     //延时函数初始化       
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 设置中断优先级分组2
        uart_init(9600);         //串口初始化为9600
        LED_Init();                           //初始化与LED连接的硬件接口
        LCD_Init();
        POINT_COLOR=RED;                                 
        LCD_Clear(WHITE);
        POINT_COLOR=RED;          
        LCD_ShowString(45,120,200,24,24,x);                                          
        len=13;
        while(1){
        for(t=0;t<len;t++)
        {
                USART1->DR=x[t];
                while((USART1->SR&0X40)==0);//等待发送结束
        }
               
}
               
}
然后它们的波特率、数据位、校检位均一致,并且txt与rxt不管怎么接都不行,单独跟电脑可以实现功能:在显示屏LCD上可以显示收发数据。














最佳答案

查看完整内容[请看2#楼]

int main(void) { u8 t; u8 len; u8 x[]=" Do my best !"; delay_init(); //延时函数初始化 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 设置中断优先级分组2 uart_init(9600); //串口初始化为9600 LED_Init(); //初始化与LED连接的硬件接口 LCD_ ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

33

主题

984

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8028
金钱
8028
注册时间
2014-8-13
在线时间
1595 小时
发表于 2018-7-20 19:43:39 | 显示全部楼层
本帖最后由 mack13013 于 2018-7-20 22:59 编辑
WOBUZAI 发表于 2018-7-20 20:50
@245925587 还是不行,是我的代码加的不对吗:
int main(void)
{        

int main(void)
{        
         u8 t;
         u8 len;         
          u8 x[]=" Do my best !";
         delay_init();                     //延时函数初始化        
         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 设置中断优先级分组2
         uart_init(9600);         //串口初始化为9600
         LED_Init();                           //初始化与LED连接的硬件接口
         LCD_Init();
         POINT_COLOR=RED;                                 
         LCD_Clear(WHITE);
         POINT_COLOR=RED;         
         LCD_ShowString(45,120,200,24,24,x);                                          
         len=13;
         while(1){
         for(t=0;t<len;t++)
         {
                 USART1->DR=x[t];
                 while((USART1->SR&0X40)==0);//等待发送结束
        }
         USART1->DR=0x0d;
         while((USART1->SR&0X40)==0)
          {
                ;//等待发送结束         
                 //写代码不要太随意了。。真的很想再弄一对中文的大括号坑你一把,  擦,还是你行,稍微检查了一下才发现大括号没配对。。我是编辑了再编辑。。你还是找本书认认真真的看一遍吧,一定要认真
          }
         USART1->DR=0x0a;
         
}

回复

使用道具 举报

3

主题

12

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2018-7-16
在线时间
2 小时
 楼主| 发表于 2018-7-20 19:46:00 | 显示全部楼层
本帖最后由 WOBUZAI 于 2018-7-20 19:53 编辑

有没有大神呀!看下哪出了错。
回复

使用道具 举报

3

主题

12

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2018-7-16
在线时间
2 小时
 楼主| 发表于 2018-7-20 19:53:46 | 显示全部楼层
回复

使用道具 举报

3

主题

12

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2018-7-16
在线时间
2 小时
 楼主| 发表于 2018-7-20 19:57:44 | 显示全部楼层
@原子哥
回复

使用道具 举报

10

主题

778

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6745
金钱
6745
注册时间
2017-4-12
在线时间
1258 小时
发表于 2018-7-20 20:22:31 | 显示全部楼层
发送完后 多发送  0x0d 0x0a
回复

使用道具 举报

3

主题

12

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2018-7-16
在线时间
2 小时
 楼主| 发表于 2018-7-20 20:34:01 | 显示全部楼层
这个可以吗?我试试。
回复

使用道具 举报

3

主题

12

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2018-7-16
在线时间
2 小时
 楼主| 发表于 2018-7-20 20:50:58 | 显示全部楼层
@245925587 还是不行,是我的代码加的不对吗:
int main(void)
{       
        u8 t;
        u8 len;         
         u8 x[]=" Do my best !";
        delay_init();                     //延时函数初始化       
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 设置中断优先级分组2
        uart_init(9600);         //串口初始化为9600
        LED_Init();                           //初始化与LED连接的硬件接口
        LCD_Init();
        POINT_COLOR=RED;                                 
        LCD_Clear(WHITE);
        POINT_COLOR=RED;          
        LCD_ShowString(45,120,200,24,24,x);                                          
        len=13;
        while(1){
        for(t=0;t<len;t++)
        {
                USART1->DR=x[t];
                while((USART1->SR&0X40)==0);//等待发送结束
        }
        USART1->DR=0x0d;
        USART1->DR=0x0a;
       
}
               
}
回复

使用道具 举报

10

主题

778

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6745
金钱
6745
注册时间
2017-4-12
在线时间
1258 小时
发表于 2018-7-20 22:42:20 | 显示全部楼层
WOBUZAI 发表于 2018-7-20 20:50
@245925587 还是不行,是我的代码加的不对吗:
int main(void)
{       

发送要等待发送完成,再发送另一个,之所以说 发送完在发送 0x0d 0x0a 是感觉你用原子的那个判断接收完毕,所以必须要0x0d 0x0a 结尾
回复

使用道具 举报

3

主题

12

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2018-7-16
在线时间
2 小时
 楼主| 发表于 2018-7-21 10:01:44 | 显示全部楼层
本帖最后由 WOBUZAI 于 2018-7-21 10:05 编辑

非常感谢!最后总结一下:因为原子的程序在接受中断中约定以回车符为接受结束标志,所以最后不管发送什么都必须多发一个回车符,即0x0a和0x0b.
回复

使用道具 举报

33

主题

984

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8028
金钱
8028
注册时间
2014-8-13
在线时间
1595 小时
发表于 2018-7-21 12:37:09 | 显示全部楼层
WOBUZAI 发表于 2018-7-21 10:01
非常感谢!最后总结一下:因为原子的程序在接受中断中约定以回车符为接受结束标志,所以最后不管发送什么都 ...

我擦,你好坑。 真的就那么不在意把事情做对吗?最后是0x0a和0x0b??
Giant baby!

最后总结一下:因为原子的程序在接收中断中会判断是否接收到了\r\n(回车换行,对应十六进制ASCII码为0x0D,0x0A),所以最后不管发送什么都必须多发一个回车符和一个换行符,即0x0d,0x0a。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-19 14:40

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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