打印
[ARM入门]

STM32F103C8主函数运行奇怪问题

[复制链接]
621|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
万人帝|  楼主 | 2017-4-6 23:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
            while (1)
                {
                        if(flag==0x01)
                        {
                                flag=0;//标志位清0
                                iPose=0;
                                USART1_Printf("123456789");
                                memcpy(&XY2_position,Receie_data,9);
                                if(XY2_position.num)Line_Bresenham(XY2_position.x0,XY2_position.y0,XY2_position.x1,XY2_position.y1);
                                else                      Line_DDA(XY2_position.x0,XY2_position.y0,XY2_position.x1,XY2_position.y1);
                        }
                }
}
void USART1_IRQHandler(void)        //串口1中断函数
{
        USART_ClearFlag(USART1,USART_FLAG_TC);
        if(USART1->SR & 0x00000020)//检查指定的USART中断发生与否
        {
                Receie_data[iPose]=USART1->DR & (uint16_t)0x01FF;//读取接收到的数据
                iPose++;//计数器加1
                if(iPose==9)flag=0x01;               
                USART1->DR = (flag & (uint16_t)0x01FF);
                while((USART1->SR&0x00000040) == 0);//准备发送一个数据       
        }
}
程序在一个STM32单片机上运行,可以检测到反馈的数据正常,但是单片机检测不到  flag==1,但是串口反馈的数据中到第9个字节数据时,flag确实=1
更换一个单片机后,程序第一次运行正常,在第二次就会出现flag始终等于1的状况,
菜鸟跪求大神指点?

相关帖子

沙发
万人帝|  楼主 | 2017-4-8 08:41 | 只看该作者
找到具体的原因了,是 memcpy(&XY2_position,Receie_data,9);导致程序死机了,但是为什么数据的复制会导致死机呢

使用特权

评论回复
板凳
Prry| | 2017-4-8 09:57 | 只看该作者
万人帝 发表于 2017-4-8 08:41
找到具体的原因了,是 memcpy(&XY2_position,Receie_data,9);导致程序死机了,但是为什么数据的复制会导致 ...

确保目标存储内存XY2_position能够容纳9个内存(字节、字等)。另外,从程序看,XY2_position是个结构体,应该强制转换为与源存储内存Receie_data一样的类型;比如char型:(char*)&XY2_position

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

8

帖子

0

粉丝