久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2568|回復: 5
打印 上一主題 下一主題
收起左側(cè)

STM32 TIM14輸入捕獲設(shè)置不對請求幫助

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:311400 發(fā)表于 2021-9-2 12:22 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
  1. #include "IR.h"
  2. //#include "Application.h"
  3. //#include "CONFIG.h"
  4. //#include "peripheral.h"

  5. extern void KeyAction(u8 code);

  6. const u8 IrCodeMap[][2] = {  //紅外鍵碼到標準PC鍵碼的映射表

  7.     {0xF2, '1'}, {0x22, '2'}, {0x0A, '3'},         //'1'->'1'  '2'->'2'   '3'->'3'
  8.     {0x70, '4'}, {0xC8, '5'}, {0x48, '6'},  //'4'->'4'  '5'->'5'   '6'->'6'
  9.     {0xA8, '7'}, {0xCA, '8'}, {0xA2, '9'},         //'7'->'7'  '8'->'8'   '9'->'9'
  10.         {0x8A, '*'}, {0x28,'0'} , {0x18,'#'},         //'*'->'7'  '0'->'0'   '#'->'#'
  11.                                   {0xAA, 0x26} ,                  
  12.         {0x08, 0X25}, {0x32, 0x0D} , {0xEA, 0x27},                  
  13.                                   {0x02, 0x28},
  14. };   

  15. /*******************************************************************************************
  16. Description :
  17. //紅外遙控初始化
  18. //設(shè)置IO以及定時器3的輸入捕獲 連接到PA6
  19. *******************************************************************************************/
  20. void Remote_Init(void)                              
  21. {  
  22.         NVIC_InitTypeDef NVIC_InitStructure;
  23.         TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  24.         TIM_ICInitTypeDef  TIM_ICInitStructure;
  25. #if 0
  26.         GPIO_InitTypeDef GPIO_InitStructure;
  27.         /* GPIOC Periph clock enable */
  28.         RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
  29.         //紅外上拉輸入 TIM3_CH1 PA6
  30.         GPIO_PinAFConfig(GPIOA, GPIO_PinSource6, GPIO_AF_1);
  31.         GPIO_InitStructure.GPIO_Pin = IR_PINS;
  32.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  33.         GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  34.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  35.         GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
  36.         GPIO_Init(IR_PORT, &GPIO_InitStructure);
  37. #endif
  38.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM14,ENABLE);        //TIM3 時鐘使能
  39.                                                          
  40.         TIM_TimeBaseStructure.TIM_Period = 10000; //設(shè)定計數(shù)器自動重裝值 最大10ms溢出  
  41.         TIM_TimeBaseStructure.TIM_Prescaler =(48-1);         //預分頻器,1M的計數(shù)頻率,1us加1.           
  42.         TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //設(shè)置時鐘分割:TDTS = Tck_tim
  43.         TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上計數(shù)模式

  44.         TIM_TimeBaseInit(TIM14, &TIM_TimeBaseStructure); //根據(jù)指定的參數(shù)初始化TIMx

  45.         TIM_ICInitStructure.TIM_Channel = TIM_Channel_1;  // 選擇輸入端 IC2映射到TI5上
  46.         TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;        //上升沿捕獲
  47.         TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;
  48.         TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;         //配置輸入分頻,不分頻
  49.         TIM_ICInitStructure.TIM_ICFilter = 0x03;//IC4F=0011 配置輸入濾波器 8個定時器時鐘周期濾波
  50.         TIM_ICInit(TIM14, &TIM_ICInitStructure);//初始化定時器輸入捕獲通道

  51.         TIM_Cmd(TIM14,ENABLE );         //使能定時器3

  52.         /* Enable the TIM2 global Interrupt */
  53.         NVIC_InitStructure.NVIC_IRQChannel = TIM14_IRQn;
  54.         NVIC_InitStructure.NVIC_IRQChannelPriority = 0;
  55.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  56.         NVIC_Init(&NVIC_InitStructure);

  57.         TIM_ITConfig( TIM14,TIM_IT_Update|TIM_IT_CC1,ENABLE);//允許更新中斷 ,允許CC1IE捕獲中斷        

  58. }


  59. //遙控器接收狀態(tài)
  60. //[7]:收到了引導碼標志
  61. //[6]:得到了一個按鍵的所有信息
  62. //[5]:保留        
  63. //[4]:標記上升沿是否已經(jīng)被捕獲                                                                  
  64. //[3:0]:溢出計時器
  65. u8         RmtSta=0;                    
  66. u16 Dval;                //下降沿時計數(shù)器的值
  67. u32 RmtRec=0;        //紅外接收到的數(shù)據(jù)                              
  68. u8  RmtCnt=0;        //按鍵按下的次數(shù)         
  69. //定時器5中斷服務(wù)程序         
  70. void TIM14_IRQHandler(void)
  71. {                              
  72.     if(TIM_GetITStatus(TIM14,TIM_IT_Update)!=RESET)
  73.         {
  74.                 if(RmtSta&0x80)//上次有數(shù)據(jù)被接收到了
  75.                 {        
  76.                         RmtSta&=~0X10;                                                //取消上升沿已經(jīng)被捕獲標記
  77.                         if((RmtSta&0X0F)==0X00)RmtSta|=1<<6;//標記已經(jīng)完成一次按鍵的鍵值信息采集
  78.                         if((RmtSta&0X0F)<14)RmtSta++;
  79.                         else
  80.                         {
  81.                                 RmtSta&=~(1<<7);//清空引導標識
  82.                                 RmtSta&=0XF0;        //清空計數(shù)器        
  83.                         }                                                                    
  84.                 }                                                            
  85.         }
  86.          if(TIM_GetITStatus(TIM14,TIM_IT_CC1)!=RESET)
  87.         {         
  88.                 if(READ_IR)//上升沿捕獲
  89.                 {

  90.                         TIM_OC1PolarityConfig(TIM14,TIM_ICPolarity_Falling);                //CC1P=1 設(shè)置為下降沿捕獲                                
  91.                     TIM_SetCounter(TIM14,0);                   //清空定時器值
  92.                         RmtSta|=0X10;                                        //標記上升沿已經(jīng)被捕獲
  93.                 }
  94.                 else //下降沿捕獲
  95.                 {                        
  96.                         Dval=TIM_GetCapture1(TIM14);//讀取CCR1也可以清CC1IF標志位
  97.                         TIM_OC1PolarityConfig(TIM14,TIM_ICPolarity_Rising); //CC4P=0        設(shè)置為上升沿捕獲
  98.                         
  99.                         if(RmtSta&0X10)                                        //完成一次高電平捕獲
  100.                         {
  101.                                 if(RmtSta&0X80)//接收到了引導碼
  102.                                 {
  103.                                        
  104.                                         if(Dval>300&&Dval<800)                        //560為標準值,560us
  105.                                         {
  106.                                                 RmtRec<<=1;        //左移一位.
  107.                                                 RmtRec|=0;        //接收到0           
  108.                                         }
  109.                                         else if(Dval>1400&&Dval<1800)        //1680為標準值,1680us
  110.                                         {
  111.                                                 RmtRec<<=1;        //左移一位.
  112.                                                 RmtRec|=1;        //接收到1
  113.                                         }
  114.                                         else if(Dval>2200&&Dval<2600)        //得到按鍵鍵值增加的信息 2500為標準值2.5ms
  115.                                         {
  116.                                                 RmtCnt++;                 //按鍵次數(shù)增加1次
  117.                                                 RmtSta&=0XF0;        //清空計時器               
  118.                                         }
  119.                                 }
  120.                                 else if(Dval>4200&&Dval<4700)                //4500為標準值4.5ms
  121.                                 {
  122.                                         RmtSta|=1<<7;        //標記成功接收到了引導碼
  123.                                         RmtCnt=0;                //清除按鍵次數(shù)計數(shù)器
  124.                                 }                                                
  125.                         }
  126.                         RmtSta&=~(1<<4);
  127.                 }                                                                                                            
  128.         }
  129. TIM_ClearFlag(TIM14,TIM_IT_Update|TIM_IT_CC1);            
  130. }

  131. /* 紅外接收驅(qū)動,檢測接收到的鍵碼,調(diào)度相應動作函數(shù) */
  132. void RemoteDirver(void)
  133. {
  134.          u8 sta=0;      
  135.     u8 t1,t2,i;  
  136.         if(RmtSta&(1<<6))//得到一個按鍵的所有信息了
  137.         {
  138.             t1=RmtRec>>24;                        //得到地址碼
  139.             t2=(RmtRec>>16)&0xff;        //得到地址反碼
  140.              if((t1==(u8)~t2)&&t1==REMOTE_ID)//檢驗遙控識別碼(ID)及地址
  141.             {
  142.                 t1=RmtRec>>8;
  143.                 t2=RmtRec;         
  144.                 if(t1==(u8)~t2)
  145.                         {
  146.                                 sta=t1;//鍵值正確
  147.                                 RmtSta&=~(1<<6);//清除接收到有效按鍵標識
  148.                                 if((RmtCnt==0)||(RmtCnt>5))
  149.                                 {
  150.                                         //清除按鍵次數(shù)計數(shù)器
  151.                                         for (i=0; i<sizeof(IrCodeMap)/sizeof(IrCodeMap[0]); i++) //遍歷映射表
  152.                                         {
  153.                                                 if (sta == IrCodeMap[i][0])  //在表中找到當前接收的鍵碼后,
  154.                                                 {                                  //用對應的映射碼執(zhí)行函數(shù)調(diào)度,
  155.                                                         KeyAction(IrCodeMap[i][1]);    //直接調(diào)用按鍵動作函數(shù)即可。
  156.                                                         break;
  157.                                                 }
  158.                                         }
  159.                                 }
  160.                         }                 
  161.                 }   
  162.                 if((sta==0)||((RmtSta&0X80)==0))//按鍵數(shù)據(jù)錯誤/遙控已經(jīng)沒有按下了
  163.                 {
  164.                          RmtSta&=~(1<<6);//清除接收到有效按鍵標識
  165.                         RmtCnt=0;                //清除按鍵次數(shù)計數(shù)器
  166.                 }
  167.         }
  168. }
復制代碼
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:311400 發(fā)表于 2021-9-2 12:24 | 只看該作者
if(TIM_GetITStatus(TIM14,TIM_IT_CC1)!=RESET) { } 進不了
回復

使用道具 舉報

板凳
ID:311400 發(fā)表于 2021-9-2 16:44 | 只看該作者
芯片是stm32f030f4p6請教下大家
回復

使用道具 舉報

地板
ID:891041 發(fā)表于 2021-9-2 19:18 | 只看該作者
我不太明白 是要用TIM3還是TIM14  注釋也全是TIM3的 卻用了TIM14  
GPIO_PinAFConfig(GPIOA, GPIO_PinSource6, GPIO_AF_1);是TIM3的
回復

使用道具 舉報

5#
ID:311400 發(fā)表于 2021-9-2 20:12 來自手機 | 只看該作者
原本就是用Tim3的可以正常使用,但我改為Tim14卻用不了,可能是我沒改對
回復

使用道具 舉報

6#
ID:311400 發(fā)表于 2021-9-3 09:20 | 只看該作者
abob 發(fā)表于 2021-9-2 19:18
我不太明白 是要用TIM3還是TIM14  注釋也全是TIM3的 卻用了TIM14  
GPIO_PinAFConfig(GPIOA, GPIO_PinSour ...

謝謝。改這里就好了GPIO_PinAFConfig(IR_PORT, GPIO_PinSource4, GPIO_AF_4);
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久久久久久久久久久一区二区 | 欧美a区| 日韩av电影院 | 免费在线观看一区二区 | 欧美国产日韩在线观看成人 | 午夜欧美a级理论片915影院 | 99久久精品免费看国产四区 | 欧美黄色免费网站 | 久久久久久亚洲精品 | av中文字幕在线观看 | 亚洲a在线观看 | 日韩一级精品视频在线观看 | 国产一级在线 | 日韩一区二区在线免费观看 | 2021狠狠天天天 | 久草久草久草 | 91视频在线观看 | 国产一区二区观看 | 国产电影精品久久 | 国产日韩欧美在线 | 天堂亚洲 | 黄色在线 | www.青青草 | 国产精品一码二码三码在线 | 一区二区三区欧美大片 | 精品视频一区二区三区在线观看 | 国产一级视频在线观看 | 国产免费一区二区 | 久久国产综合 | 狠狠干影院 | 日本在线视频不卡 | 日韩欧美一区二区三区四区 | www日日日 | 99视频在线| 一区二区三区高清不卡 | 中文字幕一区二区三区精彩视频 | 久久久国产一区二区三区 | 特黄毛片视频 | 国产精品久久久久久久久久 | 国产一级一级毛片 | 爱操av|