版主
最后登录1970-1-1
在线时间 小时
注册时间2016-7-16
|
本帖最后由 jiwangbujiu 于 2016-10-10 15:31 编辑
首先感谢野火团队对开源平衡车的赞助,以及各位大神的设计,让我们顺利完成了这款平衡车的硬件设计,并在张工的调试之后,下发到参与项目的人手中。帖子下面是车的玉照
我在拿到这个车之后的一段时间里,由于在忙其他的事情,所以并没有来得及编程,前几天抽出时间开始码这个车的程序,在过程中遇到了以下几个问题:
1、硬件IIC读取陀螺仪数据时,卡在读写时序里,经张工指导,问题出在MPU6050的地址上,地址应该设置为0XD0;
2、使用MPU6050的中断引脚发送数据ready中断到STM32的PD0,并进行数据读取时,发现数据无法读取,后来无意用手摸了一下开发板,发现突然有数据了,进而发现用手摸PA2的时候,会有数据。也就是用手触摸PA2时,会触发PD2的中断,一开始怀疑是用手摸的时候相当于给PA2一个接地电平,后来用导线一段连接地,一段触碰PA2时发现并不是接地的问题。当手靠近板子上预留的PA2插针插孔或者直接抚摸STM32芯片背面(并没有直接接触)也会产生中断,这个问题截止发帖并没有解决,下面是我配置PD2外部中断的函数:
void MPU6050_EXTI_Config(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
EXTI_InitTypeDef EXTI_InitStruct;
NVIC_InitTypeDef NVIC_InitStruct;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);
//RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_2;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOD, &GPIO_InitStruct);
GPIO_SetBits(GPIOD, GPIO_Pin_2);
EXTI_InitStruct.EXTI_Line = EXTI_Line2;
EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Falling;
EXTI_InitStruct.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStruct);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOD, GPIO_PinSource2);
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
NVIC_InitStruct.NVIC_IRQChannel = EXTI2_IRQn;
NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 1;
NVIC_InitStruct.NVIC_IRQChannelSubPriority = 2;
NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStruct);
}
PA2并没有初始化,所以这个奇怪的问题我已经无力解决,希望各位大神能提出自己的猜想
|
|