本篇测试定时器的PWM功能,通过示波器观察占空比的变化不是很明显,所以做了一个呼吸灯。这个功能使用基本的定时器Ctimer就可以。在程序的开发过程中,第一步还是要先产生PWM信号,通过示波器能够观察到,第二步才是不断的修改占空比,来达到呼吸灯的效果。 闲言少叙,还是说说如何实现吧。 首先初始化引脚,要使用引脚的复用功能,如图1所示: - /* Ctimer0 Match 1; Red LED pin */
- IOCON_PinMuxSet(IOCON, 0, 29, IOCON_MODE_INACT | IOCON_FUNC7 | IOCON_DIGITAL_EN | IOCON_INPFILT_OFF);
复制代码
再次初始化时钟,初始化定时器,如图2所示: - void PWMchang(uint8_t pwmduty)
- {
- ctimer_config_t config;
- uint32_t srcClock_Hz;
- /* CTimer0 counter uses the AHB clock, some CTimer1 modules use the Aysnc clock */
- srcClock_Hz = CLOCK_GetFreq(kCLOCK_BusClk);
- CTIMER_GetDefaultConfig(&config);
- CTIMER_Init(CTIMER0, &config);
- CTIMER_SetupPwm(CTIMER0, kCTIMER_Match_1, pwmduty, 1000, srcClock_Hz, false);
- CTIMER_StartTimer(CTIMER0);
- }
复制代码
在while循环中实现不断改变信号的占空比,如图3所示: - duty-=1;
- CTIMER_SetupPwm(CTIMER0, kCTIMER_Match_1, duty, 1000, srcClock_Hz, false);
- // PWMchang(duty);
- Delay_nms(0xAFFFF);
- // Delay_nms(0xAFFFF);
- // Delay_nms(0xAFFFF);
- if(duty<=80)
- flag=0;
复制代码
最后效果如图4所示:
|