STM8是红外通讯的绝配

有读者私信我,要获得更详细的内情。很抱歉,因为时间实在有限,而且对于实际场景不了解,所以,简单地更新,添加了点儿内容。至于更加详细的电路图和源码需要额外时间继续补充。

前言

最近使用STM8L152做产品,需要基于红外线通讯的Bootloader。发现STM8L05X/15X是红外通讯的绝配。

红外线大致有CIR和SIR两种。前者主要用于5~10米距离的红外遥控器,采用38kHz载波,有大量的廉价接收解码器可用。后者是IrDa标准之一,曾经是功能手机和笔记本电脑的标准配置,其堆栈和配置实体设计与蓝牙比较像,物理层采用3/16载波方式,需要单独的收发模块。

消费电子的红外遥控器

电子、DVD、机顶盒、空调等传统消费电子中常见的遥控器,我们称之为CIR, Consumer Infra Red。CIR通常使用980nm红外线,还需要采用38KHz~40KHz载波以避免可见光干扰。CIR需要编码和解码电路。

我们可以找到若干编码电路。如果由MCU来实现,则需要产生38~40KHz 载波,另外根据特定的红外遥控协议,如SONY/Philips RC5等产生二进制码流。并利用逻辑门或者三极管来实现二进制码流对于载波的调制。理论上,二进制码流和载波还有一定的时序关系,但是实践下来,这种时序关系的容错率很高。

至于CIR的红外接收部分,因为产量比较大,有低成本模块供应,内置38~40KHz载波发生器,并直接输出解调后的二进制码流。所以解码接收部分任意MCU都可以实现。

综上所述,STM8L的CIR方案中,主要考虑的是编码发射端。

IRC + GPIO + 二极管

MCU产生38KHz载波最常见的方法是使用定时器。包括设定38KHz的中断,并在中断中去切换GPIO引脚。或者设定一个占空比为50%的PWM中断。其道理是类似的。同时,由软件或者另外一种定时器来产生定时中断,产生二进制码流。两者在外部使用CIR二极管相连,当两个GPIO压差为VCC时,IR二极管点亮,压差为零时,IR二极管关闭。这样就形成了最简单的CIR遥控器。

对于STM8L来说,其内部的低频RC振荡器频率正好在38KHz,当然有些误差,但是对于CIR来说要求没有那么严格。由于是内部IRC,所以并不需要使用定时器来产生中断。

Bootloader与中断

通常38kHz载波采用定时器产生PWM。但是Bootloader状态下必须关闭所有中断。这就限制了许多MCU在这种状态的使用。有部分设计只用了单向传输,但是这种方式试错成本太高了。

STM8L05X内部低速RC就是38kHz。而且可以从引脚引出来为载波,实测37.2kHz。配合USART可以直接构成双向红外通讯和遥控器。比STM推荐的IRTM还好用。

基于消费红外线的串口通讯

消费者红外线技术是单向的:遥控器负责编码和发射红外线,设备负责接收和解码。在某些环境中,比如说水电煤表的自动抄表系统中,则需要建立起双向红外线通道。

红外线和无线电通讯类似,采用半双工通讯方式。所以软件角度必须要确保时序,不要造成双方的通讯冲突。同时硬件上也可以采取一些方法,保证己方在发射时不进行接收,避免自发自收。

由于38KHz载波的存在,其波特率收到限制,我测试过9.6kbps,但是工作在2.4kbps,误码率要少许多。

在Bootloader模式下,USART RXD可以采用polling方式实现,在低速率情况下不会掉数据。

消费红外编码与解码

这个其实和STM8无关了,可以参考Arduino的红外编码和红外解码库。总的思路是将红外切割成一个个小的时间片,而无需太多考虑RC5/SONY/Toshiba/RCA等不同的红外遥控协议,直接使用一串二进制数据来编码。这也是大多数通用学习型红外遥控器的原理。

具体实现请参考 How to make IR decoder 以及 How to setup an IR remote and receiver on an Arduino.

IrDa SIR串口通讯

STM8的片内USART外设是支持IRDA SIR收发标准的。这是一种国际标准,早期移动电话和其他数据终端中多采用此类标准,通讯速率较高,可达到115.2kbps。但相对应的,它的红外收发模组成本在20多元人民币,比消费红外模块贵许多。

STM8的架构限制

STM8的原始MCU架构来自意法半导体的ST7,是意法自主开发的内核。这里额外提一下,意法的STR7和ST7不同,是基于ARM7TDMI内核的产品线。STM8在ST7上做了很多改变,与STM32保持了引脚一致性。所以,STM8是一个性价比较高的MCU。

警告

但是STM8的ITC(中断控制)部分却存在着较大的问题。通过仿真器,我觉得和STM8的虚拟存储器以及压栈的先后顺序有关联。在某些极端嵌套中断情况下会导致堆栈溢出,或者一些莫名其妙的问题。具体请留意STM8 Error Sheet

所以STM8在中断设计方面不能够采用过于复杂的嵌套设计,同时需要做些黑盒压力测试。

本文中的某些做法,如利用IRC直接产生38~40KHz载波的方式,可以作为一种思路,在其他MCU中继续使用。比如STM32F030F4 IRC40KHz/LPC812 SCT等。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343