OpenEdv-开源电子网

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

关于串口接收字符串新手求教

[复制链接]

3

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
54
金钱
54
注册时间
2019-6-10
在线时间
17 小时
发表于 2019-7-17 10:34:45 | 显示全部楼层 |阅读模式
5金钱
本帖最后由 Lixdong 于 2019-7-17 14:27 编辑

新手求教,调试结果如图 企业微信截图_15633301829249.png

接受第二个也是存到a

接受第二个也是存到a

串口发送2435,串口只能接受到24程序就运行不下去了,还都是存到a,变量RS232_RX_CNT的值也不增加,请问程序有什么BUG吗?
下面是串口中断程序
u8 RS232_RX_BUF[200];          //接收缓冲,最大200个字节.
u8 RS232_RX_CNT=0;                        //接收到的数据长度
void USART2_IRQHandler(void)                        //串口2中断服务程序
{
        
        u8 Res;

        u8 a,b,c,d;
        if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)  //接收到数据
        {
               

                Res =USART_ReceiveData(USART2);//(USART2->DR);        //读取接收到的数据
                if(RS232_RX_CNT<64)
                {
                        RS232_RX_BUF[RS232_RX_CNT]=Res;                //记录接收到的值
                        RS232_RX_CNT++;                                                //接收数据增加1
                }
                a=RS232_RX_BUF[0];
                b=RS232_RX_BUF[1];
                c=RS232_RX_BUF[2];
                d=RS232_RX_BUF[3];
                }
                RS232_RX_CNT=0;        

}
请问这个中断服务程序是正确的吗?若是不正确请帮忙修正一下,多谢!


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

使用道具 举报

2

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
188
金钱
188
注册时间
2019-7-17
在线时间
48 小时
发表于 2019-7-17 15:23:58 | 显示全部楼层
你的意思是想 ,发送 2435  ,然后中断中 abcd 分 别存

a  2
b  3
c   4
d  5

回复

使用道具 举报

3

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
54
金钱
54
注册时间
2019-6-10
在线时间
17 小时
 楼主| 发表于 2019-7-17 18:47:04 | 显示全部楼层
JerryYung 发表于 2019-7-17 15:23
你的意思是想 ,发送 2435  ,然后中断中 abcd 分 别存

a  2

是的,但是只存了2个,还都是存到a里面了
回复

使用道具 举报

3

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
54
金钱
54
注册时间
2019-6-10
在线时间
17 小时
 楼主| 发表于 2019-7-17 18:49:39 | 显示全部楼层
JerryYung 发表于 2019-7-17 15:23
你的意思是想 ,发送 2435  ,然后中断中 abcd 分 别存

a  2

想通过串口助手发送存一个字符串,然后摘取里面的字符作为控制指令用
回复

使用道具 举报

2

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
188
金钱
188
注册时间
2019-7-17
在线时间
48 小时
发表于 2019-7-18 09:05:54 | 显示全部楼层
试下中断配置如下:
u8 a,b,c,d;

void USART2_IRQHandler(void)                        //串口2中断服务程序
{
        
        u8 Res;

        // u8 a,b,c,d;  // 这是局部变量 ,退出中断自动释放,应该拿出来
        if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)  //接收到数据
        {         
                Res =USART_ReceiveData(USART2);//(USART2->DR);        //读取接收到的数据

                if( S232_RX_CNT<64 )
                {
                        RS232_RX_BUF[RS232_RX_CNT]=Res;                //记录接收到的值
                        RS232_RX_CNT++;                                                //接收数据增加1
                }
                                else
                                        RS232_RX_CNT = 0;  //防止数组越界 ,当然根据你自己的需求实际更改

                a=RS232_RX_BUF[0];
                b=RS232_RX_BUF[1];
                c=RS232_RX_BUF[2];
                d=RS232_RX_BUF[3];
        }

                // RS232_RX_CNT=0;        // 注释 这就是你为什么 老是第一个有数据,后面是 0

}

还有就是在串口助手 这么发送  2  3  4  5  不要 2345 这么发送,实际的发送是  23   45  (注意空格)
回复

使用道具 举报

3

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
54
金钱
54
注册时间
2019-6-10
在线时间
17 小时
 楼主| 发表于 2019-7-18 11:32:25 | 显示全部楼层
JerryYung 发表于 2019-7-18 09:05
试下中断配置如下:
u8 a,b,c,d;

还是一样,下面加USART_SendData(USART2,Res);把res存的发回去,显示是2345
回复

使用道具 举报

2

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
188
金钱
188
注册时间
2019-7-17
在线时间
48 小时
发表于 2019-7-18 14:08:34 | 显示全部楼层
Lixdong 发表于 2019-7-18 11:32
还是一样,下面加USART_SendData(USART2,Res);把res存的发回去,显示是2345

进入 debug 在接收中断打断点,弄清楚是发送的问题还是MCU 中断接收的问题,看是不是因为 串口调试工具的问题
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-15 11:20

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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