历史上的今天
返回首页

历史上的今天

今天是:2025年07月23日(星期三)

正在发生

2020年07月23日 | 基于stm32f103ze+mpu9250通过官方DMP库串口输出角度

2020-07-23 来源:51hei

单片机源程序如下:

#include "stm32f10x.h"

#include "stdio.h"

#include "UART1.h"

#include "systick.h"

// mpu9250 include files

#include "sys.h"

#include "mpu9250.h"

#include "mpuiic.h"

#include "inv_mpu.h"

#include "inv_mpu_dmp_motion_driver.h"

float Q0,Q1,Q2,Q3;             // 欧拉角

u32 status2=0;

void printf_init()        //printf初始化

{

        GPIO_InitTypeDef GPIO_InitStructure;        //声明一个结构体变量,用来初始化GPIO

        NVIC_InitTypeDef NVIC_InitStrue;//定义中断相关结构体

        USART_InitTypeDef  USART_InitStructure;          //串口结构体定义


        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_USART1|RCC_APB2Periph_AFIO,ENABLE);

        RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);//使能USART2时钟


        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2;//TX

        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;

        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;

        GPIO_Init(GPIOA,&GPIO_InitStructure);

        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3;//RX

        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;

        GPIO_Init(GPIOA,&GPIO_InitStructure);


        USART_InitStructure.USART_BaudRate=115200;   //波特率设置为9600

        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_Mode_Tx;

        USART_Init(USART2,&USART_InitStructure);

        USART_Cmd(USART2, ENABLE);

       

        USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);//使能或者失能指定的USART中断 接收中断

        USART_ClearFlag(USART2,USART_FLAG_TC);//清除USARTx的待处理标志位

       

  NVIC_InitStrue.NVIC_IRQChannel=USART2_IRQn;//定义中断通道

  NVIC_InitStrue.NVIC_IRQChannelCmd=ENABLE;//开启中断通道

  NVIC_InitStrue.NVIC_IRQChannelPreemptionPriority=1;//设定抢占优先级为1

  NVIC_InitStrue.NVIC_IRQChannelSubPriority=1;//设定子优先级为1

  NVIC_Init(&NVIC_InitStrue);//中断初始化

}

void USART2_IRQHandler(void)//编写中断处理函数

{

    u8 res;//无符号字符res   

   if(USART_GetITStatus(USART2,USART_IT_RXNE))//接收数据进入中断,判断串口1接收缓存器非空使能为1与否

{

     res= USART_ReceiveData(USART2); //为1,则将串口1的数据给变量

         if(res==0x10)//等待

         {  

                  USART_SendData(USART2,'1');               

                        while(USART_GetFlagStatus(USART2,USART_FLAG_TXE)==RESET);

                 USART_SendData(USART2,'0');               

                        while(USART_GetFlagStatus(USART2,USART_FLAG_TXE)==RESET);

                 EXTI->IMR |= EXTI_Line0;//使能外部中断4

                 EXTI->IMR |= EXTI_Line3;//使能外部中断4

                 EXTI->IMR |= EXTI_Line4;//使能外部中断4

                 EXTI->IMR |= EXTI_Line5;//使能外部中断4

                 status2=0;         

         }

   else if(res==0x11)//小孩

         {

     EXTI->IMR &= ~(EXTI_Line0);// 屏蔽外部中断0

                 EXTI->IMR &= ~(EXTI_Line3);// 屏蔽外部中断3

                 EXTI->IMR &= ~(EXTI_Line4);// 屏蔽外部中断4

                 EXTI->IMR &= ~(EXTI_Line5);// 屏蔽外部中断5

                  status2=1;                         

         }

          else if(res==0x13)//校准

                {  

                        mpu_dmp_init();

                        if(mpu_dmp_init()==0)

                                printf("13");

                         while(mpu_dmp_init())

                         {

                                 mpu_dmp_init();

                                 if(mpu_dmp_init()==0)

                                printf("13");

                         }

                }

        }

}

void Led_Configuration(void)

{

        GPIO_InitTypeDef GPIO_InitStructure;

       

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE|RCC_APB2Periph_GPIOB, ENABLE);


        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;                                         //PE5接

        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                     //设为推挽输出模式

        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                

        GPIO_Init(GPIOE, &GPIO_InitStructure);                         //初始化外设GPIO

  GPIO_SetBits(GPIOE,GPIO_Pin_5);

}

int main(void)

{

    u8 status;

    float pitch_dmp,roll_dmp,yaw_dmp;             // 欧拉角

           delay_ms(1000);

         delay_ms(1000);

    Initial_UART1(115200);

   Led_Configuration();

    printf_init();       

    delay_ms(1000);

    // MPU9250姿态传感器初始化

    do{

        status = mpu_dmp_init();

        if(status)

        {

            printf("Initialization--MPU9250 Error!!!rn");

        }

    }while(status);

    printf("Initialization--MPU9250 OK!!!rn");

    while(1)

    {     status= mpu_mpl_get_data(&pitch_dmp,&roll_dmp,&yaw_dmp);

        //status=mpu_dmp_get_data(&pitch_dmp,&roll_dmp,&yaw_dmp);

        if(!status)

        {

                                        if(status2==1)

                                        {    //printf("pitch:tt%8.2frn  roll:tt%8.2frn  yaw:tt%8.2frn",pitch_dmp,roll_dmp,yaw_dmp);

                                printf("%.3f|%.3f|%.3f|%.3f|%.1dn",Q0,Q1,Q2,Q3,GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_2));//四元数

          //GPIO_WriteBit(GPIOE, GPIO_Pin_5, (BitAction)(1 - GPIO_ReadOutputDataBit(GPIOE, GPIO_Pin_5))); //引脚取反       

            //delay_ms(10);

        }

        else

        {

           // printf("### Get Eulerian angle failed! ###rn");

                                        delay_ms(10);

        }

    }

}


}

int fputc(int ch,FILE *p)

{

        USART_SendData(USART2,(u8)ch);       

        while(USART_GetFlagStatus(USART2,USART_FLAG_TXE)==RESET);

        return ch;

}


推荐阅读

史海拾趣

启攀微(CHIPHOM)公司的发展小趣事

作为一家具有社会责任感的企业,启攀微电子(CHIPHOM)始终关注环境保护和社会公益事业。公司积极响应国家节能减排的号召,采用环保材料和节能技术生产产品。同时,公司还积极参与社会公益活动,捐款捐物支持灾区重建、资助贫困学生等。通过践行社会责任,启攀微电子(CHIPHOM)不仅提升了企业的社会形象,也为社会进步做出了积极贡献。

以上5个故事仅代表启攀微电子(CHIPHOM)在电子行业中发展起来的一些可能情景和方面,实际情况可能有所不同。如需更多准确信息,请查阅相关官方资料或联系公司相关人员。

C&K Switches公司的发展小趣事

2022年,C&K Switches公司被Littelfuse以5.4亿美元的企业价值收购。Littelfuse是一家工业技术制造公司,致力于打造一个可持续、互联和更安全的世界。两家公司在工业、通讯以及车载领域有着相近的市场布局和业务高度互补。收购完成后,C&K成为Littelfuse电子业务部门的一部分,双方共同为客户提供更全面的解决方案。这一收购不仅加强了C&K的市场地位,还为其未来的发展注入了新的活力和机遇。

Black Box Corporation公司的发展小趣事

Black Box意识到,在电子行业中,不同的行业细分市场有着不同的需求和特点。因此,公司决定采取深耕行业细分市场的策略,针对金融、教育、制造等不同行业提供定制化的解决方案。这一策略使Black Box能够更好地满足客户的实际需求,提高了客户满意度和忠诚度。

上海国芯(Gcore)公司的发展小趣事
在保证性能的前提下,选用性价比更高的元件和设计方案来降低成本。
博通集成(BEKEN)公司的发展小趣事

随着公司规模的扩大和市场需求的增长,博通集成开始实施国际化战略,积极拓展海外市场。公司在全球范围内设立了多个子公司和技术分部,以便更好地服务全球客户。通过国际化战略和全球布局,博通集成不仅提升了企业的国际竞争力,还为全球用户提供了更加优质的产品和服务。

这些故事展示了博通集成在电子行业中的发展历程和成就。通过不断的技术创新、市场拓展、战略合作和国际化战略的实施,博通集成逐渐发展成为无线连接芯片设计领域的领军企业。未来,随着无线通讯技术的不断发展和应用领域的不断拓展,博通集成将继续保持创新精神和市场敏锐度,推动企业的持续发展。

Helium公司的发展小趣事

随着Helium商业模式的成功实施,其热点数量迅速增长。据数据显示,Helium的热点数量从最初的少数几个发展到数十万乃至数百万个,覆盖了全球169个国家和地区。这一成就不仅彰显了Helium在物联网领域的领先地位,也为其带来了巨大的市场影响力和商业价值。通过广泛的网络覆盖,Helium为物联网设备提供了稳定、可靠的连接服务,促进了物联网技术的普及和应用。

问答坊 | AI 解惑

bin转换为hex格式的小软件

哥们有一个bin转换为hex格式的小软件,朋友们谁要? [ 本帖最后由 西门 于 2009-5-12 20:20 编辑 ]…

查看全部问答>

摄像机标配接口的变迁

  关键字:摄像机   我们在讨论一款摄像机的优缺点时,除了感光器件大小、镜头变焦倍数、像素高低等常规项目以外,经常会忽视摄像机自身标配视频接口的配置。其实充分了解了摄像机自带视频接口的不同特性,才有助于我们得心应手地使用它,充分 ...…

查看全部问答>

开发无线协议栈,用什么软件平台

我要开发一个无线传感器网络的协议栈,一般都有哪些软件平台可以用呢?IAR行吗? 操作系统方面,用tinyos,还是us/os好呢?我不太懂啊,请高手指点…

查看全部问答>

请大家帮忙  单片机编程的问题 !! 谢谢

#include #include #define unchar unsigned char #define VALID   1 #define INVALID 0 unchar TT2 ; int preCounter , curCounter ; long preTime , curTime ; //设置定时器T2 void T2_set () {       &n ...…

查看全部问答>

支持wince5.0的板子能上wince6.0不能?

像2410的或者Atmel 9263的cpu的 RAM和flash都是64MB的 如果可以用的话,驱动是否要重写呢?还是老的也可以使用。 wince6.0对硬件有什么要求嘛? 谢谢回答…

查看全部问答>

走嵌入式道路,如何提高自己?

    我现在在校,在网上看了好多招聘的信息,但是没有发现嵌入式开发方面的职位,当然只是现在没有看到,我想知道嵌入式方面的要怎样才能提高自己?还有linux嵌入式要具备哪些条件,前途如何?     先谢谢了!…

查看全部问答>

接口技术达人请进

请解下面的详细设计方案,谢谢啦`!!! 题目三:微机控制单通道单次采集或连续采集数据 要求: 1.用8个开关分别对应 ADC0809 8个通道 2.任意拨动1个开关则可控制对应的通道采集数据 3.可任意拨动1次或 连续拨动该开关实现单次或连续采集数据 4. ...…

查看全部问答>

【术业有专攻,电容我在行】有奖知识问答开奖咯!

【术业有专攻,电容我在行】有奖知识问答活动昨天截至,我们对答题正确率最高的10位答题者颁发奖品!由Vishay 提供的超酷4G U盘。下面给大家公布名单!   闫旭峰  曹佃生   马伟力    刘欣然  &nbs ...…

查看全部问答>

【项目外包】基于飞凌6410核心板的嵌入式开发

基于飞凌6410核心板的嵌入式开发 项目预算:¥ 19,999~20,001 开发周期: 30天 项目分类: 嵌入式 竞标要求: 项目标签: S3C6410 ...…

查看全部问答>

STM32F407的网络和SPI总线并用问题

各位大侠,本人想实现数据从上位机通过网络接口发送给单片机数据,单片机处理并通过SPI总线对下位机实现相应的操作,应该如何解决?希望各位帮忙,现在一点儿头绪也没有…

查看全部问答>