ndfweb.cn

STM32-Arduino示例程序HardwareTimerOnePulseMode脈衝模式


2020-02-23 02:32:23 (6503)



/*

 * 計時器輸入捕獲模式 聯合 脈衝模式

 * - Timer2 channel 1 捕獲輸入

 * - Timer2 channel 2 生成脈衝

 * - Timer 3為捕獲輸入生成一個PWM觸發信號 

 */


#include <Streaming.h>


const uint16_t pulseDelay = 200;

const uint16_t pulseWidth = 200;

//--------

void toggle_led()

{

digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));

}

//---------

void setup()

{

// setup PA1 (Timer2 channel 2) to PWM (one pulse mode)

pinMode(PA1, PWM);

// setup PA0 (Timer 2 channel 1) as input (capture input mode)

pinMode(PA0, INPUT);


//設置以前停止計時器

Timer2.pause();


Timer2.setPrescaleFactor(72); // 1 µs分辨率

Timer2.setCompare(TIMER_CH2, pulseDelay);

Timer2.setOverflow(pulseWidth + pulseDelay-1);


// counter setup in one pulse mode, as從屬觸發by TI1

TIMER2_BASE->CR1  = ( TIMER_CR1_OPM ); // one pulse mode

Timer2.setSlaveFlags( TIMER_SMCR_TS_TI1FP1 | TIMER_SMCR_SMS_TRIGGER );


// channel 1: capture input on 上升沿

Timer2.setMode(TIMER_CH1, TIMER_INPUT_CAPTURE);

//Timer2.setPolarity(TIMER_CH1, 1); //下降沿觸發

// channel 2: invert polarity(轉換極性) (we want low for CNT<CCR2)

Timer2.setPolarity(TIMER_CH2, 1);


// start timer 2

Timer2.refresh();

Timer2.resume(); // let timer 2 run


// setup PA6 (Timer3 channel 1) to 產生 1 ms period PWM with 10% DC

pinMode(PA6, PWM);

Timer3.pause();

Timer3.setPrescaleFactor(72); // 1 µs resolution

Timer3.setCompare(TIMER_CH1, 100);

Timer3.setOverflow(1000);

Timer3.refresh();

Timer3.resume(); // let timer 3 run

}


uint32_t t;

//-----------------------------------------------------------------------------

void loop()

{

if ( (millis()-t)>=1000 )

{

t = millis();

toggle_led();

}

}


本文版权:http://www.ndfweb.cn/news-780.html
  NDF俱乐部
  国际域名注册
  建站咨询
简体中文 NDF网站建设淘宝店 | ICO图标在线生成 | 外贸网站建设 | 联系我们
©2007-2025 NDF Corporation 鲁ICP备08005967号 Sitemap - RSSRSS订阅