你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

关于STM32串口问题

[复制链接]
zhouke58 提问时间:2011-4-6 16:26 /
我在写第一个USAT程序时,发现一个问题:在连续发送和接收两个字节数据以上时老是最后一个字节没发出去或者最后一个字节没收到,其他收到都正确,就比如说发01 02 03,那最后的03就没进中断.但是我发送时在while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);之前加USART_GetFlagStatus(USART2, USART_FLAG_TXE);的话就可以正确发送,接收时在中断里面的  if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET前面加USART_GetITStatus(USART2, USART_IT_RXNE);  就可以正确接收,很不解. 
收藏 评论6 发布时间:2011-4-6 16:26

举报

6个回答
fxw451 回答时间:2011-4-6 16:42:05

RE:关于STM32串口问题

数据丢失,多个加个符合,
废鱼 回答时间:2011-4-6 17:34:22

RE:关于STM32串口问题

if(USART_GetITStatus(USART2,USART_IT_RXNE)==SET)
{
     if(LenRx < DataLen)
    {
        DataRX[LenRx++;]= USART_ReceiveData(USART2);   
    }
    else  LenRx = 0;
    if(USART_GetITStatus(USART2,USART_IT_TXE)==SET)
   {
      if(TxCount
zhouke58 回答时间:2011-4-6 18:07:49

RE:关于STM32串口问题

安老师,我看下你程序,是明白什么意思,我是用中断接收,发送是查寻发送。我写的唯一和你不一样的就是我没加溢出处理程序,但是我在测试时就发了一次而已,发一个字节根本收不到,发两个就收到前面那个,是这样的问题
废鱼 回答时间:2011-4-6 21:31:01

RE:关于STM32串口问题

你用下列代码就可以实现,不需要太多的代码。判断标志位只需要判断中断标志位就可以了。
if(USART_GetITStatus(USART2,USART_IT_RXNE)==SET)
{
if(LenRx < DataLen)
{
DataRX[LenRx++;]= USART_ReceiveData(USART2);
}
else LenRx = 0;
}
fxw451 回答时间:2011-4-6 21:51:05

回复:关于STM32串口问题

回复第 5 楼 安 于2011-04-06 13:31:01发表:
你用下列代码就可以实现,不需要太多的代码。判断标志位只需要判断中断标志位就可以了。
if(USART_GetITStatus(USART2,USART_IT_RXNE)==SET)
{
if(LenRx < DataLen)
{
DataRX[LenRx++;]= USART_ReceiveData(USART2);
}
else LenRx = 0;


高手啊!以后有问题还多多请教!
dbayj2 回答时间:2011-4-13 11:52:54

RE:关于STM32串口问题

也是类似问题,晚上回去试下安老师的代码,非常感谢

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版