中级会员
 
- 积分
- 204
- 金钱
- 204
- 注册时间
- 2021-5-31
- 在线时间
- 16 小时
|
5金钱
定时器4设置为8000Hz,定时器3输出wav,这样做是对的吗,如果错了我该怎么做
#define TIMER4_InV (2000) //65536-定时器4初值 2000=8kHz 363=44.1kHz
#define TIMER4_ReV (2000) //65536-定时器4重载值
#define TIMER_PWM (256) //65536-比较值(占空值) 8bit=256 16bit=65536
static int i=0;
void timer_init(void)
{
TIMER234_BaseInitTypedef TIM_TimeBaseStructure;
TIMER234_OCInitTypedef TIM_OCStructure;
RCC_Sccm1_ClockCmd(RCC_SCCM1_TIMER4,ENABLE);//定时器4时钟使能
RCC_Sccm1_ClockCmd(RCC_SCCM1_TIMER3,ENABLE);//定时器3时钟使能
RCC_Sccm1_ClockCmd(RCC_SCCM1_GPIO,ENABLE);
IO_FUN_Config(GPIO_P1,GPIO_Pin_2,GPIO_FUNCTION_AF3);//音频输出引脚P12
TIM_TimeBaseStructure.Timer_Mode=TIMER_MODE; //选择定时器模式
TIM_TimeBaseStructure.Timer_Prescaler=PRESCALER_12; //12分频
TIM_TimeBaseStructure.Timer_Reload=RELOAD_Mode0; //设置自动重载
TIM_TimeBaseStructure.Timer_ReloadValue=(65536-TIMER4_ReV); //设置定时器重装值
TIM_TimeBaseStructure.Timer_IntValue=(65536-TIMER4_InV); //设置定时器初值
TIMER234_TimeBaseInit(TIMER4,&TIM_TimeBaseStructure);
TIMER234_ModeSel(TIMER3,TIMER_MODE);//选择定时器3为定时器模式
TIMER234_SetPrescaler(TIMER3,PRESCALER_12);//12分频
TIMER234_ReloadModeSel(TIMER3,RELOAD_Mode0);//开启自动重载0
TIMER234_SetInitValue(TIMER3,65536-TIMER_PWM);//设置定时器初值
TIMER234_ReloadValue(TIMER3,65536-TIMER_PWM);//设置定时器重载值
TIM_OCStructure.Timer_OCMode=TIMER_OCMode_0; //比较模式0
TIM_OCStructure.Timer_OutputState=TIMER_OutputState_Enable; //比较输出使能
TIM_OCStructure.Timer_OutputNState=TIMER_OutputNState_Enable;//互补比较输出使能
// TIM_OCStructure.Timer_Pulse=TIMER_PWM; //比较值设置
TIM_OCStructure.Timer_OCPolarity=TIMER_OCPolarity_Low; //比较输出极性低到高
TIM_OCStructure.Timer_OCNPolarity=TIMER_OCNPolarity_Low; //互补比较输出极性高到底
TIMER234_OC_CRCInit(TIMER3,&TIM_OCStructure); //通道CRC输出使能配置
IRQ_Enbale(IT_TIMER4); //定时器4中断使能
IRQ_Enbale(IT_ALL); //总中断使能
}
void Interrupt_TIMER4 (void) interrupt 25 //TIMER4中断服务程序
{
if(i<8900)
{
TIMER234_SetCompareValue(TIMER3,TIMER_Channel_CRC,(65536-wavdata[i]));
i++;
}
else
{
i=0;
}
if(TIMER234_GetFlagStatus(TIMER4,TIMER_TF2)==1)//timer4溢出标志获取
{
TIMER234_ClearFlag(TIMER4,TIMER_TF2);
}
}
|
|