在电机控制中,使用了TIM1进行50us定时,使用了USART1的中断与PC机通信,单独USART1中断程序与PC进行数据的接收以及单独定时中断产生PWM都是正确的,但两个中断都开的话,stm32接收PC机的数据是正确的,但向PC机发送数据却总有错误,怀疑是由于进入USART1中断处理的时候,又产生了定时器的中断,所以会使接收不正确。尝试着设置了一下NVIC中的中断优先级,但是尝试了几种0和1的组合,但是还是没有效果。特把程序贴出来请大家帮忙分析下,问题出在哪里?void nvic_conf(void){ NVIC_InitTypeDef NVIC_InitStructure;
NVIC_SetVectorTable(NVIC_VectTab_RAM,0x0); NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
///USART1 NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; //通道设置为串口1中断 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //中断占先等级0 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //中断响应优先级0 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //打开中断 NVIC_Init(&NVIC_InitStructure); //初始化
// tim1_it_update NVIC_InitStructure.NVIC_IRQChannel =TIM1_UP_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; NVIC_InitStructure.NVIC_IRQChannelSubPriority =1; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure);
}
void USART1_IRQHandler(void) //串口1中断{ u8 i=0; XintTicker3++; if (USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
{ USART_ClearITPendingBit(USART1, USART_IT_RXNE); //清除中断标志
RX_dat[0]=USART_ReceiveData(USART1) & 0x7F;
USART_SendData(USART1, 0x01);
while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET){}//等待发送结束
}
中断接收PC机的数据是正确的,但向PC机发送数据却时有错误,请教牛人指点!!!
此帖出自
小平头技术问答
一周热门 更多>