STM32紅外的實現

2021-05-26 16:57:31 字數 2052 閱讀 1567

剛畢業不久,這可以說是我在公司做的第乙個專案吧,跟大家分享一下!一、環境:

公司所採用的是stm32f103rbt6晶元,本人開發是基於官方提供的v3.5.0的函式庫。

二、所要實現的功能是:

1.  開發板能夠學習由遙控器傳送來的紅外碼,並在串列埠上列印出來。

2.  上位機通過串列埠程式,傳送學習來的碼,可控制紅外裝置。

3.  傳送時共有四路,上位機傳送碼子時,可選擇通道。

三、實現:

0.  在寫功能之前先要對我們所用的模組和時鐘進行初始化。

(此部分 自己看手冊)

1.  開發板能夠學習由遙控器傳送來的紅外碼,並在串列埠上列印出來。

紅外的學習功能我是利用中斷+定時,來記錄紅外碼高低電平的時間長度,程式如下:

/********tim2本人設定的是技術一次為1us*************/

void exti9_5_irqhandler(void)

else

num++;}}

此部分**記錄了紅外高低電平的時長,並儲存在陣列ir_data中,在主程式while(1)裡可設定相應的標識列印出這些資料。

2.  上位機通過串列埠程式,傳送學習來的碼,可控制紅外裝置。

3.  傳送時共有四路,上位機傳送碼子時,可選擇通道。

二和三的功能我用乙個函式實現了,因為,功能三,只需要有相應的標識就行了,函式如下:

/*************tim2的設定通接受時是一樣的**************/

void send_irda(void)

}while(tim_getflagstatus(tim2, tim_flag_update) == reset);

tim_clearflag(tim2, tim_flag_update);

tim_cmd(tim2, disable); 

gpio_resetbits(gpiob, gpio_pin_1 | gpio_pin_12 | gpio_pin_13 | gpio_pin_14);

}想必大家看了**都知道了,我是利用最後乙個位元組選擇的傳送通道,具體是由函式中的switch語句實現的。

把儲存在陣列中的紅外碼通過定時器,還原出接受到得紅外碼子。

附:想必大家都知道紅外的傳送時需要載波訊號的,利用此晶元的pwm功能我也產生了38k的載波訊號,**如下:

tim_timebasestructure.tim_period = 210; 

tim_timebasestructure.tim_prescaler = 8;

tim_timebasestructure.tim_clockdivision = 0;

tim_timebasestructure.tim_countermode = tim_countermode_up;

tim_timebaseinit(tim3, &tim_timebasestructure);

tim_ocinitstructure.tim_ocmode = tim_ocmode_pwm1;

tim_ocinitstructure.tim_outputstate = tim_outputstate_enable;

tim_ocinitstructure.tim_pulse = 105;

tim_ocinitstructure.tim_ocpolarity = tim_ocpolarity_high;

tim_oc3init(tim3, &tim_ocinitstructure);

tim_oc3preloadconfig(tim3, tim_ocpreload_enable);

tim_arrpreloadconfig(tim3, enable);

tim_cmd(tim3, enable);

這部分其實看看晶元手冊,就知道了。

這個帖子是我的第乙個帖子,也是我進入公司後,做的第乙個比較像樣的東西,希望大家給給力,多頂頂。

同時,也希望這能為那些剛入門的新手提供點幫助。

STM32紅外的實現

剛畢業不久,這可以說是我在公司做的第乙個專案吧,跟大家分享一下!一 環境 公司所採用的是stm32f103rbt6晶元,本人開發是基於官方提供的v3.5.0的函式庫。二 所要實現的功能是 1.開發板能夠學習由遙控器傳送來的紅外碼,並在串列埠上列印出來。2.上位機通過串列埠程式,傳送學習來的碼,可控制...

STM32紅外尋跡小車

循跡模組我用的是紅外感測器。黑線的檢測原理是紅外發射管發射光線到路面,紅外光遇到白底則被反射,接收管接收到反射光,經施密特觸發器整形後輸出低電平 當紅外光遇到黑線時則被吸收,接收管沒有接收到反射光,經施密特觸發器整形後輸出高電平。簡單的說就是當紅外尋跡模板遇見黑線時會產生乙個高電平,遇見白線時會返回...

stm32紅外遙控的外部中斷實現

花了整整兩天時間終於算是基本把紅外解碼搞明白了,其實並不是很難,用了兩天時間,說來慚愧啊,原因就是細節上的問題,不過最終總算找出問題來了。使用外部中斷來解碼,就先對外部中斷進行配置吧 void exti init rcc apb2enr 1 0 使用外部中斷要開afio復用時鐘,因為要用到用到它的暫...