第一次發(fā): 本來使用飛控做遙控船,后來想取水。于是使用stm32定時器2通道捕獲飛控通道的pwm波通過遙控器控制取水一分鐘后關(guān)閉。
單片機源程序如下:
- #include "led.h"
- #include "delay.h"
- #include "key.h"
- #include "sys.h"
- #include "usart.h"
- #include "timer.h"
- extern u8 TIM2CH1_CAPTURE_STA; //輸入捕獲狀態(tài) 定時器5通道1
- extern u16 TIM2CH1_CAPTURE_VAL; //輸入捕獲值
- extern u8 a;
- int main(void)
- {
- u32 temp=0;
-
- delay_init(); //延時函數(shù)初始化
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //設(shè)置NVIC中斷分組2:2位搶占優(yōu)先級,2位響應優(yōu)先級
- uart_init(115200); //串口初始化為115200
- LED_Init(); //LED端口初始化
-
- TIM3_Int_Init(65535,65535);//定時59s
- TIM2_Cap_Init(0XFFFF,71); //以1Mhz的頻率計數(shù)
- while(1)
- {
- delay_ms(10);
- if(TIM2CH1_CAPTURE_STA&0X80)//成功捕獲到了一次上升沿
- {
- temp=TIM2CH1_CAPTURE_STA&0X3F;
- temp*=65536;//溢出時間總和
- temp+=TIM2CH1_CAPTURE_VAL;//得到總的高電平時間
-
- if(a==0&&temp>=1800)
- {
- delay_ms(10);
- if(a==0&&temp>=1800)
- {
-
- GPIO_SetBits(GPIOA,GPIO_Pin_4); //PB.4 輸出低觸發(fā)吸水
- GPIO_SetBits(GPIOA,GPIO_Pin_5); //PB.5 輸出低觸發(fā)吸水
- delay_ms(100);
- a=1;
-
- TIM_ClearITPendingBit(TIM3, TIM_IT_Update ); //清除TIMx的中斷待處理位:TIM 中斷源
- TIM_SetCounter(TIM3,0);//計數(shù)器清空
- TIM_Cmd(TIM3, ENABLE); //使能TIM3
- }
- }
-
- if(a==1&&temp<=1200)
- {
- delay_ms(10);
- if(a==1&&temp<=1200)
- {
- GPIO_ResetBits(GPIOA,GPIO_Pin_4); //PB.4 輸出高暫停
- GPIO_ResetBits(GPIOA,GPIO_Pin_5); //PB.5 輸出gao
- a=0;
- TIM_ClearITPendingBit(TIM3, TIM_IT_Update ); //清除TIMx的中斷待處理位:TIM 中斷源
- TIM_Cmd(TIM4, DISABLE);//關(guān)閉定時器4
- }
- }
- TIM2CH1_CAPTURE_STA=0;//開啟下一次捕獲
- }
-
- }
- }
復制代碼
所有資料51hei提供下載:
T2-ch2延時60s.7z
(189.06 KB, 下載次數(shù): 11)
2020-10-21 17:38 上傳
點擊文件名下載附件
定時器2通道2
|