嵌入式单片机基础篇(四十一)之NEC通讯以及stm32F1单片机程序

本文介绍了嵌入式单片机基础中的NEC通讯知识,包括NEC通讯的特点和单片机程序设计思路。通过开启定时器输入捕获功能,捕获红外遥控器的上升沿和下降沿信号,判断接收到的数据是0、1、连发码还是同步码。使用正点原子的程序代码示例来说明如何解码NEC协议的红外遥控信号。
摘要由CSDN通过智能技术生成

NEC通讯以及stm32F1单片机程序

1、NEC通讯知识点补充:
如果按住红外遥控器一个按键不放,那么 遥控器发送一次命令码 后,就 循环发送110ms的重复码。
重复码:9ms的红外光载波信号+2.25ms的不发射红外光载波信号+0.56ms的红外光载波信号
在这里插入图片描述
在这里插入图片描述
2、程序思路:(正点原子的程序思路)
(1)开启定时器对应通道输入捕获功能,默认上升沿捕获。定时器的计数频率为1MHz,自动装载值为10000,也就是溢出时间我10ms。
(2)开启定时器输入捕获更新中断和捕获中断。当捕获到上升沿产生捕获中断,当定时器计数溢出,产生更新中断。
(3)当捕获到上升沿的时候,设置捕获极性为下降沿捕获(为下次捕获下降沿做准备),然后设置定时器计数值为0(清空定时器),同时设置变量RmtSta的位4值为1,标记已经捕获到上升沿。 当捕获到下降沿的时候,读取定时器的值赋值给变量Dval,然后设置捕获极性为上升沿捕获(为下次捕获上升沿做准备),同时对变量RmtSta的位4进行判断:
如果RmtSta位4位1,说明之前已经捕获到过上升沿,那么对捕获值Dval进行判断,300-800之间,说明接收到的是数据0,1400-1800之间说明接收到的数据为1,2200-2600,说明是连发码,4200-4700说明为同步码。分析后设置相应的标志位。
如果是定时器发生溢出中断,那么分析,如果之前接收到了同步码,并且是第一次溢出,标记完成一次按键信息采集。
3、程序:(正点原子的程序代码)
(1)remote.c

#include "remote.h"
#include "delay.h"
#include "usart.h"
//红外遥控初始化
//设置 IO 以及定时器 4 的输入捕获
void Remote_Init(void) 
{
    
GPIO_InitTypeDef GPIO_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_ICInitTypeDef TIM_ICInitStructure; 
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); //使能 PORTB 时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE); //TIM4 时钟使能
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //PB9 输入
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //上拉输入
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure); //初始化 GPIOB.9
GPIO_SetBits(GPIOB,GPIO_Pin_9); //GPIOB.9 输出高
TIM_TimeBaseStructure.TIM_Period = 10000; //设定计数器自动重装值 最大 10ms 溢出 
TIM_TimeBaseStructure.TIM_Prescaler =(72-1); //预分频器,1M 的计数频率,1us 
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; 
//TIM 向上计数模式
TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure); //根据指定的参数初始化 TIMx
 TIM_ICInitStructure.TIM_Channel = TIM_Channel_4; // 选择输入 IC4 映射到 TI4 上
 TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;//上升沿捕获
 TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;
 TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1; //配置输入分频,不分频
 TIM_ICInitStructure.TIM_ICFilter = 0x03;//IC4F=0011 8 个定时器时钟周期滤波
 TIM_ICInit(TIM4, &TIM_ICInitStructure);//初始化定时器输入捕获通道
 TIM_Cmd(TIM4,ENABLE ); //使能定时器 4
 NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn; //TIM3 中断
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; //先占优先级 0 级
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //从优先级 3 级
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ 通道被使能
NVIC_Init(&NVIC_InitStructure); //根据指定的参数初始化外设 NVIC 寄存器
TIM_ITConfig(
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第1章 NEC单片机教学实验仪简介 1 1.1 电路外观 1 1.2 功能特点 2 1.3 实验项目 3 1.4 主要功能块 4 第2章 PM+的安装及MINICUBE的硬件连接 6 2.1 安装RA78K0/PM PLUS 6 2.2 安装CC78K0 10 2.3 安装ID78K0-QB 13 2.4 安装设备文件 17 2.5 安装QB-78K0MINI 19 2.6 电路连接 28 第3章 APPLILET、PM+和ID78K0 FOR MINICUBE的使用 31 3.1 系统配置工具APPLILET 31 3.2 PM+的使用(汇编编程) 38 3.3 PM+使用(C语言编程) 43 3.4 ID78K0-QB FOR MINICUBE 47 第4章 NEC单片机简介 71 4.1 NEC单片机78K0系列简介 71 4.2 ΜPD78F0547D单片机 80 4.3 引脚配置 83 第5章 NEC单片机实验 91 实验1 基本I/O口的实验 91 实验2 定时器实验 93 实验3 内部中断使用 96 实验4 外部中断使用 98 实验5 时钟输出/蜂鸣器输出控制器实验 101 实验6 看门狗定时器的实验 104 实验7 红外扩展 106 实验8 音乐(喇叭)应用 108 实验9 7段码显示 111 实验10 钟表定时器实验 114 实验11 步进电机驱动 119 实验12 直流电机驱动与8位/16位计数器的的使用 122 实验13 LCD串口扩展 127 实验14 键盘显示实验 132 实验15 A/D转换器的应用 139 实验16 温度压力扩展 144 实验17 模拟汽车仪表实验 150 实验18 RS232应用 154 实验19 RS485应用 157 实验20 I2C应用 160 实验21 LIN应用 167 实验22 CAN应用 171 附 录 178 附录一 步进电机驱动 178 附录二 AE2501B 两功能直流电机驱动器 182 附录三 音节频率对照表 185 附录四 LCD控制器ST7920 187 附录五 ST7920中文字库 194 附录六 SJA1000独立的CAN控制器 200 附录七 TJA1020 LIN 收发器 207 附录八 串行口调试器2002的应用 215
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值