OpenEdv-开源电子网

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

STM32串口通讯协议,接受中断如何写,可以把数据包里的数组逐个读出,有相关例程吗?

[复制链接]

11

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
101
金钱
101
注册时间
2022-8-19
在线时间
17 小时
发表于 2023-7-13 15:14:32 | 显示全部楼层 |阅读模式
STM32串口通讯协议,接受中断如何写,可以把数据包里的数组逐个读出,有相关例程吗?
我写的程序,我通过串口调试助手定时发送,读不到相应的数组里,我也不知道该如何调试,从哪里调试
还如何进行相应串口中断函数的调试
int USART2_IRQHandler(void)                        //串口2中断服务程序
{
        u8 Res;//串口接收数据
        static uint8_t checkSum = 0;//校验位

#if SYSTEM_SUPPORT_OS                 //如果SYSTEM_SUPPORT_OS为真,则需要支持OS.
        OSIntEnter();   
#endif
        if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)  ////由接受寄存器状态标志位触发0接收中断(接收到的数据必须是0x0d 0x0a结尾)
                {
                                Res =USART_ReceiveData(USART2);        //读取接收到的数据
                          

                                if(count==0)//如果是接收的第一个数据
                           {
                  if(Res ==0xFF)
                                                {
                                                  table_data[count] = USART_RX_BUF[count];
                                                        checkSum += table_data[count];
                                                        count++;
                                                        return 1;
                                                }
                              else
                                                {
                                                        return 0;
                                                }
                                }
                                else if(count == 1)
                                {
                                        table_data[count] = USART_RX_BUF[count];
                                        rx_length = table_data[count] ;
                                        checkSum += table_data[count];
                                        count++;
                                        return 1;
                                }
                                else if((count>1)&&(count<rx_length+2))
                                {
                                  table_data[count] = USART_RX_BUF[count];
                                  checkSum += table_data[count];
                                        count++;
                                        return 1;
                                }
                                else if(count == rx_length+2 )
                                {
                                        table_data[count] = USART_RX_BUF[count];
                                        USART_RX_STA |=0x8000;
                                  if(checkSum == table_data[count])
                                        //先调用一次再删
                                       
                                       
                                        return 0;
                                        else
                                        {
                                        //table_data
                                  memset(table_data, 0x00, count);
                                        count = 0;
                                        USART_RX_STA = 0;
                                               
                                        return 2;//数据错误
                                        }
                                       
                                }
                               
                               
                 
     }
#if SYSTEM_SUPPORT_OS         //如果SYSTEM_SUPPORT_OS为真,则需要支持OS.
        OSIntExit();                                                                                           
#endif
}

能帮我看看我这个串口中断函数能用吗?

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

28

主题

360

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1027
金钱
1027
注册时间
2021-2-4
在线时间
146 小时
发表于 2023-7-13 15:18:32 | 显示全部楼层
不想看,我直接说我的
我是用空闲中断
接收完了Flag_UART = 1
然后CRC校验完成了 Flag_CRC = 1

然后再处理
回复 支持 反对

使用道具 举报

10

主题

116

帖子

0

精华

高级会员

Rank: 4

积分
842
金钱
842
注册时间
2021-12-23
在线时间
202 小时
发表于 2023-7-14 10:53:56 来自手机 | 显示全部楼层
о仰STM32
回复 支持 反对

使用道具 举报

233

主题

957

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1790
金钱
1790
注册时间
2011-10-9
在线时间
222 小时
发表于 2023-7-19 15:16:42 | 显示全部楼层
别在中断干太多的事情 否则丢数据。   中断收到1字节就往内存丢1字节   收完了 再置标记在主循环处理
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-24 04:46

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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