FastPWM test using NUCLEO_F411RE

Dependencies:   FastPWM mbed

Committer:
mimi3
Date:
Fri Apr 10 11:20:54 2015 +0000
Revision:
6:e8daacb757be
Parent:
5:49cdad4cb5f1
update

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