求助啊!!!!!!!!!!
各位帮帮忙啊!!!做四轴有一段时间了,但是最近在调试无线的时候却发现了一个比较棘手的问题。我在调试无线的时候发现,当STM32的定时器1发出四路占空比比较大的PWM波时,无线只在上电的一瞬间能收到数据后来就接受不到数据了(注:无线为24L01),但是如果我只发一路PWM波或者发四路但占空比很小的时候无线是能正常工作的。下面是部分的程序代码:STM32,通过24L01遥控控制四路PWM波的占空比:
//24L01遥控接收寄存器配置:
void RX_Mode(void)
{
nrf_baud=0; //默认速率2Mbps
MODE_CE(0);
SPI_Write_Buf(WRITE_REG1 + RX_ADDR_P0, TX_ADDRESS0, TX_ADR_WIDTH); ///数据通道0接收地址,最大5个字节, 此处接收地址和发送地址相同
SPI_RW_Reg(WRITE_REG1 + EN_AA, 0x01);
SPI_RW_Reg(WRITE_REG1 + EN_RXADDR, 0x01);
SPI_RW_Reg(WRITE_REG1 + RF_CH, 40);//40); // 选择射频工作频道0 范围0-127
SPI_RW_Reg(WRITE_REG1 + RF_SETUP, 0x07);///0x0f);
SPI_RW_Reg(WRITE_REG1 + RX_PW_P0, TX_PLOAD_WIDTH); // 接受通道有效字节数
SPI_RW_Reg(WRITE_REG1 + CONFIG, 0x0f);///3);
MODE_CE(1);
delay_ms(10);
}
//遥控中断处理程序:
void EXTI0_IRQHandler(void)
{
//GPIOB->BSRR = GPIO_Pin_8;
if(EXTI_GetITStatus(EXTI_Line0) != RESET) //判断是否产生了EXTI0中断
{
EXTI_ClearITPendingBit(EXTI_Line0); //清除EXTI0上的中断标志
if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)==0) //判断是否是PA0线变低
{
nrf_status=SPI_Read(READ_REG1+STATUS);
if(nrf_status&0x40)
{
//GPIOB->BSRR = GPIO_Pin_8;
SPI_Read_Buf(RD_RX_PLOAD,NRF_RX_Buff,TX_PLOAD_WIDTH);
nrf_status=SPI_Read(READ_REG1+FIFO_STATUS);
SPI_RW_Reg(FLUSH_RX,0);
flag_irq=1;
}
else if((nrf_status&0x20)>0)//发送完成中断
{ //GPIOB->BSRR = GPIO_Pin_8;
nrf_status=SPI_Read(READ_REG1+FIFO_STATUS);
SPI_RW_Reg(FLUSH_TX,0);
RX_Mode();
}
SPI_RW_Reg(WRITE_REG1+STATUS, 0xff); //清除07寄存器标志
}
}
// EXTI_ClearITPendingBit(EXTI_Line0);
}
//遥控中断配置:(//PA0配置为上拉输入模式)
void NVIC_Configuration(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
EXTI_InitTypeDef EXTI_InitStructure;
//设置中断向量表的存放位置和地址
NVIC_SetVectorTable(NVIC_VectTab_FLASH,0x0);
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn; //NRF24L01 中断响应
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //抢占优先级 0
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //子优先级为1
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能
NVIC_Init(&NVIC_InitStructure);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0); //NRF24L01 IRQPA0
EXTI_InitStructure.EXTI_Line = EXTI_Line0; //NRF24L01 IRQ PA0
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; //EXTI中断
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //下降沿触发
EXTI_InitStructure.EXTI_LineCmd = ENABLE; //使能
EXTI_Init(&EXTI_InitStructure);
}
//PWM配置:
void TIM_Configuration()
{
TIM_TimeBaseInitTypeDefTIM1_TimeBaseStructure;
TIM_OCInitTypeDefTIM1_OCInitStructure;
TIM_DeInit(TIM1);
/* Time Base configuration */
TIM1_TimeBaseStructure.TIM_Period = 3200-1;
TIM1_TimeBaseStructure.TIM_Prescaler = 0;
TIM1_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;//向上计数模式
TIM1_TimeBaseStructure.TIM_ClockDivision = 0x0;
TIM1_TimeBaseStructure.TIM_RepetitionCounter = 0x0;
TIM_TimeBaseInit(TIM1,&TIM1_TimeBaseStructure);
/* Channel 1, 2,3 and 4 Configuration in PWM mode */
TIM1_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //PWM1模式在TIM_Pluse时间内,且Polarity为低电平的时候输出为低电平
TIM1_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //正常通道打开
TIM1_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Disable; //互补通道关断
TIM1_OCInitStructure.TIM_Pulse = 0; ///20; //占空值
TIM1_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; ///Low; //输出极性
TIM1_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set;
TIM1_OCInitStructure.TIM_OCNIdleState = TIM_OCIdleState_Reset;
TIM_OC1Init(TIM1,&TIM1_OCInitStructure); //相应通道初始化,OC2Init是通道二初始化
TIM_OC2Init(TIM1,&TIM1_OCInitStructure);
TIM_OC3Init(TIM1,&TIM1_OCInitStructure);
TIM_OC4Init(TIM1,&TIM1_OCInitStructure);
TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);//使能预装载寄存器
TIM_OC2PreloadConfig(TIM1, TIM_OCPreload_Enable);//使能预装载寄存器
TIM_OC3PreloadConfig(TIM1, TIM_OCPreload_Enable);//使能预装载寄存器
TIM_OC4PreloadConfig(TIM1, TIM_OCPreload_Enable);//使能预装载寄存器
TIM_ARRPreloadConfig(TIM1, ENABLE); //使能ARR的预装载寄存器
/* TIM1 counter enable */
TIM_Cmd(TIM1,ENABLE); //定时器使能
/* Main Output Enable */
TIM_CtrlPWMOutputs(TIM1,ENABLE); //PWM输出使能
}
问题:PWM配置(0~3200)为100以下时一切正常,但占空比一升高24L01的中断就基本进不去,PWM失去控制,已经排除了硬件原因,是不是中断这里出问题了啊?各位谢谢啦!!! 将优先级调高点试试 xaper 发表于 2012-11-5 20:47 static/image/common/back.gif
将优先级调高点试试
优先级已经最高了啊!!不过谢谢啊!!
页:
[1]