120mhz单片机
mpu6050的dmp很慢
主板得接收另一块板子发送的数据包(帧头+数据+帧尾)
主板需要定时读取dmp进行pid计算控制直立
硬件定时器5ms会导致串口接收错乱??
加长至1000ms左右数据才没问题
我有一个问题,systick中断优先级0x07
串口中断优先级0x00 为什么导致串口接收数据错误呢?
是因为系统时钟中断里关全局中断了吗
系统时钟0x07优先级
SysTick->LOAD = ticks - 1;
nvic_init(SysTick_IRQn, 7, ENABLE);
SysTick->VAL = 0;
SysTick->CTRL = 0x07;
串口中断0x00优先级
void uart_rx_irq(UARTN_enum uartn, uint32 status)
{
if(status)
uart_index[uartn]->IER |= UART_IER_RX; // 使能接收完成中断
else
uart_index[uartn]->IER &= ~(UART_IER_RX); // 关闭接收完成中断
nvic_init(uart_irq[uartn], 0x00, (FunctionalState)status);
}
5ms一次读取dmp角度
//------------------------角度环控制------------------------//
static void Pitch_Angle_Timer_CallBack(void *paramter)
{
mpu_dmp_get_data(&angle.DMP_pitch,&angle.DMP_roll,&angle.DMP_yaw);
angle.nowangle = static_angle + angle.DMP_pitch;
angle.tar_vel = Tar_PitchVel_Cal(angle.tar_angle,angle.nowangle*100);
}
串口接收中断接收数据包
void UART3_IRQHandler(void)
{
rt_interrupt_enter();
if(UART3->ISR & UART_ISR_TX_INTF) // 串口发送缓冲空中断
{
UART3->ICR |= UART_ICR_TXICLR; // 清除中断标志位
}
if(UART3->ISR & UART_ISR_RX_INTF) // 串口接收缓冲中断
{
//static unsigned char _data = 0;
//_data = (uart_index[UART_3])->RDR & 0x01FF;
camera_uart_callback();
//rt_mb_send(Cam_Mesage,_data);
//add_mesage(&cam_mesage,_data);
UART3->ICR |= UART_ICR_RXICLR; // 清除中断标志位
}
rt_interrupt_leave();
}
更多回帖