新手上路
- 积分
- 36
- 金钱
- 36
- 注册时间
- 2019-5-20
- 在线时间
- 7 小时
|

楼主 |
发表于 2019-7-29 16:37:46
|
显示全部楼层
/**
* @brief 配置嵌套向量中断控制器NVIC
* @param 无
* @retval 无
*/
static void NVIC2_Configuration(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
/* 嵌套向量中断控制器组选择 */
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
/* 配置USART为中断源 */
NVIC_InitStructure.NVIC_IRQChannel = MPU6050_USART_IRQ;
/* 抢断优先级为1 */
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
/* 子优先级为1 */
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;
/* 使能中断 */
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
/* 初始化配置NVIC */
NVIC_Init(&NVIC_InitStructure);
}
/**
* @brief 配置MPU6050串口中断
* @param 无
* @retval 无
*/
void MPU6050_USART_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
/* 嵌套向量中断控制器NVIC配置 */
NVIC2_Configuration();
RCC_AHB1PeriphClockCmd( MPU6050_USART_RX_GPIO_CLK, ENABLE);
/* Enable UART clock */
RCC_APB1PeriphClockCmd(MPU6050_USART_CLK, ENABLE);
/* Connect PXx to USARTx_Tx*/
GPIO_PinAFConfig(MPU6050_USART_RX_GPIO_PORT,MPU6050_USART_RX_SOURCE, MPU6050_USART_RX_AF);
/* Configure USART Rx as alternate function */
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Pin = MPU6050_USART_RX_PIN;
GPIO_Init(MPU6050_USART_RX_GPIO_PORT, &GPIO_InitStructure);
/* USART1 mode config */
USART_InitStructure.USART_BaudRate = MPU6050_USART_BAUDRATE;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_Parity = USART_Parity_No ;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Rx ;
USART_Init(MPU6050_USART, &USART_InitStructure);
/* 使能串口接收中断 */
USART_ITConfig(MPU6050_USART, USART_IT_RXNE, ENABLE);
USART_ClearITPendingBit(USART2,USART_IT_RXNE);
USART_Cmd(MPU6050_USART, ENABLE);
}
/*串口中断*/
void MPU6050_USART_IRQHandler(void)
{
// uint8_t ucTemp;
if(USART_GetITStatus(MPU6050_USART,USART_IT_RXNE)!=RESET)
{
// ucTemp = USART_ReceiveData( DEBUG_USART );
// USART_SendData(DEBUG_USART,ucTemp);
Temp[counter] = USART_ReceiveData(MPU6050_USART); //接收数据
if(counter == 0 && Temp[0] != 0x55) return; //第 0 号数据不是帧头,跳过
counter++;
if(counter==11) //接收到 11 个数据
{
memcpy(Re_buf,Temp,11);
counter=0; //重新赋值,准备下一帧数据的接收
sign=1;
}
}
}
void Data_config()
{
if(sign)
{
memcpy(Temp,Re_buf,11);
sign=0;
if(Re_buf[0]==0x55) //检查帧头
{
switch(Re_buf[1])
{
// case 0x51: //标识这个包是加速度包
// a[0] = ((short)(Temp[3]<<8 | Temp[2]))/32768.0*16; //X轴加速度
// a[1] = ((short)(Temp[5]<<8 | Temp[4]))/32768.0*16; //Y轴加速度
// a[2] = ((short)(Temp[7]<<8 | Temp[6]))/32768.0*16; //Z轴加速度
// T = ((short)(Temp[9]<<8 | Temp[8]))/340.0+36.25; //温度
// break;
// case 0x52: //标识这个包是角速度包
// w[0] = ((short)(Temp[3]<<8| Temp[2]))/32768.0*2000; //X轴角速度
// w[1] = ((short)(Temp[5]<<8| Temp[4]))/32768.0*2000; //Y轴角速度
// w[2] = ((short)(Temp[7]<<8| Temp[6]))/32768.0*2000; //Z轴角速度
// T = ((short)(Temp[9]<<8| Temp[8]))/340.0+36.25; //温度
// break;
case 0x53: //标识这个包是角度包
angle[0] = ((short)(Temp[3]<<8| Temp[2]))/32768.0*180; //X轴滚转角(x 轴)
angle[1] = ((short)(Temp[5]<<8| Temp[4]))/32768.0*180; //Y轴俯仰角(y 轴)
angle[2] = ((short)(Temp[7]<<8| Temp[6]))/32768.0*180; //Z轴偏航角(z 轴)
T = ((short)(Temp[9]<<8| Temp[8]))/340.0+36.25; //温度
// printf("X轴角度:%.2f Y轴角度:%.2f Z轴角度:%.2f\r\n",angle[0],angle[1],angle[2]);
break;
default: break;
}
// NIming_Debug(angle[1],angle[0],angle[2]);
}
}
// Delay_ms(50);
}
这是我新买的串口陀螺仪(以前的MPU6050也是串口发送一段就不发送了) |
|