AnsweredAssumed Answered

PWM with Buzzer

Question asked by adnen.pupil_of_stone on May 16, 2012
Latest reply on May 23, 2012 by Clive One
Salut a tous, 
SVP quelqu'un peut m'aider, j'ai créer un application sur PWM de stm32f100rb pour générer une tonalité sur un buzzer, mais je sais pas comment générer les notes Do,Ré,Mi ...
svp quelqu'un peut me donner une conseille :
Code :
01.//#include "stm32f10x.h"
02.//#include "stm32f10x_gpio.h"
03.//#include "stm32f10x_rcc.h"
04.#include "stm32f10x_tim.h"
05. 
06. 
07. 
08.//Formule PWM
09.//tH : temps au niveau haut
10.//tB : temps au niveau bas
11.//T : tH + tB = période
12.//tH/T = rapport cyclique d'impulsion
13. 
14.void PWM(void) {
15. 
16.    GPIO_InitTypeDef GPIO_InitStructure;
17.    TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
18.    TIM_OCInitTypeDef TIM_OCInitStruct;
19. 
20.    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC | RCC_APB2Periph_AFIO, ENABLE);//APB2PeriphClockCmd
21.    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);//APB1PeriphClockCmd
22. 
23.    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9;//LED's
24.    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;//Alt Function Push Pull
25.    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
26.    GPIO_Init(GPIOC, &GPIO_InitStructure);
27.    GPIO_PinRemapConfig(GPIO_FullRemap_TIM3, ENABLE);//TIM3_CH3 vers GPIOC.Pin8, TIM3_CH4 vers GPIOC.Pin9 (voir datasheet)
28. 
29.    //Laisser la freque. de PWM  = 100Hz.
30.    //Laisser la période = 1000. Par conséquent, la minuterie fonctionne à partir de zéro à 1000, pour donner la résolution 0.1Hz.
31.    TIM_TimeBaseStructInit(&TIM_TimeBaseInitStruct);
32.    TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV4;
33.    TIM_TimeBaseInitStruct.TIM_Period = 1000 - 1; //0..999
34.    TIM_TimeBaseInit(TIM3, &TIM_TimeBaseInitStruct);
35. 
36.    TIM_OCStructInit(&TIM_OCInitStruct);
37.    TIM_OCInitStruct.TIM_OutputState = TIM_OutputState_Enable;
38.    TIM_OCInitStruct.TIM_OCMode = TIM_OCMode_PWM1;
39.    TIM_OCInitStruct.TIM_Pulse = 0; // 0 .. 1000 (0=Off, 1000=On) exemple 500 = 3.3v/2...
40. 
41.    TIM_OC2Init(TIM3, &TIM_OCInitStruct); // Channel 2 PC7 BUZZZZZZ
42.    TIM_OC3Init(TIM3, &TIM_OCInitStruct); // Channel 3 Blue LED
43.    TIM_OC4Init(TIM3, &TIM_OCInitStruct); // Channel 4 Green LED
44. 
45.    TIM_Cmd(TIM3, ENABLE);
46. 
47.}
48.int variation(int brightness) {
49.    PWM();
50.    int i;
51.//  if (brightness == 0 || brightness > 1000) {
52.//      brightness = 1;
53.//  }
54.    while (1) {
55.        brightness++;
56. 
57.        //TIM3->CCR2 = 100;
58.        TIM3->CCR3 = brightness;
59.        TIM3->CCR4 = brightness;
60. 
61.        for (i = 0; i < 9000; i++)
62.            ;
63. 
64.        if (brightness == 1000) {
65.        //TIM3->CCR2 = 100;
66.            brightness = 0;
67.        }
68. 
69. 
70.    }
71.}

Outcomes