打印
[STM32F1]

串口发送总是多发送一个字节00

[复制链接]
2040|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
黑洞不黑|  楼主 | 2019-11-21 21:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用中断进行串口发送,每次发完数组里面的数据后串口调试助手会多收到一个00字节,下面是中断发送的程序
void USART2_IRQHandler(void)
{
        if(USART2->SR&(1<<6))//数据发送完成
        {
                if(TXD2_cnt<8)
                {
                        USART2->DR=TXD2_buf[TXD2_cnt];
                        TXD2_cnt++;
                }
                else
                {
                        TXD2_cnt=0;
                        UART2_close();
                }
        }
}
下面是串口调试助手收到的数据
AA 02 02 00 27 21 00 06 00
AA 02 03 00 0B 01 00 0D 00
AA 02 04 00 09 01 00 02 00
AA 02 05 00 07 01 00 13 00
AA 02 06 00 11 01 00 18 00
AA 02 07 00 10 01 00 18 00
发送的数组里面有8个字节,最后收到的总是多个00

使用特权

评论回复
沙发
yklstudent| | 2019-11-22 07:06 | 只看该作者
不要等到第九个才关发送中断,第八个发送后就该关了

使用特权

评论回复
板凳
黑洞不黑|  楼主 | 2019-11-28 10:12 | 只看该作者
yklstudent 发表于 2019-11-22 07:06
不要等到第九个才关发送中断,第八个发送后就该关了

试过了  第8个关中断就会少发一个字节,但是00还是存在

使用特权

评论回复
地板
黑洞不黑|  楼主 | 2019-11-29 19:50 | 只看该作者
感谢各位,找到问题原因了。串口数据发送完成后关闭了串口,导致单片机引脚变成了不稳定状态,示波器查看引脚电平为接近0的杂乱波形,接收方认为是下一个字节的起始位,因此会多收到一个0x00的字节。现在改为发送数据完成后仅关闭发送中断,保持发送使能,这样就能保证引脚在串口空闲状态时是高电平了。

使用特权

评论回复
5
lmywlj| | 2019-11-30 10:20 | 只看该作者
黑洞不黑 发表于 2019-11-29 19:50
感谢各位,找到问题原因了。串口数据发送完成后关闭了串口,导致单片机引脚变成了不稳定状态,示波器查看引 ...

正解,多谢

使用特权

评论回复
6
wakayi| | 2019-12-11 10:37 | 只看该作者
恭喜楼主解决问题

使用特权

评论回复
7
renzheshengui| | 2019-12-11 10:39 | 只看该作者
以后我也需要注意这个问题

使用特权

评论回复
8
paotangsan| | 2019-12-11 10:41 | 只看该作者
非常感谢楼主分享经验

使用特权

评论回复
9
labasi| | 2019-12-11 10:42 | 只看该作者
喜欢楼主这样结贴的

使用特权

评论回复
10
keaibukelian| | 2019-12-11 10:43 | 只看该作者
非常感谢楼主分享

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

14

主题

110

帖子

2

粉丝