打印

关于STM32 的红外接收

[复制链接]
8624|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
冷若寒|  楼主 | 2011-6-17 17:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
谁有用STM32F103的中断做过红外信号接收?有参考的代码吗?
沙发
冷若寒|  楼主 | 2011-6-17 17:56 | 只看该作者
我是在电机驱动程序里面加了个红外接收检测的程序,红外检测程序是采用在主程序里查询的方式。由于有个50us的中断,所以会影响到红外检测。本来用72M 的芯片可以做到可靠接收,但是24M的芯片就接收不到红外信号。

使用特权

评论回复
板凳
冷若寒|  楼主 | 2011-6-17 17:59 | 只看该作者
上面72M 的芯片是指用103的芯片,24M是指100 的芯片

使用特权

评论回复
地板
kopiluwah| | 2011-6-17 23:57 | 只看该作者
红外检测是否可以用UART的硬件配置方式来实现?这样会稳定些吧

使用特权

评论回复
5
冷若寒|  楼主 | 2011-6-18 10:40 | 只看该作者
用UART如何接收啊?高手指点

使用特权

评论回复
6
冷若寒|  楼主 | 2011-6-18 11:18 | 只看该作者
我的红外信号时前导码是低4.5ms然后高9ms 的模式,这种能用UART接收吗?

使用特权

评论回复
7
冷若寒|  楼主 | 2011-6-20 14:49 | 只看该作者
没人响应我????

使用特权

评论回复
8
caner_hn| | 2011-6-21 08:46 | 只看该作者
采用定时器+IO中断的程序
//  IR:
//  S:  H:L    =9.00ms:4.50ms           270
//  1:  H:(H+L)=0.56ms:2.25ms           45
//  0:  H:(H+L)=0.56ms:1.125ms          22

const UI08 POS2HEX[8]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};

UI08 GnIRUC1=0;         //  用户码
UI08 GnIRUC2=0;         //  用户码
UI08 GnIRKC1=0;         //  按键码
UI08 GnIRKC2=0;         //  按键码
UI08 GnPOS=0;

UI08 GnIRKEY=KEY_NONE;

void INT_PROC(void)
{
//  int im;
    UI08 nTime;
    nTime=GvTime4Cnt;           //  50us定时计数器
    GvTime4Cnt=0;
    if(nTime>100)
    {
        GnPOS=0;
        GnIRUC1=0;
        GnIRUC2=0;
        GnIRKC1=0;
        GnIRKC2=0;
    }
    else if(nTime>16)
    {
        if((GnPOS&0x18)==0x00)
        {
            GnIRUC1|=POS2HEX[GnPOS&0x07];
        }
        else if((GnPOS&0x18)==0x08)
        {
            GnIRUC2|=POS2HEX[GnPOS&0x07];
        }
        else if((GnPOS&0x18)==0x10)
        {
            GnIRKC1|=POS2HEX[GnPOS&0x07];
        }
        else if((GnPOS&0x18)==0x18)
        {
            GnIRKC2|=POS2HEX[GnPOS&0x07];
        }
        GnPOS++;
    }
    else
    {
        GnPOS++;
    }
    if(GnPOS==0x20)
    {
        if(GnIRUC1==0x40 && GnIRUC2==0xBF && (GnIRKC1^GnIRKC2)==0xFF)
        {
            GnIRKEY=GnIRKC1;
        }
        else
        {
            GnIRKEY=KEY_NONE;
        }
        GnPOS=0;
    }
}

//   50us计数一次.
void TIMER_PROC (void)
{
    if(GvTime4Cnt<250)  GvTime4Cnt++;
}

使用特权

评论回复
9
IJK| | 2011-6-21 12:25 | 只看该作者
STM32 UART的红外接收,对应的是非调制的红外信号,不是遥控器那种调制的红外信号

使用特权

评论回复
10
lixiaoxu2meng| | 2011-7-22 15:48 | 只看该作者
http://wenku.baidu.com/view/2d0b4636a32d7375a417802e.html
这个例子 符合楼主需求
可以参考一下

使用特权

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

本版积分规则

35

主题

137

帖子

1

粉丝