初级会员

- 积分
- 102
- 金钱
- 102
- 注册时间
- 2014-7-23
- 在线时间
- 1 小时
|
5金钱
最近小弟在做红外编码,用PWM产生38khz载波,通过延时控制pwm的开关实现编码发送,可是怎么都没有接收,不知道哪里出了问题,原子哥和大家有这方面的例子吗,具体如何产生载波,占空比是多少,如何控制0,1的发送等等问题,我不知道问题出在哪里
PWM产生:
void TIM4_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
/* TIM4 clock enable */
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);
/* GPIOD Configuration: TIM4 CH1 (PD12) */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOD, &GPIO_InitStructure);
GPIO_PinRemapConfig(GPIO_Remap_TIM4 , ENABLE);
TIM_DeInit(TIM4);
/* Time base configuration */
TIM_TimeBaseStructure.TIM_Period = 1894;//38KHZ
TIM_TimeBaseStructure.TIM_Prescaler = 0;
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; ///
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse = 631; //占空比1:3 ///
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OC1Init(TIM4, &TIM_OCInitStructure);
TIM_OC1PreloadConfig(TIM4, TIM_OCPreload_Enable);
TIM_ARRPreloadConfig(TIM4, ENABLE);
TIM_Cmd(TIM4, ENABLE);
}
//引导码及逻辑0和逻辑1函数
void BootCode(TIM_TypeDef * TIMx)
{
TIM_Cmd(TIMx, ENABLE);
// ModeChange(PWM);
delay_ms(9);
TIM_Cmd(TIMx, DISABLE);
// ModeChange(Low);
delay_us(4500);
}
void Logic_One(TIM_TypeDef * TIMx)
{
ModeChange(PWM);
TIM_Cmd(TIMx, ENABLE);
delay_us(565);//656
TIM_Cmd(TIMx, DISABLE);
ModeChange(Low);
delay_us(1695);//1640
}
void Logic_Zero(TIM_TypeDef * TIMx)
{
ModeChange(PWM);
TIM_Cmd(TIMx, ENABLE);
delay_us(565);//656
TIM_Cmd(TIMx, DISABLE);
ModeChange(Low);
delay_us(565);//544
}
void ModeChange(u32 mode)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);
if(mode==PWM)
{
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOD, &GPIO_InitStructure);
GPIO_PinRemapConfig(GPIO_Remap_TIM4 , ENABLE);
}
else
{
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOD, &GPIO_InitStructure);
GPIO_ResetBits(GPIOD,GPIO_Pin_12);
}
}
各位帮助一下,困惑了很多天了
|
|