ndfweb.cn

STM32-Arduino示例程序HardwareTimerOnePulseMode脉冲模式


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


/*

 * 计时器输入捕获模式 联合 脉冲模式

 * - 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网站建设淘宝店 | 实用工具 | 外貿網站建設 | 联系我们
鲁公网安备 37110202000336号 鲁ICP备2021027697号-1 Sitemap - RSSRSS订阅