久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
本人小白,在自學平衡車項目,遇到了些問題!幫忙解決請客一杯奶茶。
[打印本頁]
作者:
hcj907
時間:
2025-3-18 19:47
標題:
本人小白,在自學平衡車項目,遇到了些問題!幫忙解決請客一杯奶茶。
#include "stm32f10x.h" // Device header"
#include "OLED.h"
#include "Delay.h"
#include "inv_mpu.h"
#include "Serial.h"
#include "string.h"
#include "Servo.h"
#include "Motor.h"
#include "MPU6050_Exti.h"
#include "MPU6050.h"
float Pitch,Roll,Yaw;
int16_t GX, GY, GZ;
int main(void)
{
delay_init();
OLED_Init();
Serial_Init(); //串口初始化
Servo_Init(); //舵機初始化
Motor_Init(); //直流電機初始化
MPU6050_Exti_Init();//為MUP6050配置中斷引腳PB12
MPU6050_DMP_Init(); //MUP6050 DMP庫初始化
Servo_SetAngle(90);
Motor_SetSpeed(70);
while(1)
{
Serial_Printf("%.2f %.2f %.2f\r\n",Pitch,Roll,Yaw);
delay_ms(50);
OLED_ShowFloatNum(1, 1, Roll, 3, 2, OLED_8X16);
OLED_ShowFloatNum(1, 20, GY, 3, 2, OLED_8X16);
//OLED_ShowFloatNum(1, 40, Yaw, 3, 2, OLED_8X16);
OLED_Update();
}
}
void EXTI15_10_IRQHandler(void)
{
if (EXTI_GetITStatus(EXTI_Line12) == SET) //判斷是否是外部中斷12號線觸發的中斷
{
MPU6050_DMP_Get_Data(&Pitch,&Roll,&Yaw);//獲取MPU6050 DMP庫的角度數據
MPU_Get_Gyroscope(&GX,&GY,&GZ); //獲取MPU6050 原始角速度數據
EXTI_ClearITPendingBit(EXTI_Line12); //清除外部中斷12號線的中斷標志位
//中斷標志位必須清除
} //否則中斷將連續不斷地觸發,導致主程序卡死
}
問題時這樣的:中斷函數里有兩個函數。第一個是獲取DMP庫的數據,第二個是獲取陀螺儀原始的數據。如何我兩個函數同時運行,第一個函數就獲取不到數據,第二個函數可以獲取到數據。如果我把第二個函數注釋掉,第一個函數又能獲取數據了。我參考別人平衡車的代碼也是這樣寫的,可到了我這里就出現問題了,麻煩大神幫忙指點一下!
謝謝了!
作者:
Tonghao666
時間:
2025-3-20 08:30
#include "stm32f10x.h"
#include "OLED.h"
#include "Delay.h"
#include "inv_mpu.h"
#include "Serial.h"
#include "string.h"
#include "Servo.h"
#include "Motor.h"
#include "MPU6050_Exti.h"
#include "MPU6050.h"
// 全局變量聲明
volatile float Pitch, Roll, Yaw; // 使用volatile確保中斷和主循環數據同步
int16_t GX, GY, GZ;
int main(void)
{
// 外設初始化
delay_init();
OLED_Init();
Serial_Init(); // 串口初始化
Servo_Init(); // 舵機初始化
Motor_Init(); // 電機初始化
MPU6050_Exti_Init(); // 配置MPU6050中斷引腳PB12
MPU6050_DMP_Init(); // DMP初始化
Servo_SetAngle(90); // 舵機初始角度
Motor_SetSpeed(70); // 電機初始速度
while(1)
{
// 主循環中讀取原始陀螺儀數據(非中斷上下文)
MPU_Get_Gyroscope(&GX, &GY, &GZ);
// 通過串口輸出DMP姿態數據
Serial_Printf("Pitch:%.2f Roll:%.2f Yaw:%.2f\r\n", Pitch, Roll, Yaw);
// OLED顯示Roll和GY數據
OLED_ShowFloatNum(1, 1, Roll, 3, 2, OLED_8X16);
OLED_ShowFloatNum(1, 20, GY, 3, 2, OLED_8X16);
OLED_Update();
delay_ms(50); // 控制主循環頻率
}
}
// 中斷服務函數:僅處理DMP數據讀取
void EXTI15_10_IRQHandler(void)
{
if (EXTI_GetITStatus(EXTI_Line12) == SET)
{
// 僅讀取DMP姿態數據(中斷上下文)
MPU6050_DMP_Get_Data(&Pitch, &Roll, &Yaw);
EXTI_ClearITPendingBit(EXTI_Line12); // 必須清除中斷標志
}
}
試試
作者:
hcj907
時間:
2025-3-20 19:47
Tonghao666 發表于 2025-3-20 08:30
#include "stm32f10x.h"
#include "OLED.h"
#include "Delay.h"
謝謝你!僅讀取DMP數據是可以的!兩個函數一起運行就不可以!我也不知道為什么了!算了,我打算重新移植其他人的平衡車代碼再看看。
歡迎光臨 (http://m.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
丁香久久
|
国产日韩一区二区三免费高清
|
国产精品久久久久久久久久久久久
|
激情视频中文字幕
|
九九热这里
|
国产清纯白嫩初高生在线播放视频
|
亚洲a视频
|
免费在线黄色av
|
精品欧美一区二区精品久久久
|
91精品国产91久久久久游泳池
|
一区二区三区国产在线观看
|
久久aⅴ乱码一区二区三区 亚洲国产成人精品久久久国产成人一区
|
韩日一区二区三区
|
久久久久久久久99精品
|
午夜电影福利
|
欧美一级在线免费观看
|
18av在线播放
|
久久成人国产
|
成人av播放
|
久久久久国产精品一区
|
精品伦精品一区二区三区视频
|
欧美视频xxx
|
日韩一区欧美一区
|
亚洲视频免费播放
|
一区二区三区在线免费观看视频
|
国产成人在线视频播放
|
毛片一区二区三区
|
亚洲精品一区二区三区蜜桃久
|
国内久久精品
|
久久看看
|
亚洲一级淫片
|
伊人春色在线观看
|
国产高清久久久
|
婷婷免费在线
|
re久久
|
狠狠操婷婷
|
污视频免费在线观看
|
91欧美激情一区二区三区成人
|
在线日韩视频
|
欧美日韩中文字幕
|
亚洲综合在线视频
|