mi mi
/
Nucleo_F411RE_FastPWM_TEST
FastPWM test using NUCLEO_F411RE
main.cpp@5:49cdad4cb5f1, 2015-04-10 (annotated)
- Committer:
- dinau
- Date:
- Fri Apr 10 14:42:46 2015 +0900
- Revision:
- 5:49cdad4cb5f1
- Parent:
- 4:43c125692e61
modified: comment spaces only
Who changed what in which revision?
User | Revision | Line number | New 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 | } |