Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
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
Generated on Sat Jul 16 2022 20:29:30 by
1.7.2