Код: Выделить всё
void TIM3_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
/* TIM GPIO Configuration */
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
/* GPIOA Configuration: TIM3 CH1 (PA6) */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
/* Connect TIM Channels to AF1 */
GPIO_PinAFConfig(GPIOA, GPIO_PinSource6, GPIO_AF_1);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);
/* Time Base configuration */
TIM_TimeBaseStructure.TIM_Prescaler = (SystemCoreClock/200000)-1;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseStructure.TIM_Period = 0;//tones_array[0].note;
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
TIM_OCStructInit(&TIM_OCInitStructure);
/* TIM3 Channel 1 Configuration in PWM mode */
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse = 0;//tones_array[0].note/2;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Reset;
TIM_OC1Init(TIM3, &TIM_OCInitStructure);
TIM_Cmd(TIM3, ENABLE);
}
void TIM3_IRQHandler(void) //
{
i_temp++;
TIM_ClearITPendingBit(TIM3, TIM_TS_ITR0);
TIM3->SR &= ~TIM_SR_TIF; // clear the UIF flag
}
void SysTick_Handler(void)
{
i_temp++;
}
//=========
#define B2 4186
#define C3 3951
#define C_3 3729
#define Db3 3729
#define D3 3440
#define D_3 3332
#define Eb3 3332
#define E3 3136
#define F3 2960
#define F_3 2794
#define Gb3 2794
#define G3 2637
#define G_3 2489
#define Ab3 2489
#define A3 2349
#define A_3 2217
#define Bb3 2217
#define B3 2093
#define C4 1975
#define C_4 1865
#define Db4 1865
#define D4 1720
#define D_4 1661
#define Eb4 1661
#define E4 1568
#define F4 1480
#define F_4 1396
#define Gb4 1396
#define G4 1318
#define G_4 1244
#define Ab4 1244
#define A4 1175
#define A_4 1109
#define Bb4 1109
#define B4 1047
#define C5 988
#define C_5 932
#define Db5 932
#define D5 880
#define D_5 830
#define Eb5 830
#define E5 784
#define F5 740
#define F_5 698
#define Gb5 698
#define G5 659
#define G_5 622
#define Ab5 622
#define A5 587
#define A_5 554
#define Bb5 554
#define B5 523
#define C6 494
#define C_6 466
#define Db6 466
#define D6 440
#define D_6 415
#define Eb6 415
#define E6 392
#define F6 370
#define F_6 349
#define Gb6 349
#define G6 330
#define G_6 311
#define Ab6 311
#define A6 293
#define A_6 277
#define Bb6 277
#define B6 261
#define C7 247
#define C_7 233
#define Db7 233
#define D7 220
#define D_7 207
#define Eb7 207
#define E7 196
#define F7 185
#define F_7 174
#define Gb7 174
#define G7 164
#define G_7 156
#define Ab7 156
#define A7 148
#define A_7 139
#define Bb7 139
#define B7 131
unsigned int P [3][27]={
{
0, 70, 130, 220, 250, 310, 370, 485, 550, 610, 685, 720, 785, 960, 1025,
1080, 1140, 1200, 1265, 1320, 1440, 1500, 1560, 1650, 1680, 1745, 1745
},
{
E5, E5, E6, B5, D6, C6, A5, G5, G5, G6, F6, F6, E6, G6, F6, D6, B5, F6,
E6, E6, E5, E5, E6, G_5, B5, A5, 0
},
{
20, 70, 95, 25, 20, 20, 125, 20, 65, 90, 20, 75, 175, 75, 15, 15, 20, 75, 15, 125,
20, 75, 90, 30, 20, 175, 0
}
};
unsigned int Vech[3][37]={
{
60, 540, 1020, 1500, 1980, 2940, 3420, 3900, 4860, 5820, 7740, 8220,
8700, 9180, 9660, 10620, 11100, 11580, 13500, 14460, 15420, 15900,
16380, 18300, 18780, 19260, 19740, 20220, 22140, 22620, 23100,
24060, 24540, 25020, 25980, 26940, 26940
},
{
C5, Eb5, G5, Eb5, F5, Eb5, D5, G5, F5, C5, Eb5, G5, Bb5, Bb5, C6,
Bb5, G_5, G5, A5, B5, D6, C6, G5, D5, C5, G5, F5, G_5, Bb5, G_5,
G5, F5, Eb5, G5, F5, C5, 0
},
{
480, 480, 480, 480, 960, 480, 480, 960, 960, 1920, 480, 500,
480, 517, 960, 480, 480, 1920, 960, 960, 480, 480, 1920, 480,
480, 480, 480, 2063, 480, 480, 960, 505, 480, 996, 991, 1920, 0
}
};
void nota2 (unsigned int ton, unsigned int dlit, unsigned int pause)
{
TIM3->CNT = 0;
TIM3->ARR = (uint16_t)(ton);
TIM3->CCR1 = (uint16_t)((ton)/2);
unsigned int k=0, d;
i_temp=0;
d=dlit;
dlit=(dlit*95)/100;
while (i_temp<dlit)
{
__delay_cycles(10);
}
/*
for (k=0; k<pause; k++)
{
__delay_cycles(10);
}*/
}
main
{
TIM3_Config();
if (SysTick_Config(SystemCoreClock/2000-1))
{ while(1){;} }
while(1)
{
for (i=0; i<36; i++)
{
nota2(Vech[1][i]/3, Vech[2][i]/3, (Vech[0][i+1]-Vech[0][i])/3);//Vechera
}
for (i=0; i<26; i++)
{
nota2(P[1][i]/2, (P[2][i]*35)/10, ((P[0][i+1]-P[0][i])*35)/10);//Prostokvashino
}
}
}