OpenEdv-开源电子网

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

串口中断接收问题

[复制链接]

1

主题

5

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2016-1-12
在线时间
4 小时
发表于 2016-5-14 13:51:55 | 显示全部楼层 |阅读模式
1金钱
void USART2_IRQHandler(void)              
{
   if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)  
         {
           Re_buf[counter]=USART_ReceiveData(USART2);
           USART_ClearFlag(USART2, USART_FLAG_TC);       
          if(counter==0&& Re_buf[0]!=0x55) return;
                counter++;       
                if(counter==11)
                {       
                counter=0;
                sign=1;
                }
         }
  }
主函数里边对sign的值进行判断,判断后将其置0,但是中断函数只能执行2次,就再也不对sign置1了。

最佳答案

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

恩,谢了,问题解决了。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2016-1-12
在线时间
4 小时
 楼主| 发表于 2016-5-14 13:51:56 | 显示全部楼层
openedvadmin 发表于 2016-5-14 14:18
使用调试器调试一下,看看后面的中断后,为什么没有设置sign。。。

恩,谢了,问题解决了。
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2016-1-12
在线时间
4 小时
 楼主| 发表于 2016-5-14 13:53:53 | 显示全部楼层
求助万能的贴吧啊,实在找不出问题出在哪了。
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2016-1-12
在线时间
4 小时
 楼主| 发表于 2016-5-14 13:56:01 | 显示全部楼层
int main(void)
{
          D1=1;
          D2=1;
          D3=1;
          D4=1;
        p=1;
        d=1;
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//éèÖÃÏμí3ÖD¶ÏóÅÏ輶·Ö×é2
        uart_init(9600);//′®¿ú3õê¼»ˉ2¨ìØÂêÎa9600
        uart2_init(9600);//óÃóú½óêÕà′×ÔMPU6050μÄêy¾Y
        delay_init(168);//Ñóê±3õê¼»ˉ
        LED_Init();       
        GPIO_4_init();
        TIM3_PWM_Init(500-1,84-1);        //84M/84=1MhzμļÆêyÆμÂê,ÖØ×°ÔØÖμ500£¬Ëùò&#212WMÆμÂêÎa 1M/500=2Khz.
        delay_ms(200);
        while(1)
        {
        LED0 =0;//0μÆáá
         if(sign)
         {
           memcpy(Temp,Re_buf,11);// memcpyÄú′濽±′oˉêyÔústring.hÖD,×÷óÃêÇ′óRe_bufÖD¸′ÖÆ11¸öêyμ½tempÖD
                 sign=0;
                 if(Re_buf[0]==0x55) //¼ì2éÖ¡í·
           {  
                   switch(Re_buf[1])
                         {
                                 case 0x51: //±êê¶Õa¸ö°üêǼóËù¶è°ü
           a[0] = ((short)(Temp[3]<<8 | Temp[2]))/32768.0*16;      //X&#214;á&#188;ó&#203;ù&#182;èshortè&#161;&#214;μ·&#182;&#206;§-32768&#161;¤32767
           a[1] = ((short)(Temp[5]<<8 | Temp[4]))/32768.0*16;      //Y&#214;á&#188;ó&#203;ù&#182;è
           a[2] = ((short)(Temp[7]<<8 | Temp[6]))/32768.0*16;      //Z&#214;á&#188;ó&#203;ù&#182;è
           T    = ((short)(Temp[9]<<8 | Temp[8]))/340.0+36.25;      //&#206;&#194;&#182;è
           break;
         case 0x52: //±êê&#182;&#213;a&#184;&#246;°üê&#199;&#189;&#199;&#203;ù&#182;è°ü
           w[0] = ((short)(Temp[3]<<8| Temp[2]))/32768.0*2000;      //X&#214;á&#189;&#199;&#203;ù&#182;è
           w[1] = ((short)(Temp[5]<<8| Temp[4]))/32768.0*2000;      //Y&#214;á&#189;&#199;&#203;ù&#182;è
           w[2] = ((short)(Temp[7]<<8| Temp[6]))/32768.0*2000;      //Z&#214;á&#189;&#199;&#203;ù&#182;è
           T    = ((short)(Temp[9]<<8| Temp[8]))/340.0+36.25;      //&#206;&#194;&#182;è
           break;
         case 0x53: //±êê&#182;&#213;a&#184;&#246;°üê&#199;&#189;&#199;&#182;è°ü
           angle[0] = ((short)(Temp[3]<<8| Temp[2]))/32768.0*180;   //X&#214;á1&#246;×a&#189;&#199;£¨x &#214;á£&#169;
           angle[1] = ((short)(Temp[5]<<8| Temp[4]))/32768.0*180;   //Y&#214;á&#184;&#169;&#209;&#246;&#189;&#199;£¨y &#214;á£&#169;
           angle[2] = ((short)(Temp[7]<<8| Temp[6]))/32768.0*180;   //Z&#214;á&#198;&#171;o&#189;&#189;&#199;£¨z &#214;á£&#169;
           T        = ((short)(Temp[9]<<8| Temp[8]))/340.0+36.25;   //&#206;&#194;&#182;è
                                   break;
                                 default: break;
                         }
//                USART_SendData(USART1,angle[0]);   //ó&#195;′&#174;&#191;ú1·¢&#203;íò&#187;&#184;&#246;×&#214;&#189;ú
//          while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);  //μè′y′&#174;&#191;ú1·¢&#203;ííê±&#207;
         
         if( angle[0]>0)//angle[0]:X&#214;á1&#246;×a&#189;&#199;£¨x &#214;á£&#169;, w[0]:X&#214;á&#189;&#199;&#203;ù&#182;è
                 TIM_SetCompare1(TIM3,2);//PA6DT&#184;&#196;±è&#189;&#207;&#214;μ£&#172;DT&#184;&#196;&#213;&#188;&#191;&#213;±è ,&#214;μ2&#187;&#196;ü3&#172;1y&#214;ü&#198;ú£o500
         else
                  TIM_SetCompare2(TIM3,10);
                 }                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
         }
这是主函数
回复

使用道具 举报

307

主题

1427

帖子

12

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
7875
金钱
7875
注册时间
2015-10-15
在线时间
2874 小时
发表于 2016-5-14 14:18:39 | 显示全部楼层
使用调试器调试一下,看看后面的中断后,为什么没有设置sign。。。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-27 06:26

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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