OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2135|回复: 8

求助,stm32的串口3只能接收到第一个数据

[复制链接]

12

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2018-10-12
在线时间
28 小时
发表于 2019-11-10 11:39:58 | 显示全部楼层 |阅读模式
10金钱
后面的全都丢失
串口1和串口2也用的这个中断程序,就没有丢失的问题

void USART3_IRQHandler(void)
{
    if(USART_GetFlagStatus(USART3,USART_IT_RXNE)==SET)
    {               
       UART3_ReciveDate[First3_Int++] = USART_ReceiveData(USART3);
                        if(First3_Int > 200)                       //èç1û»o′æÂú,½«»o′æÖ¸ÕëÖ¸Ïò»o′æμÄê×μØÖ·
                        {
                          First3_Int = 0;
                        }   
        /*USART_SendData(USART1,i);
        while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET)
        {
        } */               
    }

    if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET)
    {
        /* Clear the USART1 Receive interrupt */
        USART_ClearITPendingBit(USART3, USART_IT_RXNE);
    }
}


最佳答案

查看完整内容[请看2#楼]

只是这一段代码什么也看不出来的 确认配置没有问题,大方向上时序、逻辑也没有问题 然后debug 你可以找到原因的
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

7

主题

175

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1327
金钱
1327
注册时间
2019-7-11
在线时间
165 小时
发表于 2019-11-10 11:39:59 | 显示全部楼层
只是这一段代码什么也看不出来的
确认配置没有问题,大方向上时序、逻辑也没有问题
然后debug
你可以找到原因的
世界和平
回复

使用道具 举报

12

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2018-10-12
在线时间
28 小时
 楼主| 发表于 2019-11-10 11:41:28 | 显示全部楼层
找了一上午也没找出原因来,用串口2试过都正常
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2019-11-10 21:27:48 | 显示全部楼层
仿真找一下问题
回复

使用道具 举报

0

主题

54

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
272
金钱
272
注册时间
2019-3-6
在线时间
36 小时
发表于 2019-11-11 12:38:00 | 显示全部楼层
while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET)

明明用串口3,又在这里检测串口1是什么鬼??

你同时开两个串口吗?如果串口1这个时候始终TC处于RESET,你不就卡在这个循环了?
回复

使用道具 举报

12

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2018-10-12
在线时间
28 小时
 楼主| 发表于 2019-11-12 09:37:42 | 显示全部楼层
QuiGonJinn 发表于 2019-11-11 12:38
while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET)

明明用串口3,又在这里检测串口1是什么鬼 ...

老哥,我是复制的程序,这一句是注释掉的
回复

使用道具 举报

0

主题

18

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2019-11-8
在线时间
9 小时
发表于 2019-11-12 10:42:17 | 显示全部楼层
本帖最后由 king256 于 2019-11-12 10:43 编辑

    if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET)
    {
        /* Clear the USART1 Receive interrupt */
        USART_ClearITPendingBit(USART3, USART_IT_RXNE);
    }
逻辑不对,把这部分去掉就对了。
除第一次外,没法接收。


回复

使用道具 举报

0

主题

54

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
272
金钱
272
注册时间
2019-3-6
在线时间
36 小时
发表于 2019-11-12 15:29:57 | 显示全部楼层
洛阳花开 发表于 2019-11-12 09:37
老哥,我是复制的程序,这一句是注释掉的

自己开了什么中断知道吗?

printf( "USART3->SR = %d\n", USART3->SR );


你先看一下到底是哪个中断没清
回复

使用道具 举报

12

主题

143

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2660
金钱
2660
注册时间
2017-9-8
在线时间
465 小时
发表于 2019-11-12 15:56:52 | 显示全部楼层
应该是中断标志位没清,查一查跟串口1、串口2的区别
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-26 05:39

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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