OpenEdv-开源电子网

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

旋转编码器在转向计数时,正传反转都只能减(同时在内部lash保存变量值),请问这种情况是什么引起的?

[复制链接]

22

主题

73

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
250
金钱
250
注册时间
2020-3-3
在线时间
85 小时
发表于 2020-6-18 16:08:48 | 显示全部楼层 |阅读模式
void TIM8_CC_IRQHandler(void)
{
        if (TIM_GetITStatus(TIM8, TIM_IT_CC1|TIM_IT_CC2) != RESET)
        {
               
          if (TIM_GetITStatus(TIM8, TIM_IT_CC1) != RESET&&PCin(7)==0)//捕获1发生捕获事件
                 {       
                         switch(Get_Key_Sta)
                         {
                                 case 1:
                                         //范围,保存的问题
                                        ch1_temp++;
                                    FLASH_Unlock();
                                    FLASH_ErasePage(0x08030000+2*1024*5);
                                    FLASH_ProgramWord(0x08030000+2*1024*5,ch1_temp);
                    FLASH_Lock();                                 
                                    
                                     if(ch1_temp>999)
                                         ch1_temp=0;                                       
                                         break;
                                 case 2:
                                        ch2_temp++;
                                    FLASH_Unlock();
                                    FLASH_ErasePage(0x08030000+2*1024*6);
                                    FLASH_ProgramWord(0x08030000+2*1024*6,ch2_temp);
                    FLASH_Lock();       
                                      if(ch2_temp>999)
                                          ch2_temp=0;
                                          break;
                                 case 3:
                                        ch3_temp++;
                                    FLASH_Unlock();
                                    FLASH_ErasePage(0x08030000+2*1024*7);
                                    FLASH_ProgramWord(0x08030000+2*1024*7,ch3_temp);
                    FLASH_Lock();       
                                      if(ch3_temp>999)
                                          ch3_temp=0;
                                          break;
                                 case 4:
                                        ch4_temp++;
                                    FLASH_Unlock();
                                    FLASH_ErasePage(0x08030000+2*1024*8);
                                    FLASH_ProgramWord(0x08030000+2*1024*8,ch4_temp);
                    FLASH_Lock();       
                                      if(ch4_temp>999)
                                          ch4_temp=0;
                                          break;
                                 default :
                                           break;
                                     
                         }
                         


                 }

                 
                 if (TIM_GetITStatus(TIM8, TIM_IT_CC1) != RESET&&PCin(7)==1)//捕获1发生捕获事件
                 {       
                        switch(Get_Key_Sta)
                         {
                                 case 1:
                               
                                         ch1_temp--;
                                    FLASH_Unlock();
                                    FLASH_ErasePage(0x08030000+2*1024*5);
                                    FLASH_ProgramWord(0x08030000+2*1024*5,ch1_temp);
                    FLASH_Lock();       
                                     if(ch1_temp<1)
                                         ch1_temp=999;
                                         break;
                                 case 2:
                                         ch2_temp--;
                                    FLASH_Unlock();
                                    FLASH_ErasePage(0x08030000+2*1024*6);
                                    FLASH_ProgramWord(0x08030000+2*1024*6,ch2_temp);
                    FLASH_Lock();       
                                      if(ch2_temp<1)
                                          ch2_temp=999;
                                          break;
                                 case 3:
                                           ch3_temp--;
                                      FLASH_Unlock();
                                    FLASH_ErasePage(0x08030000+2*1024*7);
                                    FLASH_ProgramWord(0x08030000+2*1024*7,ch3_temp);
                    FLASH_Lock();       
                                      if(ch3_temp<1)
                                          ch3_temp=999;
                                          break;
                                 case 4:
                                          ch4_temp--;
                                      FLASH_Unlock();
                                    FLASH_ErasePage(0x08030000+2*1024*8);                                  
                                    FLASH_ProgramWord(0x08030000+2*1024*8,ch4_temp);
                    FLASH_Lock();       
                                      if(ch4_temp<1)
                                          ch4_temp=999;
                                          break;
                                 default :
                                           break;
                                     
                         }
                 }

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

使用道具 举报

12

主题

3399

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8679
金钱
8679
注册时间
2020-5-11
在线时间
4159 小时
发表于 2020-6-18 16:13:52 | 显示全部楼层
像这种语句能否多加些括号便于理清楚优先级:
TIM_GetITStatus(TIM8, TIM_IT_CC1) != RESET&&PCin(7)==0
专治疑难杂症
回复 支持 反对

使用道具 举报

22

主题

73

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
250
金钱
250
注册时间
2020-3-3
在线时间
85 小时
 楼主| 发表于 2020-6-18 16:17:43 | 显示全部楼层
LcwSwust 发表于 2020-6-18 16:13
像这种语句能否多加些括号便于理清楚优先级:
TIM_GetITStatus(TIM8, TIM_IT_CC1) != RESET&&PCin(7)==0

确实,应该加
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-17 15:44

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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