OpenEdv-开源电子网

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

串口通信可以同时开启发送中断和接收中断吗,为什么我只要同时开启发送和接收中断就不能运行?

[复制链接]

15

主题

43

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
316
金钱
316
注册时间
2016-4-22
在线时间
39 小时
发表于 2016-5-18 11:06:02 | 显示全部楼层 |阅读模式
1金钱
看原子写的串口实验,只开启了接收中断,我想写一个有接收中断和发送中断的串口通信协议,有会的大神指导我一下,万分感谢!!!
另外,printf函数的输出与串口的发送之间有什么联系?
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

6

主题

1097

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3571
金钱
3571
注册时间
2014-12-2
在线时间
365 小时
发表于 2016-5-18 11:06:03 | 显示全部楼层
回复

使用道具 举报

15

主题

43

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
316
金钱
316
注册时间
2016-4-22
在线时间
39 小时
 楼主| 发表于 2016-5-18 11:08:03 | 显示全部楼层
不想再看到看视频,看手册这种回复了,没有什么意义,就是看了不懂才来提问的,
回复

使用道具 举报

4

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
149
金钱
149
注册时间
2013-10-11
在线时间
28 小时
发表于 2016-5-18 12:20:37 | 显示全部楼层
弱弱的问一句,有发送中断吗?
回复

使用道具 举报

15

主题

43

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
316
金钱
316
注册时间
2016-4-22
在线时间
39 小时
 楼主| 发表于 2016-5-19 16:47:48 | 显示全部楼层

,你会写串口的发送程序么,用中断方式实现
回复

使用道具 举报

15

主题

43

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
316
金钱
316
注册时间
2016-4-22
在线时间
39 小时
 楼主| 发表于 2016-5-19 16:48:06 | 显示全部楼层
根号九LOVE 发表于 2016-5-18 12:20
弱弱的问一句,有发送中断吗?

当然有了
回复

使用道具 举报

15

主题

43

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
316
金钱
316
注册时间
2016-4-22
在线时间
39 小时
 楼主| 发表于 2016-5-19 16:49:19 | 显示全部楼层
yklstudent 发表于 2016-5-18 12:59
你先搞定中断接收,再搞定中断发送,结合起来就差不多了
自定义协议,就别用什么printf了

我已经搞定接收中断了,但是发送我不会用中断方式实现,你会么,请教一下
回复

使用道具 举报

29

主题

492

帖子

0

精华

高级会员

Rank: 4

积分
810
金钱
810
注册时间
2016-4-7
在线时间
123 小时
发表于 2016-5-20 10:02:20 | 显示全部楼层
printf函数就是
//////////////////////////////////////////////////////////////////
//¼óèëòÔÏÂ′úÂë,Ö§3Öprintfoˉêy,¶ø2»DèòaÑ¡Ôñuse MicroLIB          
#if 1
#pragma import(__use_no_semihosting)            
//±ê×¼¿aDèòaμÄÖ§3Öoˉêy                 
struct __FILE
{
        int handle;

};

FILE __stdout;      
//¶¨òå_sys_exit()òÔ±üÃaê1óðëÖ÷»úģ꽠  
_sys_exit(int x)
{
        x = x;
}
//ÖØ¶¨òåfputcoˉêy
int fputc(int ch, FILE *f)
{      
        while((USART1->SR&0X40)==0);//Ñ-»··¢Ëí,Ö±μ½·¢Ëííê±Ï   
    USART1->DR = (u8) ch;      
        return ch;
}
#endif
看uart.c文件最上面的部分
回复

使用道具 举报

29

主题

492

帖子

0

精华

高级会员

Rank: 4

积分
810
金钱
810
注册时间
2016-4-7
在线时间
123 小时
发表于 2016-5-20 10:03:43 | 显示全部楼层
至于发送你可以用                        
                for(t=0;t<len;t++)
                        {
                                USART_SendData(USART1, USART_RX_BUF[t]);
                                while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);
                        }
回复

使用道具 举报

29

主题

492

帖子

0

精华

高级会员

Rank: 4

积分
810
金钱
810
注册时间
2016-4-7
在线时间
123 小时
发表于 2016-5-20 10:04:54 | 显示全部楼层
自己写那要花大把的时间,不过对你的能力提高是很有帮助的,去写吧,写好给我们大家参考一下
回复

使用道具 举报

15

主题

43

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
316
金钱
316
注册时间
2016-4-22
在线时间
39 小时
 楼主| 发表于 2016-5-20 10:43:40 | 显示全部楼层
xujian468 发表于 2016-5-20 10:03
至于发送你可以用                        
                for(t=0;t

这是查询方式的,效率太低了,很难用。不想用这种方式
回复

使用道具 举报

30

主题

1170

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1993
金钱
1993
注册时间
2016-2-16
在线时间
527 小时
发表于 2016-5-20 10:58:11 | 显示全部楼层
有,我用的队列,弄一个专门发送的队列,把要发送的数据放进去队列里面,开启TC中断,然后在TC中断里面查询队列是否还有数据,没就自己把自己关了
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-8 03:33

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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