OpenEdv-开源电子网

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

STM32用红外通信与PWM和RTC冲突,求助

[复制链接]

2

主题

5

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2014-6-4
在线时间
0 小时
发表于 2015-4-25 09:55:54 | 显示全部楼层 |阅读模式
5金钱

我做了一个小玩意,需要使用ADC,5110屏幕,输出PWM,还有RTC,红外等。现在发现其他部分就绪,添加原子哥的miniSTM32代码红外部分后,5110屏上显示的日期时间和ADC值还有PWM输出情况,要么不正常,要么干脆整个系统卡死,而且就算上述功能都可以用,红外也基本接收不到值,而且我发现红外可以“控制”系统其它部分功能是否运行,按一次遥控器,其它功能卡住,再按下别的键,又恢复了,求助各位这该怎么办。

红外部分的代码就贴这三个函数的吧,因为与例程里的代码基本相同。

void Remote_Init(void)
{       
     RCC->APB2ENR|=1<<2;       
     GPIOA->CRL&=0XFFFFFF0F;
     GPIOA->CRL|=0X00000080; 
     GPIOA->ODR|=1<<1;    
     Ex_NVIC_Config(GPIO_A,1,FTIR);
     MY_NVIC_Init(0,0,EXTI1_IRQChannel,2);
}  

u8 Pulse_Width_Check(void)
{
    u8 t=0; 
    while(RDATA)
    { 
       t++;
       delay_us(20);     
       if(t==250)
           return t; 
    }
    return t;
}     


void EXTI1_IRQHandler(void)
{      
    u8 res=0;
    u8 OK=0;
    u8 RODATA=0;     
    while(1)
    {       
        if(RDATA)
        {
            res=Pulse_Width_Check();
            if(res==250)
                break;
            if(res>=200&&res<250)
                OK=1; 
            else if(res>=85&&res<200) 
            {               
                Remote_Rdy=1;
                Remote_Cnt++;
                break;
            }
            else if(res>=50&&res<85)
                RODATA=1;
            else if(res>=10&&res<50)
                RODATA=0;
            if(OK)
            {
                Remote_Odr<<=1;
                Remote_Odr+=RODATA;
                Remote_Cnt=0; 
            }   
       }         
    }
}

PWM的部分就贴了中断优先级的

void Timerx_Init0(u16 arr,u16 psc)
{
 RCC->APB1ENR|=1<<2;   
  TIM4->ARR=arr;    
 TIM4->SC=psc;  
 TIM4->DIER|=1<<0;     
 TIM4->DIER|=1<<6;   
 TIM4->CR1|=0x01; 
  MY_NVIC_Init(1,1,TIM4_IRQChannel,2);         
}

然后RTC就这句是跟中断优先级有关

MY_NVIC_Init(3,3,RTC_IRQChannel,2);

最佳答案

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

回复【5楼】叶落浮华: --------------------------------- 不不,红外那部分代码就是那样的,这个没事,肯定能跳出来,现在已经好用了,之前不好用是因为我丢了一条代码,清除红外中断标志位的那句....
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

5

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2014-6-4
在线时间
0 小时
 楼主| 发表于 2015-4-25 09:55:55 | 显示全部楼层
回复【5楼】叶落浮华:
---------------------------------
不不,红外那部分代码就是那样的,这个没事,肯定能跳出来,现在已经好用了,之前不好用是因为我丢了一条代码,清除红外中断标志位的那句....
回复

使用道具 举报

28

主题

1489

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1656
金钱
1656
注册时间
2013-7-24
在线时间
1 小时
发表于 2015-4-25 10:53:56 | 显示全部楼层
楼主,你认为哪里冲突了?
于20150522停用该账号:http://www.microstar.club
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2015-4-25 13:12:37 | 显示全部楼层
楼主可以研究一下中断优先级,这个可以嵌套的,即使相同的优先级,哪个先来相应哪个的,不知道楼主说的冲突
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

2

主题

5

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2014-6-4
在线时间
0 小时
 楼主| 发表于 2015-4-25 22:16:37 | 显示全部楼层
回复【2楼】styleno1:
---------------------------------
回复【3楼】八度空间:
---------------------------------
可能我用词不太准确,目前红外加入后的确对RTC和PWM的运行产生了负面影响,而我之前在原子的miniSTM32开发板上也搞过类似的设计,那会就没有这么严重的问题,所以也感觉挺奇怪。另外我在上面已经把各种症状讲的很详细了,目前不知道有什么办法能解决,还请各位帮忙。
回复

使用道具 举报

8

主题

42

帖子

0

精华

初级会员

Rank: 2

积分
161
金钱
161
注册时间
2014-1-7
在线时间
24 小时
发表于 2015-4-27 12:46:21 | 显示全部楼层
你在中断里用死循环???
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-23 07:20

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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