0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

STM32CUBEMX(5)--自定義紅外NEC解碼,定時(shí)器TIM捕獲方式

嵌入式單片機(jī)MCU開發(fā) ? 來源:嵌入式單片機(jī)MCU開發(fā) ? 作者:嵌入式單片機(jī)MCU開 ? 2022-11-14 15:48 ? 次閱讀

概述

本篇文章主要介紹如何使用STM32CubeMX對(duì)紅外波形進(jìn)行解碼,并通過串口打印。

硬件準(zhǔn)備

首先需要準(zhǔn)備一個(gè)開發(fā)板,這里我準(zhǔn)備的是NUCLEO-F030R8的開發(fā)板:

在這里插入圖片描述

選擇芯片型號(hào)

在這里插入圖片描述

配置時(shí)鐘

HSE與LSE分別為外部高速時(shí)鐘和低速時(shí)鐘,在本文中使用內(nèi)置的時(shí)鐘源,故都選擇Disable選項(xiàng),如下所示:在這里插入圖片描述

配置時(shí)鐘樹

STM32F0的最高主頻到48M,所以配置48即可:

在這里插入圖片描述

串口配置

本次實(shí)驗(yàn)使用的串口1進(jìn)行串口通信,波特率配置為115200。

在這里插入圖片描述

在這里插入圖片描述

定時(shí)器配置

本次使用定時(shí)器1的通道2進(jìn)行檢測(cè),配置入下。

在這里插入圖片描述

紅外接收管

這里使用VS838的接收管,如下所示:

在這里插入圖片描述

紅外編碼

NEC協(xié)議載波:38khz

其邏輯1與邏輯0的表示如圖所示:

在這里插入圖片描述

NEC協(xié)議格式:

在這里插入圖片描述

自定義紅外編碼

協(xié)議如下:

在這里插入圖片描述

代碼

在main.c中,添加頭文件,若不添加會(huì)出現(xiàn) identifier "FILE" is undefined報(bào)錯(cuò)。

/* USER CODE BEGIN Includes */
#include "stdio.h"
/* USER CODE END Includes */

紅外接收口定義

/* USER CODE BEGIN PTD */
#define IR_IN1 HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_9)
/* USER CODE END PTD */

函數(shù)聲明和串口重定向:

/* USER CODE BEGIN PFP */
#ifdef __GNUC__
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif /* __GNUC__ */
PUTCHAR_PROTOTYPE
{
    HAL_UART_Transmit(&huart1 , (uint8_t *)&ch, 1, 0xFFFF);
    return ch;
}
/* USER CODE END PFP */
/* USER CODE BEGIN 0 */
uint32_t OrderData = 0;
uint8_t ReadyFlag = 0;
uint8_t OK = 0;
/* USER CODE END 0 */

定時(shí)器配置

/* USER CODE BEGIN 2 */
    HAL_TIM_Base_Start_IT(&htim1);//啟動(dòng)定時(shí)器
    HAL_TIM_IC_Start_IT(&htim1,TIM_CHANNEL_2);//函數(shù)用于使能定時(shí)器某一通道的輸入捕獲功能,并使能相應(yīng)的中斷
    printf("IR Capture !! 
");
  /* USER CODE END 2 *

紅外接收代碼

  • [4400,5000]是用于捕獲4.5ms的信號(hào)
  • [550,700]是用于捕獲560us的數(shù)據(jù)0信號(hào)
  • [1100,1250]是用于捕獲1120us的數(shù)據(jù)1信號(hào)
  • [2000,2500]是用于捕獲2240us的截止位信號(hào)
/* USER CODE BEGIN 4 */
// 捕獲中斷回調(diào)函數(shù),每次捕獲到信號(hào)就會(huì)進(jìn)入這個(gè)回調(diào)函數(shù)
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{
    uint32_t fallingCount = 0 ; // 下降沿計(jì)數(shù)
    uint8_t temp = 0 ;
    // 判斷是否是定時(shí)器1的外部捕獲口2
    if(htim->Instance == TIM1)
    {
        // 捕獲到了上升沿
        if(IR_IN1)
        {
            __HAL_TIM_SET_CAPTUREPOLARITY(htim, TIM_CHANNEL_2, TIM_INPUTCHANNELPOLARITY_FALLING); // 改變捕獲極性為下降沿捕獲
            __HAL_TIM_SET_COUNTER(htim, 0); // 計(jì)數(shù)清零,從頭開始計(jì)
        }
        else
        {
            fallingCount = HAL_TIM_ReadCapturedValue(htim,TIM_CHANNEL_2); // 讀取捕獲計(jì)數(shù),這個(gè)時(shí)間即為上升沿持續(xù)的時(shí)間
            __HAL_TIM_SET_CAPTUREPOLARITY(htim, TIM_CHANNEL_2, TIM_INPUTCHANNELPOLARITY_RISING); // 改變捕獲極性為上升沿捕獲
            if( ((fallingCount > 4400) && (fallingCount <5000))) 
                OK = 1;/// 4.5ms引導(dǎo)電平
            else if (((fallingCount > 550) && (fallingCount < 700)))    
            {
                temp = 0;//560 us,數(shù)據(jù)為0
            }   
            else if (((fallingCount > 1100) && (fallingCount < 1250)))
            {

                temp = 1;//1120 us,數(shù)據(jù)為1
            }

            else if (ReadyFlag==0&& ((fallingCount > 2000) && (fallingCount < 2500)))   //2.240ms截止碼
            {
              ReadyFlag = 1 ;
                OK = 0;
            }
            if(OK)
            {
                OrderData <<= 1 ;
                OrderData += temp ;
                KeyCount = 0; // 按鍵次數(shù)
            }
        }
    }
}
/* USER CODE END 4 */

主函數(shù)

/* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
        if(ReadyFlag)
        {
            printf("order=%08X , code=%d
",OrderData,OrderData);
            OrderData = 0;
            OK = 0;
            ReadyFlag = 0;      
        }
  }
  /* USER CODE END 3 */

結(jié)果演示

紅外連續(xù)發(fā)送5次碼值,發(fā)送分別為

  • 1011(11)
  • 11 1010(58)
  • 11 0001(49)
  • 11 1111(63)
  • 11 0011(51)

分別如下所示:

在這里插入圖片描述

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 定時(shí)器
    +關(guān)注

    關(guān)注

    23

    文章

    3248

    瀏覽量

    114792
  • 開發(fā)板
    +關(guān)注

    關(guān)注

    25

    文章

    5050

    瀏覽量

    97456
  • stm32cubemx
    +關(guān)注

    關(guān)注

    5

    文章

    283

    瀏覽量

    14807
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    STM32CubeMx入門教程(3):定時(shí)器的使用

    導(dǎo)語“ 使用STM32CubeMx 生成初始化定時(shí)器代碼,實(shí)現(xiàn)定時(shí)器特定定時(shí)
    發(fā)表于 07-11 15:22 ?4070次閱讀
    <b class='flag-5'>STM32CubeMx</b>入門教程(3):<b class='flag-5'>定時(shí)器</b>的使用

    STM32CUBEMX(5)--自定義紅外NEC解碼,定時(shí)器TIM捕獲方式

    概述 本篇文章主要介紹如何使用STM32CubeMX對(duì)紅外波形進(jìn)行解碼,并通過串口打印。 硬件準(zhǔn)備 首先需要準(zhǔn)備一個(gè)開發(fā)板,這里我準(zhǔn)備的是NUCLEO-F030R8的開發(fā)板: 教學(xué)視頻 選擇
    發(fā)表于 09-05 16:19

    如何使用STM32CubeMX對(duì)紅外波形進(jìn)行解碼并通過串口打印

    STM32CUBEME--自定義紅外NEC解碼,定時(shí)器TIM
    發(fā)表于 08-10 06:52

    Stm32CubeMx基本定時(shí)器的概念

    Stm32CubeMx基本定時(shí)器基本定時(shí)器概念Stm32CubeMx 配置基本配置配置LED燈配置晶振時(shí)鐘配置串口時(shí)鐘數(shù)配置TIM6
    發(fā)表于 08-18 08:18

    STM32CubeMX基礎(chǔ)定時(shí)器TIM6有何功能呢

    STM32CubeMX基礎(chǔ)定時(shí)器TIM6的應(yīng)用有哪些?STM32CubeMX基礎(chǔ)定時(shí)器TIM6有
    發(fā)表于 11-24 07:31

    stm32 定時(shí)器 捕獲

    輸入捕獲模式可以用來測(cè)量脈沖寬度或者測(cè)量頻率。STM32定時(shí)器,除了TIM6和TIM7,其他定時(shí)器
    發(fā)表于 09-08 17:07 ?2392次閱讀

    STM32CUBEMX配置教程(十二)STM32定時(shí)器觸發(fā)的固定頻率ADC采樣(使用DMA)

    STM32CUBEMX配置教程(十二)STM32定時(shí)器觸發(fā)的固定頻率ADC采樣(使用DMA)
    發(fā)表于 11-24 13:51 ?85次下載
    <b class='flag-5'>STM32CUBEMX</b>配置教程(十二)<b class='flag-5'>STM32</b>的<b class='flag-5'>定時(shí)器</b>觸發(fā)的固定頻率ADC采樣(使用DMA)

    STM32CUBEMX配置教程(十三)STM32定時(shí)器觸發(fā)的固定頻率DAC輸出(使用DMA)

    STM32CUBEMX配置教程(十三)STM32定時(shí)器觸發(fā)的固定頻率DAC輸出(使用DMA)
    發(fā)表于 11-24 14:06 ?46次下載
    <b class='flag-5'>STM32CUBEMX</b>配置教程(十三)<b class='flag-5'>STM32</b>的<b class='flag-5'>定時(shí)器</b>觸發(fā)的固定頻率DAC輸出(使用DMA)

    STM32CubeMX實(shí)戰(zhàn)教程(五)——通用定時(shí)器(PWM輸出)

    前言在上一章《STM32CubeMX實(shí)戰(zhàn)教程(四)——基本定時(shí)器(還是點(diǎn)燈)》中,已經(jīng)介紹過基本定時(shí)器的功能及用法,在這一章中,我講主要介紹一下通用定時(shí)器的相關(guān)功能以及配置方法,廢話不
    發(fā)表于 11-26 15:36 ?13次下載
    <b class='flag-5'>STM32CubeMX</b>實(shí)戰(zhàn)教程(五)——通用<b class='flag-5'>定時(shí)器</b>(PWM輸出)

    STM32CubeMX——定時(shí)器輸入捕獲

    通用定時(shí)器在基本定時(shí)器的基礎(chǔ)上增加了一個(gè)外部引腳,可以實(shí)現(xiàn)輸入捕獲與輸出比較等功能。高級(jí)定時(shí)器TIM1與
    發(fā)表于 12-02 14:06 ?9次下載
    <b class='flag-5'>STM32CubeMX</b>——<b class='flag-5'>定時(shí)器</b>輸入<b class='flag-5'>捕獲</b>

    STM32定時(shí)器TIM用作輸入捕獲

    定時(shí)器TIM2的通道3(PA2)為輸入捕獲。分頻值根據(jù)自己需要設(shè)置,分頻值越大采出的頻率精度越低。周期最好拉滿,這樣采集時(shí)不會(huì)溢出。2.定時(shí)器TIM
    發(fā)表于 12-14 18:58 ?2次下載
    <b class='flag-5'>STM32</b>的<b class='flag-5'>定時(shí)器</b><b class='flag-5'>TIM</b>用作輸入<b class='flag-5'>捕獲</b>

    STM32CUBEMX(5)--自定義紅外NEC解碼定時(shí)器TIM捕獲方式

    STM32CUBEME--自定義紅外NEC解碼,定時(shí)器TIM
    發(fā)表于 12-17 17:45 ?8次下載
    <b class='flag-5'>STM32CUBEMX</b>(<b class='flag-5'>5</b>)--<b class='flag-5'>自定義</b><b class='flag-5'>紅外</b><b class='flag-5'>NEC</b><b class='flag-5'>解碼</b>,<b class='flag-5'>定時(shí)器</b><b class='flag-5'>TIM</b><b class='flag-5'>捕獲</b><b class='flag-5'>方式</b>

    Arduino Nano上的自定義定時(shí)器功能

    電子發(fā)燒友網(wǎng)站提供《Arduino Nano上的自定義定時(shí)器功能.zip》資料免費(fèi)下載
    發(fā)表于 10-26 14:26 ?0次下載
    Arduino Nano上的<b class='flag-5'>自定義</b><b class='flag-5'>定時(shí)器</b>功能

    STM32CUBEMX開發(fā)GD32F303(13)----定時(shí)器TIM捕獲PWM測(cè)量頻率與占空比

    概述 本章STM32CUBEMX配置STM32F103,并且在GD32F303中進(jìn)行開發(fā),同時(shí)通過開發(fā)板內(nèi)進(jìn)行驗(yàn)證。 本章STM32CUBEMX配置STM32F103輸出PWM,同時(shí)使
    的頭像 發(fā)表于 12-07 10:15 ?3540次閱讀
    <b class='flag-5'>STM32CUBEMX</b>開發(fā)GD32F303(13)----<b class='flag-5'>定時(shí)器</b><b class='flag-5'>TIM</b><b class='flag-5'>捕獲</b>PWM測(cè)量頻率與占空比

    STM32 TIM—基本定時(shí)器

    STM32F4xx系列控制有共有14個(gè)TIM定時(shí)器。其中2個(gè)高級(jí)控制定時(shí)器TIM1和
    的頭像 發(fā)表于 07-22 17:05 ?5060次閱讀
    <b class='flag-5'>STM32</b> <b class='flag-5'>TIM</b>—基本<b class='flag-5'>定時(shí)器</b>