[STM32F1]

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

[复制链接]
609|9
手机看帖
扫描二维码
随时随地手机跟帖
huangchui|  楼主 | 2021-11-21 13:56 | 显示全部楼层 |阅读模式
用中断进行串口发送,每次发完数组里面的数据后串口调试助手会多收到一个00字节

使用特权

评论回复
dingy| | 2021-11-21 14:02 | 显示全部楼层
中断发送的程序看下,

使用特权

评论回复
renyaq| | 2021-11-21 14:04 | 显示全部楼层
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

使用特权

评论回复
jiaxw| | 2021-11-21 14:06 | 显示全部楼层
不要等到第九个才关发送中断,第八个发送后就该关了

使用特权

评论回复
zhaoxqi| | 2021-11-21 14:09 | 显示全部楼层
楼上说的对

使用特权

评论回复
huangchui|  楼主 | 2021-11-21 14:11 | 显示全部楼层
试过了  第8个关中断就会少发一个字节,但是00还是存在

使用特权

评论回复
huangchui|  楼主 | 2021-11-21 14:14 | 显示全部楼层
找到问题原因了。串口数据发送完成后关闭了串口,导致单片机引脚变成了不稳定状态,示波器查看引脚电平为接近0的杂乱波形,接收方认为是下一个字节的起始位,因此会多收到一个0x00的字节。

使用特权

评论回复
huangchui|  楼主 | 2021-11-21 14:18 | 显示全部楼层
现在改为发送数据完成后仅关闭发送中断,保持发送使能,这样就能保证引脚在串口空闲状态时是高电平了。

使用特权

评论回复
jiajs| | 2021-11-21 14:21 | 显示全部楼层
正解,多谢

使用特权

评论回复
huangchui|  楼主 | 2021-11-21 14:25 | 显示全部楼层
哈哈,那我就知道怎么回事了,多谢大家

使用特权

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

本版积分规则

918

主题

12323

帖子

4

粉丝