mi mi / Mbed 2 deprecated FastPWM-DISCO-test

Dependencies:   FastPWM mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "FastPWM.h"
00003 
00004 /*  Those targets have been tested by this test program. 
00005  * DISCO_F051R8
00006  * DISCO_F100RB
00007  * DISCO_F303VC
00008  * DISCO_F407VG
00009  * NUCLEO_F030R8
00010  * NUCLEO_L152RE
00011  * NUCLEO_F411RE
00012  * 
00013  * with mbed library rev.113.
00014  */
00015 
00016 /* Period Interrupt monitor */
00017 DigitalOut led(LED1);       
00018 
00019 /* Using FastPWM library from:
00020  * http://developer.mbed.org/users/Sissors/code/FastPWM/
00021  * Thank you this library.
00022  */
00023 #define TPWM FastPWM
00024 
00025 #if    defined(TARGET_NUCLEO_F411RE) || defined(TARGET_NUCLEO_F401RE) \
00026     || defined(TARGET_DISCO_F303VC)  || defined(TARGET_DISCO_F407VG)
00027     TPWM pwm_left( PA_8,1);
00028 #if defined(TARGET_DISCO_F407VG)
00029     TPWM pwm_right(PA_10,1);
00030 #else
00031     TPWM pwm_right(PA_9,1);
00032 #endif
00033 /* Interrupt */ 
00034 #define TIM_PWM      TIM1
00035 #if defined(TARGET_DISCO_F303VC)
00036     #define TIM_PWM_IRQ  TIM1_UP_TIM16_IRQn
00037 #else
00038     #define TIM_PWM_IRQ  TIM1_UP_TIM10_IRQn
00039 #endif
00040 #elif  defined(TARGET_STM32F030R8) || defined(TARGET_STM32F051R8) \
00041     || defined(TARGET_STM32F100RB) || defined(TARGET_STM32L152RE) 
00042 /*  PWM3-1          D12           PA_6       Audio out Left
00043     PWM3-2          D11           PA_7       Audio out Right */
00044     TPWM pwm_left( PA_6,1);
00045     TPWM pwm_right(PA_7,1);
00046 /* Interrupt */ 
00047 #define TIM_PWM      TIM3
00048 #define TIM_PWM_IRQ  TIM3_IRQn
00049 #endif
00050 
00051 /* PWM Timer constant value */
00052 #define F_CLK_ABP1      (SystemCoreClock)   // 
00053 #define TIMER_INPUT_CLK  F_CLK_ABP1
00054 #define MAX_PERIOD      ( TIMER_INPUT_CLK / (44100) )   // fs=44.1kHz 
00055 #define MAX_DUTY        ( (int32_t)MAX_PERIOD )        // Audio resolution :
00056 #define DELAY_MS        2
00057 
00058 static TIM_HandleTypeDef TimHandle;
00059 
00060 /* PWM Timer Interrupt routine */
00061 void IntrPwmPeriod( void ){
00062     HAL_TIM_IRQHandler( &TimHandle );
00063 }
00064 
00065 /* HAL callback for PWM Timer Interrupt 
00066  * Test monitor 
00067  * */
00068 void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim){
00069     (void)htim;
00070     led = 1;
00071     led = 0;
00072 }
00073 
00074 int main() {
00075 
00076     TimHandle.Instance = TIM_PWM;
00077 
00078     int i =1, delta = 1;
00079 
00080     NVIC_SetVector( TIM_PWM_IRQ, (uint32_t)&IntrPwmPeriod );
00081 
00082     pwm_left.period_ticks(  MAX_PERIOD );
00083     pwm_right.period_ticks( MAX_PERIOD );
00084 
00085     NVIC_EnableIRQ( TIM_PWM_IRQ );
00086     __HAL_TIM_ENABLE_IT( &TimHandle, TIM_IT_UPDATE );
00087 
00088     while(1) {
00089         pwm_left.pulsewidth_ticks( i );
00090         pwm_right.pulsewidth_ticks( i/2 );
00091         if( ( i > MAX_DUTY-1 ) || ( i <= 0 ) ){
00092             delta *= -1;
00093         }
00094         i += delta; 
00095 
00096         wait_ms( DELAY_MS );
00097     }
00098 }
00099 
00100 
00101