搜索
bottom↓
回复: 19

STM32串口中断这样的问题是怎么回事呢?

[复制链接]

出0入0汤圆

发表于 2012-2-23 15:53:16 | 显示全部楼层 |阅读模式
void USART1_IRQHandler(void)
{
   if(USART_GetITStatus(USART1, USART_IT_RXNE)!= RESET)
    {
    /* Clear the USART1 Receive interrupt */
        USART_ClearITPendingBit(USART1, USART_IT_RXNE);
        USART_SendData(USART1, 0x88);
        while (!(USART1->SR & USART_FLAG_TXE));   
    }
}
大家看一下为偶写的这一中断程序有何不妥,先不要喷我在中断里发送数据,耽误时间,我只是想做实验。
我收到一次中断就会往串口发送一字节数据0x88,表示我收到了中断,按理说应该够快了,115200的波特率,发送一个字节也就是0.1mS的时间,
但是我用串口助手每1000ms给单片机发送一个字节,然后发回给电脑,但是这样慢的速度确发现总是丢包,我每发送100个,大约收到的就80几个,不知
为什么,求助?

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

 楼主| 发表于 2012-2-23 16:14:30 | 显示全部楼层
fuck this up!

出0入0汤圆

 楼主| 发表于 2012-2-23 16:47:57 | 显示全部楼层
can anyone focus on it?

出0入0汤圆

发表于 2012-2-23 16:56:28 | 显示全部楼层
调用USART_ReceiveData(USART1)看看

出0入0汤圆

发表于 2012-2-23 17:10:11 | 显示全部楼层
while (!(USART1->SR & USART_FLAG_TXE));     
尽管这一句其实不会循环等待,但这样的习惯其实不算好-----在ISR里用死循环等待.

如果每1000MS只发一个字节,应该不会丢....不过如果每次发送超过1字节,就不好说.

出0入0汤圆

 楼主| 发表于 2012-2-23 17:12:26 | 显示全部楼层
刚才看了一下,STM32的数据都收齐了,无奈的是发送回去的很多发送不成功,不知道为什么?

出0入0汤圆

 楼主| 发表于 2012-2-23 17:17:43 | 显示全部楼层
现在发现如果只是往电脑发送数据的话也没有问题,问题就是出在在中断里如何发送数据,这样就会出问题,按理说,每1000ms产生一次中断,很慢了,这时候在中断里边可以随便干什么事情啊,为何呢,求解?

出0入0汤圆

发表于 2012-2-23 17:19:14 | 显示全部楼层
TXE VS TC

出0入0汤圆

 楼主| 发表于 2012-2-23 17:31:32 | 显示全部楼层
- USART_FLAG_LBD:  LIN Break detection flag
*                       - USART_FLAG_TXE:  Transmit data register empty flag
*                       - USART_FLAG_TC:   Transmission Complete flag
*                       - USART_FLAG_RXNE: Receive data register not empty flag
*                       - USART_FLAG_IDLE: Idle Line detection flag
*                       - USART_FLAG_ORE:  OverRun Error flag
*                       - USART_FLAG_NE:   Noise Error flag
*                       - USART_FLAG_FE:   Framing Error flag
*                       - USART_FLAG_PE:   Parity Error flag
看了TEX是发送寄存器空标志位,TC是发送完成标志,应该查询这两个都是一样的,而且我两个也都试了,都还这样,恕我拙略,我认为一样吧!

出0入0汤圆

发表于 2012-2-23 17:43:48 | 显示全部楼层
确认TXE后方可写入,不然就覆盖了。
等待TC置位后才表示数据真正发送完成。

算一个数据的FIFO的吧。

出0入0汤圆

 楼主| 发表于 2012-2-23 22:16:43 | 显示全部楼层
回复【9楼】aozima
-----------------------------------------------------------------------

判断两个标志位的都试过了,还是不行,现在怀疑线的问题了,因为是115200的bps,而且线是手工焊接的,因为没找到合适的线,换成9600的波特率明显就好多了,不知道有没有童靴遇到过因为线的问题而产生如此问题的.

出0入0汤圆

 楼主| 发表于 2012-2-23 22:23:11 | 显示全部楼层
又一想不对啊,那为啥接受的都收到了呢,而发出的会出问题呢,应该不是波特率太高受干扰这个原因,不然的话接受也会出现问题的,况且就是干扰了,也不会收不到啊,顶多是错误的数据罢了,那肯定还是程序里发送的时候被中断了,导致这个字节没法出去了。想来想去还是没想到是为什么了》再继续研究一下。

出0入0汤圆

发表于 2012-2-24 12:56:29 | 显示全部楼层
fuck fuck

出0入0汤圆

发表于 2012-2-24 13:06:48 | 显示全部楼层
回复【11楼】june2008  
-----------------------------------------------------------------------
你确认你完全按我说的做了?

出0入0汤圆

 楼主| 发表于 2012-2-27 14:20:52 | 显示全部楼层
回复【13楼】aozima
-----------------------------------------------------------------------

不好意思,这两天出差了,刚回来。
你的这两个我都试了,分别判断TC和TXE标志位,都还是不行,
我1s才发生一次中断,每次中断发送一次数据,115200啊,这样的速度,还会发生
数据没发完,那我只能说它的usart是个鸡肋了,现在还是不知道什么原因。包括试了在
中断里置位标志位,然后main的死循环了判断这个标志位发数据,也会出现错误,这么慢的速度啊
,不解!

出0入0汤圆

发表于 2012-2-27 14:56:49 | 显示全部楼层
回复【9楼】aozima  
确认TXE方可写入,不然就覆盖了。
等待TC置位后才表示数据真正发送完成。
算一个数据的FIFO的吧。
-----------------------------------------------------------------------
STM32的USART是很烂,只有一个字的FIFO,甚至算不上FIFO。
且没有FIFO超时中断,很多应用用起来很费力。

但如果你那样的应用都丢数据,那STM32也别卖了。
除非你的RS232电平转换太烂,数据在线上就丢了,STM32根本就没收到。

出0入0汤圆

 楼主| 发表于 2012-2-27 15:12:31 | 显示全部楼层
我等换根线试试,115200的波特率我自己焊了两个线,可能不大行啊,9600的波特率下收发数据酒很正常,只能确认是这个原因了,我再查查试试了‘1

出0入0汤圆

 楼主| 发表于 2012-2-27 16:33:21 | 显示全部楼层
现在发现数据已经发出了,TC和TXE标志位都已经置位了,但是电脑串口终端接收端却没有收到数据,咋回事啊,我记得那个串口软件的接受缓冲区有4096个的,咋不行呢,还是压根在线上数据没了?还是无解啊!

出0入0汤圆

 楼主| 发表于 2012-2-27 16:42:49 | 显示全部楼层
刚才突然有很好,115200bps下一个数据都不丢,真搞不懂了!

出0入0汤圆

发表于 2013-10-23 16:04:14 | 显示全部楼层
一个线的问题,干扰大
还有一个就是端口输出速率问题
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-1 04:51

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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