單定時器的多通道捕獲程序,已經試驗 親測好用
實驗目的:
學習定時器的輸入捕獲功能
硬件資源:
1,DS0(連接在PB5)
2,KEY_UP按鍵(PA0)
3,定時器5(TIM5),TIM5的通道1(TIM5_CH1,連接在PA0上面),使用定時器的輸入捕獲功能來
捕捉PA0上面的高電平脈寬.
實驗現象:
本實驗利用TIM5_CH1來做輸入捕獲,我們將捕獲PA0上的高電平脈寬,并將脈寬時間通過串
口打印出來,大家可以通過按WK_UP按鍵,模擬輸入高電平。同時,本實驗將保留上一個實
驗的PWM輸出,DS0還是會由暗-->亮的循環變化,大家可以通過杜邦線連接PA0和PB5,來觀
測PWM輸出的高電平時間。
單片機源碼:
- #include "led.h"
- #include "delay.h"
- #include "key.h"
- #include "sys.h"
- #include "usart.h"
- #include "timer.h"
-
- extern u8 TIM5CH1_CAPTURE_STA; //輸入捕獲狀態
- extern u16 TIM5CH1_CAPTURE_VAL; //輸入捕獲值
- extern u8 TIM5CH2_CAPTURE_STA; //輸入捕獲狀態
- extern u16 TIM5CH2_CAPTURE_VAL; //輸入捕獲值
- extern u8 TIM5CH3_CAPTURE_STA; //輸入捕獲狀態
- extern u16 TIM5CH3_CAPTURE_VAL; //輸入捕獲值
- extern u8 TIM5CH4_CAPTURE_STA; //輸入捕獲狀態
- extern u16 TIM5CH4_CAPTURE_VAL; //輸入捕獲值
-
-
- int main(void)
- {
-
- delay_init(); //延時函數初始化
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //設置NVIC中斷分組2:2位搶占優先級,2位響應優先級
- uart_init(9600); //串口初始化為9600
- LED_Init(); //LED端口初始化
-
- //TIM3_PWM_Init(899,0); //不分頻。PWM頻率=72000/(899+1)=80Khz
- TIM5_Cap_Init(0XFFFF,72-1); //以1Mhz的頻率計數
- while(1)
- {
- LED0=!LED0;
- delay_ms(100);
- //TIM_SetCompare2(TIM3,TIM_GetCapture2(TIM3)+1);
- //if(TIM_GetCapture2(TIM3)==300)TIM_SetCompare2(TIM3,0);
-
- if(TIM5CH1_CAPTURE_STA&0X80)//成功捕獲到了一次上升沿 1
- {
-
-
- printf("0XFC,0X01,0XFD");//打印
- TIM5CH1_CAPTURE_STA=0;//開啟下一次捕獲
- }
-
- if(TIM5CH2_CAPTURE_STA&0X80)//成功捕獲到了一次上升沿 2
- {
-
- printf("0XFC,0X02,0XFE");//打印
- TIM5CH2_CAPTURE_STA=0;//開啟下一次捕獲
- }
-
- if(TIM5CH3_CAPTURE_STA&0X80)//成功捕獲到了一次上升沿 3
- {
-
- printf("0XFC,0X03,0XFF");//打印
- TIM5CH3_CAPTURE_STA=0;//開啟下一次捕獲
- }
-
- if(TIM5CH4_CAPTURE_STA&0X80)//成功捕獲到了一次上升沿 4
- {
- printf("0XFC,0X04,0X100");//打印
- TIM5CH4_CAPTURE_STA=0;//開啟下一次捕獲
- }
-
- }
- }
復制代碼
所有資料51hei提供下載:
實驗10 輸入捕獲實驗.rar
(289.22 KB, 下載次數: 66)
2018-5-19 04:25 上傳
點擊文件名下載附件
|