国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

查看: 20882|回復(fù): 12
打印 上一主題 下一主題

STM32F072B_DISCOVERY開發(fā)板飛利浦RC-5(SAA3010)協(xié)議紅外遙控器解碼源程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2014-3-17 23:53:40 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
      基于免費(fèi)申請(qǐng)的STM32F072B_DISCOVERY開發(fā)板 對(duì)常用飛利浦RC-5(SAA3010)協(xié)議紅外遙控器解碼的測試,附源碼供有需要的朋友參考。
SAA3010是使用RC-5編碼,有2位起始位、1位控制位、系統(tǒng)碼占5位、指令碼占6位, 一幀數(shù)據(jù)共占14位。其控制位每按一次
按鍵便會(huì)翻轉(zhuǎn)一次,在編制發(fā)射程序的時(shí)候一定要注意。
電路連接很簡單說明如下。
腳連接說明:
1、串口使用STM32F072B_DISCOVERY開發(fā)板的USART1,管腳接PA9(TX)、PA10(RX)。
2、一體化紅外接收頭數(shù)據(jù)輸出端連接STM32F072B_DISCOVERY開發(fā)板的PA8管腳。

功能說明:
       紅外遙控器的發(fā)射信號(hào)經(jīng)一體化紅外接收頭數(shù)據(jù)端輸出,由STM32F072B_DISCOVERY開發(fā)板的PA8端口采樣(PA8配置為外部中斷下降沿觸發(fā)),由SysTick系統(tǒng)滴答定時(shí)器延時(shí)每20us采集一次,通過計(jì)數(shù)的方式得到一幀的所有低電平時(shí)間、高電平時(shí)間。通過對(duì)高、低電平時(shí)間的長短分析得出數(shù)據(jù)碼IrDA_receive_Code,使用printf語句由《串口調(diào)試助手》顯示RC-5紅外編碼格式的14位編碼。
       系統(tǒng)上電后LED3(紅色)閃爍,已說明接收系統(tǒng)正在運(yùn)行中。按遙控按鍵,LED4(橙色)點(diǎn)亮,說明已進(jìn)入中斷解碼,解碼完成后LED4(橙色)熄滅。
中斷函數(shù)如下(其他部分與NEC解碼基本相同。請(qǐng)參閱
STM32F072B_DISCOVERY開發(fā)板NEC紅外編碼格式解碼程序源碼
http://m.qingdxww.cn/thread-127802-1-1.html
  1. //////////PA8外部中斷函數(shù)//////////////////////////////////////////////////////////////
  2. void EXTI4_15_IRQHandler(void)
  3. {
  4.         u8 Data;
  5.         u8 flag=0;                  //進(jìn)入低電平時(shí)間為1.688ms(TimL>=75 && TimL<=90)標(biāo)志:flag=1

  6.         if(EXTI_GetITStatus(EXTI_Line8) != RESET)
  7.   {
  8.     /* Toggle LED4 */
  9.     GPIO_SetBits(GPIOC, GPIO_Pin_8);
  10.                 TimL=IrDA_receive_timeL();//獲得第一個(gè)低電平時(shí)間
  11.                 TimH=IrDA_receive_timeH();//獲得第一個(gè)高電平時(shí)間
  12.                
  13.                 if(TimL>=35 && TimL<49 && TimH>=35 && TimH<49)        //TimL、TimH:0.7ms--0.98ms(標(biāo)準(zhǔn):0.844ms)
  14.                 {
  15.                         IrDA_receive_Code=1;        //RC-5編碼判斷低電平獲得數(shù)據(jù),第一位起始碼為1                                       
  16.                         while(1)                                          
  17.                         {
  18.                                 if(IrDA_IN==0)
  19.                                 {
  20.                                         TimL=IrDA_receive_timeL();//獲得此次低電平時(shí)間
  21. /******************************************************************************/                                       
  22.                 //RC-5編碼一位數(shù)據(jù):“1”接收為:先高電平0.844ms+低電平0.844ms
  23.                 //RC-5編碼一位數(shù)據(jù):“0”接收為:先低電平0.844ms+高電平0.844ms
  24.                 //如果接收的低電平為1.688ms,則說明接收了一個(gè)高電平和一個(gè)低電平,即數(shù)據(jù)位2
  25.                 //只有前次低電平時(shí)間為1.688ms(TimL>=75 && TimL<=90),后面的短的低電平為“0”,其他情況均為“1”
  26. /******************************************************************************/
  27.                                         if(TimL>=35 && TimL<=49)        //0.7ms--0.98ms(標(biāo)準(zhǔn):0.844ms)
  28.                                         {
  29.                                                 if(flag==1)
  30.                                                 {
  31.                                                         Data=0;//收到數(shù)據(jù) 0
  32.                                                         IrDA_receive_Code<<=1;
  33.                                                         IrDA_receive_Code+=Data;                                
  34.                                                 }
  35.                                                 else
  36.                                                 {
  37.                                                         Data=1;//收到數(shù)據(jù) 1
  38.                                                         IrDA_receive_Code<<=1;
  39.                                                         IrDA_receive_Code+=Data;
  40.                                                 }
  41.                                         }
  42.                                         else if(TimL>=75 && TimL<=90) //1.5ms--1.8ms(標(biāo)準(zhǔn):1.688ms)
  43.                                         {
  44.                                                 flag=1;
  45.                                                 Data=2;//收到兩位數(shù)據(jù)1和0,即 2
  46.                                                 IrDA_receive_Code<<=2;          //數(shù)據(jù)碼左移2位
  47.                                                 IrDA_receive_Code+=Data;
  48.                                         }
  49.                                         else                        //信號(hào)異常(可能是干擾)
  50.                                         {
  51.                                                 printf("紅外編碼接收異常,請(qǐng)重按遙控按鍵 TIMEL=%d\r\n",TimL);
  52.                                                 break;
  53.                                         }               

  54.                                 }
  55.                                 if(IrDA_IN==1)
  56.                                 {
  57.                                         TimH=IrDA_receive_timeH();//獲得此高低電平時(shí)間
  58.                                         if(TimH>=75 && TimH<=90) flag=0;                                 
  59.                                         if(TimH>=1800)        //末位高電平時(shí)間超過36ms說明解碼完成,退出解碼循環(huán)
  60.                                         {

  61.                                                 IrDA_receive_flag=1;
  62. //                                                printf("接收RC-5編碼為   :%X\r\n",IrDA_receive_Code);
  63.                                                 break;
  64.                                         }
  65.                                 }                                
  66.                         }               
  67.                 }
  68.                 else
  69.                 {
  70.                         printf("非RC-5編碼\r\n");
  71.                 }
  72.         }
  73.         delay_ms(500);//延時(shí)-防止按鍵時(shí)間過長,再次進(jìn)入中斷
  74.         GPIO_ResetBits(GPIOC, GPIO_Pin_8);
  75. //         EXTI->PR=1<<8;  //清除LINE8上的中斷標(biāo)志位
  76.         /* Clear the EXTI line 8 pending bit */
  77.         EXTI_ClearITPendingBit(EXTI_Line8);
  78. //        EXTI->IMR&=0XFFFFFEFF;;//  關(guān)閉line8 BITx上的中斷(此為紅外中斷)
  79. }
復(fù)制代碼

系統(tǒng)時(shí)鐘配置:
采用內(nèi)部HSI(8Mhz)作為時(shí)鐘源,經(jīng)PLL6倍頻到48Mhz輸出。AHB clock = SYSCLK、APB clock = HCLK
注:如不配置,采用系統(tǒng)默認(rèn)的HSI(8Mhz)時(shí)鐘,由于指令周期長了(指令周期占用時(shí)間長)采集出的時(shí)間與實(shí)際偏差較大。

附件: 使用MDK-ARM 5.10編譯
RC5紅外解碼.rar (1.93 MB)


沙發(fā)
發(fā)表于 2014-3-18 10:39:41 | 只看該作者
感謝分享啊,好東西啊!!!!
板凳
發(fā)表于 2014-3-20 12:22:27 | 只看該作者
感謝分享
地板
發(fā)表于 2014-3-22 10:31:43 | 只看該作者
感謝樓主 ! 編譯器用的是keil哪個(gè)版本? 我的版本怎么沒有stm32f072的
地下室
發(fā)表于 2014-3-22 17:50:36 | 只看該作者
多謝分享啊
6
發(fā)表于 2014-3-22 17:53:18 | 只看該作者
qqfishbaby 發(fā)表于 2014-3-22 10:31
感謝樓主 ! 編譯器用的是keil哪個(gè)版本? 我的版本怎么沒有stm32f072的

看這個(gè)帖子http://m.qingdxww.cn/thread-127306-1-1.html
MDK5.1中有
7
 樓主| 發(fā)表于 2014-3-22 21:10:19 | 只看該作者
qqfishbaby 發(fā)表于 2014-3-22 10:31
感謝樓主 ! 編譯器用的是keil哪個(gè)版本? 我的版本怎么沒有stm32f072的

使用MDK-ARM 5.10編譯。六樓的鏈接有下載地址。
8
發(fā)表于 2014-7-3 09:44:56 | 只看該作者
這種帖子一定要支持!!
9
發(fā)表于 2014-7-19 00:18:02 | 只看該作者
感謝樓主分享。。。
10
發(fā)表于 2014-8-6 16:26:39 | 只看該作者
樓主辛苦了!
11
發(fā)表于 2015-7-13 14:32:53 | 只看該作者
很不錯(cuò),樓主辛苦了
12
發(fā)表于 2015-12-6 19:57:45 | 只看該作者
感謝樓主 !學(xué)習(xí)中,,,
13
發(fā)表于 2018-5-10 19:06:22 | 只看該作者
感謝分享,支持樓主
您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號(hào) | 京公網(wǎng)安備11010502021702
快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲天堂网站| 亚洲激情视频图片| 秋霞免费理论片鲁丝在线观看| 欧美一级在线免费观看| 五月激情久久| 人人干狠狠干| 青草视频在线观看免费| 亚洲情欲网| 亚洲国产午夜看片| 亚洲福利在线视频| 色中文字幕在线| 日本精品久久久| 天堂中文字幕在线| 四虎国产精品高清在线观看| 性做久久久久久久久男女| 亚洲精品宾馆在线精品酒店| 亚洲国产成人综合精品2020| 亚洲色图综合网| 天天在线免费视频| 亚洲精品欧美日本中文字幕| 人妖一区| 亚洲一区二区三区免费| 亚洲综合国产一区二区三区| 日韩精品中文字幕一区三区| 亚洲自拍小说| 日韩精品一区在线| 青青青在线视频播放| 日本亚州视频在线八a| 欧美一级做一级做片性十三| 亚洲欧美日韩不卡| 日韩在线免费| 青青青国产成人久久111网站| 欧美一级xxxx俄罗斯一级| 欧美日韩在线影院| 亚洲免费视频一区二区三区| 一二三区在线视频| 天天干伊人| 午夜特级毛片| 日本在线亚州精品视频在线| 亚洲免费观看视频| 亚洲欧美日韩综合网导航|