FastPWM test using NUCLEO_F411RE

Dependencies:   FastPWM mbed

Committer:
mimi3
Date:
Fri Oct 31 13:12:53 2014 +0000
Revision:
0:a91f9652671f
Child:
1:bb2f2609cbb2
Can not compile armcc, but gcc is ok.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mimi3 0:a91f9652671f 1 #include "mbed.h"
mimi3 0:a91f9652671f 2 #include "FastPWM.h"
mimi3 0:a91f9652671f 3
mimi3 0:a91f9652671f 4
mimi3 0:a91f9652671f 5 /* Period Interrupt monitor */
mimi3 0:a91f9652671f 6 DigitalOut led(LED1);
mimi3 0:a91f9652671f 7
mimi3 0:a91f9652671f 8 /* Use FastPWM library from
mimi3 0:a91f9652671f 9 * http://developer.mbed.org/users/Sissors/code/FastPWM/
mimi3 0:a91f9652671f 10 */
mimi3 0:a91f9652671f 11 #define TPWM FastPWM
mimi3 0:a91f9652671f 12 TPWM pwm1(PA_8,1);
mimi3 0:a91f9652671f 13 TPWM pwm2(PA_9,1);
mimi3 0:a91f9652671f 14
mimi3 0:a91f9652671f 15 /* PWM Timer constant value */
mimi3 0:a91f9652671f 16 #define F_CLK_ABP1 (100*1000000) // ABP1 TIM1 input clock is 100MHz
mimi3 0:a91f9652671f 17 #define TIME_INPUT_CLK F_CLK_ABP1
mimi3 0:a91f9652671f 18 #define MAX_PERIOD ( TIME_INPUT_CLK / (44100) ) // fs=44.1kHz
mimi3 0:a91f9652671f 19 #define MAX_DUTY ( 2048 ) // Audio resolution : 11bit
mimi3 0:a91f9652671f 20
mimi3 0:a91f9652671f 21 /* Interrupt */
mimi3 0:a91f9652671f 22 #define TIM_PWM TIM1
mimi3 0:a91f9652671f 23 #define TIM_PWM_IRQ TIM1_UP_TIM10_IRQn
mimi3 0:a91f9652671f 24
mimi3 0:a91f9652671f 25 #define DELAY_MS 1
mimi3 0:a91f9652671f 26
mimi3 0:a91f9652671f 27
mimi3 0:a91f9652671f 28 /* PWM Timer Interrupt routine */
mimi3 0:a91f9652671f 29 void IntrPwmPeriod( void ){
mimi3 0:a91f9652671f 30 HAL_TIM_IRQHandler( &TimHandle );
mimi3 0:a91f9652671f 31 }
mimi3 0:a91f9652671f 32
mimi3 0:a91f9652671f 33 /* HAL call back for PWM Timer Intrrupt
mimi3 0:a91f9652671f 34 * Test monitor
mimi3 0:a91f9652671f 35 * */
mimi3 0:a91f9652671f 36 void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim){
mimi3 0:a91f9652671f 37 led = 1;
mimi3 0:a91f9652671f 38 /* 1.3usec */
mimi3 0:a91f9652671f 39 led = 0;
mimi3 0:a91f9652671f 40 }
mimi3 0:a91f9652671f 41
mimi3 0:a91f9652671f 42 static TIM_HandleTypeDef TimHandle;
mimi3 0:a91f9652671f 43
mimi3 0:a91f9652671f 44 int main() {
mimi3 0:a91f9652671f 45
mimi3 0:a91f9652671f 46 TimHandle.Instance = TIM_PWM;
mimi3 0:a91f9652671f 47
mimi3 0:a91f9652671f 48 int i =1, delta = 1;
mimi3 0:a91f9652671f 49
mimi3 0:a91f9652671f 50 NVIC_SetVector( TIM_PWM_IRQ, (uint32_t)&IntrPwmPeriod );
mimi3 0:a91f9652671f 51
mimi3 0:a91f9652671f 52 pwm1.period_ticks( MAX_PERIOD );
mimi3 0:a91f9652671f 53 pwm2.period_ticks( MAX_PERIOD );
mimi3 0:a91f9652671f 54
mimi3 0:a91f9652671f 55 NVIC_EnableIRQ( TIM_PWM_IRQ );
mimi3 0:a91f9652671f 56 __HAL_TIM_ENABLE_IT( &TimHandle, TIM_IT_UPDATE );
mimi3 0:a91f9652671f 57
mimi3 0:a91f9652671f 58
mimi3 0:a91f9652671f 59 while(1) {
mimi3 0:a91f9652671f 60 pwm1.pulsewidth_ticks( i );
mimi3 0:a91f9652671f 61 pwm2.pulsewidth_ticks( i/2 );
mimi3 0:a91f9652671f 62 if( ( i >= MAX_DUTY ) || ( i <= 0 ) ){
mimi3 0:a91f9652671f 63 delta *= -1;
mimi3 0:a91f9652671f 64 }
mimi3 0:a91f9652671f 65 i += delta;
mimi3 0:a91f9652671f 66
mimi3 0:a91f9652671f 67 wait_ms( DELAY_MS );
mimi3 0:a91f9652671f 68 }
mimi3 0:a91f9652671f 69 }