OpenEdv-开源电子网

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

请教STM32串口发送中断异常问题

[复制链接]

53

主题

126

帖子

0

精华

初级会员

Rank: 2

积分
95
金钱
95
注册时间
2013-6-1
在线时间
37 小时
发表于 2016-11-27 14:53:26 | 显示全部楼层 |阅读模式
10金钱
各位好,我在原子哥的串口例程上仅将发送的模式由查询改为了中断的形式,希望同时实现发送中断与接收中断的效果,在战舰板反复实验都失败,下载后无任何反应了,所以在这里请教一下大家,请各位指导! 谢谢
u8  usart_send=0;  // 新增加了一个全局变量作为发送完成判断用途 (该变量用来模以UOCS中的信号量)

改动 1:  USART_ITConfig(USART1, USART_IT_RXNE |  USART_IT_TC, ENABLE);   //同时开启了发送中断与接收中断


改动 2:    if(USART_GetITStatus(USART1, USART_IT_TC))   //在原来的串口接收中断程序中新增加了这段发送中断程序
                {
                        USART_ReceiveData(USART1);       
                        usart_send=0xff;
                }       

            

改动 3:               //在以下这段程序中, 仅将  while(USART_GetFlagStatus(USART1, USART_FLAG_TC)==0);   改成了 while( !usart_send );  usart_send=0;
        while(1)
        {
                if(USART_RX_STA&0x8000)
                {                                          
                        len=USART_RX_STA&0x3fff;
                        printf("\r\n您发送的消息为:\r\n");
                        for(t=0;t<len;t++)
                        {
                                USART_SendData(USART1,USART_RX_BUF[t]);
                                while( !usart_send );
                                usart_send=0;
                        //       while(USART_GetFlagStatus(USART1, USART_FLAG_TC)==0);    //等待发送完成
                        }
                        printf("\r\n\r\n");//2&#229;è&#235;&#187;&#187;DD
                        USART_RX_STA=0;               
                }else
                {
                        times++;
                        if(times%5000==0)
                        {
                                printf("\r\nALIENTEK MiniSTM32&#191;a·¢°&#229; ′&#174;&#191;úêμ&#209;é\r\n");
                                printf("&#213;yμ&#227;&#212;-×ó@ALIENTEK\r\n\r\n\r\n");
                        }
                        if(times%200==0)printf("&#199;&#235;ê&#228;è&#235;êy&#190;Y,ò&#212;&#187;&#216;3μ&#188;ü&#189;áê&#248;\r\n");  
                        if(times%30==0)LED0=!LED0;//éá&#203;&#184;LED,ìáê&#190;&#207;μí3&#213;y&#212;ú&#212;&#203;DD.
                        delay_ms(10);   
                }
        }         

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

使用道具 举报

30

主题

1170

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1993
金钱
1993
注册时间
2016-2-16
在线时间
527 小时
发表于 2016-11-27 15:49:05 | 显示全部楼层
   if(USART_GetITStatus(USART1, USART_IT_TC))   //在原来的串口接收中断程序中新增加了这段发送中断程序
                {
                         USART_ReceiveData(USART1);        
                         usart_send=0xff;
                 }  
你的程序估计死在这里。硬件调试下。感觉你跳不出这个中断
回复

使用道具 举报

53

主题

126

帖子

0

精华

初级会员

Rank: 2

积分
95
金钱
95
注册时间
2013-6-1
在线时间
37 小时
 楼主| 发表于 2016-11-27 16:04:12 | 显示全部楼层
为什么呢? 我刚才加了USART_ClearFlag(USART1,USART_IT_TC);  USART_ClearFlag(USART1,USART_IT_TXE); 这两条程序后 结果还是一样的,无任何反应
回复

使用道具 举报

53

主题

126

帖子

0

精华

初级会员

Rank: 2

积分
95
金钱
95
注册时间
2013-6-1
在线时间
37 小时
 楼主| 发表于 2016-11-27 16:21:32 | 显示全部楼层
只要没有开启串口发送中断就是正常的
回复

使用道具 举报

8

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
130
金钱
130
注册时间
2017-10-13
在线时间
19 小时
发表于 2018-4-25 15:35:31 | 显示全部楼层
时隔2年,我也死在这里了,串口发送为什么总是失败啊
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-9 05:36

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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