OpenEdv-开源电子网

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

单片机收不到串口发送数据,求大佬指点

[复制链接]

3

主题

10

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2020-7-14
在线时间
15 小时
发表于 2022-3-7 18:01:55 | 显示全部楼层 |阅读模式
5金钱
u8 receive_flag=0;
void USART1_IRQHandler(void)
{
        u8 Data;
        BaseType_t xHigherPriorityTaskWoken;
        if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  //
        {
                Data=USART_ReceiveData(USART1);        ////(USART1->DR);        //
                if(USART_RX_STA<=1)   //&#197;D&#182;&#207;&#214;&#161;í·
                {
                        if(Data==0x53)   //判断帧头
                        {
                                USART_RX_BUF[USART_RX_STA]=Data;
                                USART_RX_STA++;
                        }
                        else
                        {
                                memset(USART_RX_BUF,0,USART_REC_LEN);//清空缓存
                                USART_RX_STA=0;
                        }
                }       
                if(1<USART_RX_STA<USART_REC_LEN)
                {
                        if(Data==0x45)
                        {
                                USART_RX_BUF[USART_RX_STA]=Data;
                                receive_flag=1;
                                USART_RX_STA=0;
                        }
                        else
                        {
                                USART_RX_BUF[USART_RX_STA]=Data;
                                USART_RX_STA++;
                        }
                }
                if(USART_RX_STA>USART_REC_LEN)
                {
                        memset(USART_RX_BUF,0,USART_REC_LEN);//清空缓存
                        USART_RX_STA=0;
                }
        }
}

最佳答案

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

1.检查硬件:示波器测量RXD脚在串口助手给它发数据时是否有波形。 2.检查是否进中断:中断服务程序里让某个IO取反,示波器监测。 3.检查波特率是否正确:主动往外发送数据(如0xAA),示波器看TXD脚波形,判断波特率。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

12

主题

3344

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8463
金钱
8463
注册时间
2020-5-11
在线时间
3904 小时
发表于 2022-3-7 18:01:56 | 显示全部楼层
1.检查硬件:示波器测量RXD脚在串口助手给它发数据时是否有波形。
2.检查是否进中断:中断服务程序里让某个IO取反,示波器监测。
3.检查波特率是否正确:主动往外发送数据(如0xAA),示波器看TXD脚波形,判断波特率。
专治疑难杂症
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
10
金钱
10
注册时间
2022-3-9
在线时间
2 小时
发表于 2022-3-9 09:47:14 | 显示全部楼层
兄弟,如果你是做开发,不是做维护的话,你得考虑硬件有问题,也会导致芯片收不到数据的,最有效的办法就是上面大佬提到的,用示波器测量你芯片是否收到了数据,如果有收到,那么你还得通过波形分析数据是否有干扰之类的导致你接收的数据不对,没办法在你的函数处理。后面这个步骤你也可以通过仿真观测你串口收到的缓存,是不是有效的。硬件如果有问题,也会有千奇百怪的现象的。这个是我这几天的血泪教训。你查查看。
回复

使用道具 举报

3

主题

10

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2020-7-14
在线时间
15 小时
 楼主| 发表于 2022-3-10 09:26:33 | 显示全部楼层
xiaochouagan 发表于 2022-3-9 09:47
兄弟,如果你是做开发,不是做维护的话,你得考虑硬件有问题,也会导致芯片收不到数据的,最有效的办法就是 ...

谢谢,问题暂时找到了
回复

使用道具 举报

3

主题

10

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2020-7-14
在线时间
15 小时
 楼主| 发表于 2022-3-10 09:26:58 | 显示全部楼层
LcwSwust 发表于 2022-3-7 18:01
1.检查硬件:示波器测量RXD脚在串口助手给它发数据时是否有波形。
2.检查是否进中断:中断服务程序里让某 ...

谢谢,查到问题了,串口能收到,但是进队列后,出队列就读不到了,例程里是在定时器里从队列读出来,我是写了一个任务一直读取,暂时搞不出来了
回复

使用道具 举报

12

主题

3344

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8463
金钱
8463
注册时间
2020-5-11
在线时间
3904 小时
发表于 2022-3-10 09:29:57 | 显示全部楼层
菜鸟果果 发表于 2022-3-10 09:26
谢谢,查到问题了,串口能收到,但是进队列后,出队列就读不到了,例程里是在定时器里从队列读出来,我是 ...

哦       
专治疑难杂症
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-26 00:34

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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