FastPWM test program.

Dependencies:   FastPWM mbed

Committer:
mimi3
Date:
Thu Feb 11 03:17:54 2016 +0000
Revision:
1:3ac9dab9a2cc
Parent:
0:e4a1dd15fa04
Mod: only comment.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mimi3 0:e4a1dd15fa04 1 #include "mbed.h"
mimi3 0:e4a1dd15fa04 2 #include "FastPWM.h"
mimi3 0:e4a1dd15fa04 3
mimi3 1:3ac9dab9a2cc 4 /* Those targets have been tested by this test program.
mimi3 0:e4a1dd15fa04 5 * DISCO_F051R8
mimi3 0:e4a1dd15fa04 6 * DISCO_F100RB
mimi3 0:e4a1dd15fa04 7 * DISCO_F303VC
mimi3 0:e4a1dd15fa04 8 * DISCO_F407VG
mimi3 0:e4a1dd15fa04 9 * NUCLEO_F030R8
mimi3 0:e4a1dd15fa04 10 * NUCLEO_L152RE
mimi3 0:e4a1dd15fa04 11 * NUCLEO_F411RE
mimi3 1:3ac9dab9a2cc 12 *
mimi3 1:3ac9dab9a2cc 13 * with mbed library rev.113.
mimi3 0:e4a1dd15fa04 14 */
mimi3 0:e4a1dd15fa04 15
mimi3 0:e4a1dd15fa04 16 /* Period Interrupt monitor */
mimi3 0:e4a1dd15fa04 17 DigitalOut led(LED1);
mimi3 0:e4a1dd15fa04 18
mimi3 0:e4a1dd15fa04 19 /* Using FastPWM library from:
mimi3 0:e4a1dd15fa04 20 * http://developer.mbed.org/users/Sissors/code/FastPWM/
mimi3 0:e4a1dd15fa04 21 * Thank you this library.
mimi3 0:e4a1dd15fa04 22 */
mimi3 0:e4a1dd15fa04 23 #define TPWM FastPWM
mimi3 0:e4a1dd15fa04 24
mimi3 0:e4a1dd15fa04 25 #if defined(TARGET_NUCLEO_F411RE) || defined(TARGET_NUCLEO_F401RE) \
mimi3 0:e4a1dd15fa04 26 || defined(TARGET_DISCO_F303VC) || defined(TARGET_DISCO_F407VG)
mimi3 0:e4a1dd15fa04 27 TPWM pwm_left( PA_8,1);
mimi3 0:e4a1dd15fa04 28 #if defined(TARGET_DISCO_F407VG)
mimi3 0:e4a1dd15fa04 29 TPWM pwm_right(PA_10,1);
mimi3 0:e4a1dd15fa04 30 #else
mimi3 0:e4a1dd15fa04 31 TPWM pwm_right(PA_9,1);
mimi3 0:e4a1dd15fa04 32 #endif
mimi3 0:e4a1dd15fa04 33 /* Interrupt */
mimi3 0:e4a1dd15fa04 34 #define TIM_PWM TIM1
mimi3 0:e4a1dd15fa04 35 #if defined(TARGET_DISCO_F303VC)
mimi3 0:e4a1dd15fa04 36 #define TIM_PWM_IRQ TIM1_UP_TIM16_IRQn
mimi3 0:e4a1dd15fa04 37 #else
mimi3 0:e4a1dd15fa04 38 #define TIM_PWM_IRQ TIM1_UP_TIM10_IRQn
mimi3 0:e4a1dd15fa04 39 #endif
mimi3 0:e4a1dd15fa04 40 #elif defined(TARGET_STM32F030R8) || defined(TARGET_STM32F051R8) \
mimi3 0:e4a1dd15fa04 41 || defined(TARGET_STM32F100RB) || defined(TARGET_STM32L152RE)
mimi3 0:e4a1dd15fa04 42 /* PWM3-1 D12 PA_6 Audio out Left
mimi3 0:e4a1dd15fa04 43 PWM3-2 D11 PA_7 Audio out Right */
mimi3 0:e4a1dd15fa04 44 TPWM pwm_left( PA_6,1);
mimi3 0:e4a1dd15fa04 45 TPWM pwm_right(PA_7,1);
mimi3 0:e4a1dd15fa04 46 /* Interrupt */
mimi3 0:e4a1dd15fa04 47 #define TIM_PWM TIM3
mimi3 0:e4a1dd15fa04 48 #define TIM_PWM_IRQ TIM3_IRQn
mimi3 0:e4a1dd15fa04 49 #endif
mimi3 0:e4a1dd15fa04 50
mimi3 0:e4a1dd15fa04 51 /* PWM Timer constant value */
mimi3 0:e4a1dd15fa04 52 #define F_CLK_ABP1 (SystemCoreClock) //
mimi3 0:e4a1dd15fa04 53 #define TIMER_INPUT_CLK F_CLK_ABP1
mimi3 0:e4a1dd15fa04 54 #define MAX_PERIOD ( TIMER_INPUT_CLK / (44100) ) // fs=44.1kHz
mimi3 0:e4a1dd15fa04 55 #define MAX_DUTY ( (int32_t)MAX_PERIOD ) // Audio resolution :
mimi3 0:e4a1dd15fa04 56 #define DELAY_MS 2
mimi3 0:e4a1dd15fa04 57
mimi3 0:e4a1dd15fa04 58 static TIM_HandleTypeDef TimHandle;
mimi3 0:e4a1dd15fa04 59
mimi3 0:e4a1dd15fa04 60 /* PWM Timer Interrupt routine */
mimi3 0:e4a1dd15fa04 61 void IntrPwmPeriod( void ){
mimi3 0:e4a1dd15fa04 62 HAL_TIM_IRQHandler( &TimHandle );
mimi3 0:e4a1dd15fa04 63 }
mimi3 0:e4a1dd15fa04 64
mimi3 0:e4a1dd15fa04 65 /* HAL callback for PWM Timer Interrupt
mimi3 0:e4a1dd15fa04 66 * Test monitor
mimi3 0:e4a1dd15fa04 67 * */
mimi3 0:e4a1dd15fa04 68 void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim){
mimi3 0:e4a1dd15fa04 69 (void)htim;
mimi3 0:e4a1dd15fa04 70 led = 1;
mimi3 0:e4a1dd15fa04 71 led = 0;
mimi3 0:e4a1dd15fa04 72 }
mimi3 0:e4a1dd15fa04 73
mimi3 0:e4a1dd15fa04 74 int main() {
mimi3 0:e4a1dd15fa04 75
mimi3 0:e4a1dd15fa04 76 TimHandle.Instance = TIM_PWM;
mimi3 0:e4a1dd15fa04 77
mimi3 0:e4a1dd15fa04 78 int i =1, delta = 1;
mimi3 0:e4a1dd15fa04 79
mimi3 0:e4a1dd15fa04 80 NVIC_SetVector( TIM_PWM_IRQ, (uint32_t)&IntrPwmPeriod );
mimi3 0:e4a1dd15fa04 81
mimi3 0:e4a1dd15fa04 82 pwm_left.period_ticks( MAX_PERIOD );
mimi3 0:e4a1dd15fa04 83 pwm_right.period_ticks( MAX_PERIOD );
mimi3 0:e4a1dd15fa04 84
mimi3 0:e4a1dd15fa04 85 NVIC_EnableIRQ( TIM_PWM_IRQ );
mimi3 0:e4a1dd15fa04 86 __HAL_TIM_ENABLE_IT( &TimHandle, TIM_IT_UPDATE );
mimi3 0:e4a1dd15fa04 87
mimi3 0:e4a1dd15fa04 88 while(1) {
mimi3 0:e4a1dd15fa04 89 pwm_left.pulsewidth_ticks( i );
mimi3 0:e4a1dd15fa04 90 pwm_right.pulsewidth_ticks( i/2 );
mimi3 0:e4a1dd15fa04 91 if( ( i > MAX_DUTY-1 ) || ( i <= 0 ) ){
mimi3 0:e4a1dd15fa04 92 delta *= -1;
mimi3 0:e4a1dd15fa04 93 }
mimi3 0:e4a1dd15fa04 94 i += delta;
mimi3 0:e4a1dd15fa04 95
mimi3 0:e4a1dd15fa04 96 wait_ms( DELAY_MS );
mimi3 0:e4a1dd15fa04 97 }
mimi3 0:e4a1dd15fa04 98 }
mimi3 0:e4a1dd15fa04 99
mimi3 0:e4a1dd15fa04 100
mimi3 0:e4a1dd15fa04 101