野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 9079|回复: 4

求助USART串口通信中的USART_SendData函数的问题

[复制链接]
发表于 2017-8-14 11:18:44 | 显示全部楼层 |阅读模式
在霸道的视频教程里面有一个地方用了USART1的中断:
//串口中断服务函数
void DEBUG_USART_IRQHandler(void)
{
     uint8_t ucTemp;
     if(USART_GetITStatus(DEBUG_USARTx,USART_IT_RXNE) != RESET)
     {
        ucTemp = USART_ReceiveData(DEBUG_USARTx);
        USART_SendData(DEBUG_USARTx,ucTemp);
     }
}

在这里调用了USART_SendData函数发送回所有接受到的数据


而USART_SendData函数的声明是这样的:USART_SendData(USART_TypeDef* USARTx, uint16_t Data)


形参是16bit的数据(此处不知道说的对不对)


但是视频教程里面发送到单片机123456789,已经超出16位,但是在试验的时候仍然全部发送回电脑


后来我又在main函数里面直接调用:USART_SendData(DEBUG_USARTx,0x6789);


但是这时候串口调试助手里面只显示了89,也就是只发送了后面8个字节。


请问这是不是因为USART_SendData函数没有延时,导致缓冲区溢出呢?
但是如果是这样为什么之前能直接发送回123456789呢?


刚学不久,求助各位前辈,万分感谢!
回复

使用道具 举报

发表于 2017-8-14 11:40:07 | 显示全部楼层
视频里面演示的是产生了多次中断,进行了多次发送了。
回复 支持 反对

使用道具 举报

发表于 2017-8-14 11:49:08 | 显示全部楼层
那个程序其实只推荐接收一个字节的内容,接多了会有问题,因为它直接在中断发送数据,有可能会接收漏

可以用这个程序,增加了缓冲队列,适合接收长数据: USART1环形队列.zip (319.05 KB, 下载次数: 68)

主要区别是中断服务函数和串口初始化使能了 空闲中断
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-14 15:36:00 | 显示全部楼层
fire 发表于 2017-8-14 11:40
视频里面演示的是产生了多次中断,进行了多次发送了。

请问意思是发完一个字节就中断一次,然后发送下一个字节到单片机嘛
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-14 15:36:29 | 显示全部楼层
flyleaf 发表于 2017-8-14 11:49
那个程序其实只推荐接收一个字节的内容,接多了会有问题,因为它直接在中断发送数据,有可能会接收漏

可 ...

多谢啦^_^拿着程序看一下 嘿嘿嘿
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-9-22 23:29 , Processed in 0.056120 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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