[mw_shl_code=c,true]#include"TIMER.h"
#include"led.h"
void TIM1_PWM_Init(u16 arr,u16 psc)
{
RCC->APB2ENR|=1<11; //outside clock enable
GPIOA->CRH&=0XFFFFFFF0; //clear gpioa
GPIOA->CRH|=0X0000000B; //multiplexing output
TIM1->ARR=arr;
TIM1->  SC=psc;
TIM1->CCMR1|=7<<4;
TIM1->CCMR1|=1<<3;
TIM1->CCER|=1<<0; //ENABLE ch1
TIM1->BDTR|=1<<15; //high timer MOE
TIM1->CR1=0X0080; //APRE enable
TIM1->CR1|=1<<0; //TIMER ENABLE
}
void TIM3_Init(u16 arr,u16 psc)
{
RCC->APB1ENR|=1<<1; //outside clock enable
TIM3->ARR=arr;
TIM3->  SC=psc;
TIM3->DIER|=1<<0; //up to date enable interrupt
TIM3->CR1|=1<<0; //enable
MY_NVIC_Init(1,3,TIM3_IRQn,2);
}
void TIM3_IRQHandler()
{
if(TIM3->SR&0X0001) //go to interrupt
LED1=!LED1;
TIM3->SR=0X00; //clear interrupt flag
}
#ifndef _TIMER_H
#define _TIMER_H
#include"sys.h"
#define led0_PWM_val TIM1->CCR1
void TIM3_Init(u16 arr,u16 psc);
void TIM1_PWM_Init(u16 arr,u16 psc);
#endif[/mw_shl_code]
[mw_shl_code=c,true]
#include<sys.h>
#include<usart.h>
#include<delay.h>
#include<LED.h>
#include<TIMER.h>
int main(void)
{
u16 led0val=0;
u8 dir=0;
Stm32_Clock_Init(9); //set system clock
delay_init(72); //delay init
LED_Init();
// TIM3_Init(4999,7199); //(arr+1)*(psc+1)/72M
TIM1_PWM_Init(899,0); //80K
while(1)
{
delay_ms(5);
/* led0val++;
if(led0val==300)
led0val=0;
led0_PWM_val=led0val;
*/
if(dir)
led0val++;
else led0val--;
if(led0val>300)
dir=0;
if(led0val==0)
dir=1;
led0_PWM_val=led0val;
}
}
[/mw_shl_code]
|