stm32---ADXL345

2023-05-16

ADXL345是一款三轴加速度传感器,广泛用于手机、游戏手柄等设计。
ADXL 支持标准的 I2C 或 SPI 数字接口,自带 32 级 FIFO 存储,并且内 部有多种运动状态检测和灵活的中断方式等特性,常用I2C接口


检测轴

初始化步骤
1) 上电
2) 等待 1.1ms
3) 初始化命令序列
4) 结束
其中上电这个动作发生在开发板第一次上电的时候,在上电之后,等待 1.1ms 左右,就可以开始发送初始化序列了,初始化序列一结束, ADXL345 就 开始正常工作了


stm里的硬件电路

adxl345.c

#include "adxl345.h"
#include "iic.h"
#include "math.h"
#include "SysTick.h"


//初始化ADXL345.
//返回值:0,初始化成功;1,初始化失败.
u8 ADXL345_Init(void)
{                 
    IIC_Init();                         //初始化IIC总线  
    if(ADXL345_RD_Reg(DEVICE_ID)==0XE5) //读取器件ID
    {  
        ADXL345_WR_Reg(DATA_FORMAT,0X2B);   //低电平中断输出,13位全分辨率,输出数据右对齐,16g量程 
        ADXL345_WR_Reg(BW_RATE,0x0A);       //数据输出速度为100Hz
        ADXL345_WR_Reg(POWER_CTL,0x28);     //链接使能,测量模式
        ADXL345_WR_Reg(INT_ENABLE,0x00);    //不使用中断      
        ADXL345_WR_Reg(OFSX,0x00);
        ADXL345_WR_Reg(OFSY,0x00);
        ADXL345_WR_Reg(OFSZ,0x00);  
        return 0;
    }           
    return 1;                                     
} 

//写ADXL345寄存器
//addr:寄存器地址
//val:要写入的值
//返回值:无
void ADXL345_WR_Reg(u8 addr,u8 val) 
{
    IIC_Start();                 
    IIC_Send_Byte(ADXL_WRITE);      //发送写器件指令    
    IIC_Wait_Ack();    
    IIC_Send_Byte(addr);            //发送寄存器地址
    IIC_Wait_Ack();                                                        
    IIC_Send_Byte(val);             //发送值                      
    IIC_Wait_Ack();                    
    IIC_Stop();                     //产生一个停止条件     
} 

//读ADXL345寄存器
//addr:寄存器地址
//返回值:读到的值
u8 ADXL345_RD_Reg(u8 addr)      
{
    u8 temp=0;       
    IIC_Start();                 
    IIC_Send_Byte(ADXL_WRITE);  //发送写器件指令    
    temp=IIC_Wait_Ack();       
    IIC_Send_Byte(addr);        //发送寄存器地址
    temp=IIC_Wait_Ack();                                                       
    IIC_Start();                //重新启动
    IIC_Send_Byte(ADXL_READ);   //发送读器件指令    
    temp=IIC_Wait_Ack();       
    temp=IIC_Read_Byte(0);      //读取一个字节,不继续再读,发送NAK               
    IIC_Stop();                 //产生一个停止条件      
    return temp;                //返回读到的值
} 


//读取3个轴的数据
//x,y,z:读取到的数据
void ADXL345_RD_XYZ(short *x,short *y,short *z)
{
    u8 buf[6];
    u8 i;
    IIC_Start();                 
    IIC_Send_Byte(ADXL_WRITE);  //发送写器件指令    
    IIC_Wait_Ack();    
    IIC_Send_Byte(0x32);        //发送寄存器地址(数据缓存的起始地址为0X32)
    IIC_Wait_Ack();                                                        
    
    IIC_Start();                //重新启动
    IIC_Send_Byte(ADXL_READ);   //发送读器件指令
    IIC_Wait_Ack();
    for(i=0;i<6;i++)
    {
        if(i==5)buf[i]=IIC_Read_Byte(0);//读取一个字节,不继续再读,发送NACK  
        else buf[i]=IIC_Read_Byte(1);   //读取一个字节,继续读,发送ACK 
    }                  
    IIC_Stop();                 //产生一个停止条件
    
    *x=(short)(((u16)buf[1]<<8)+buf[0]); //低字节先读,两个字节表示一个方向位的值    
    *y=(short)(((u16)buf[3]<<8)+buf[2]);        
    *z=(short)(((u16)buf[5]<<8)+buf[4]);       
}


//读取ADXL的平均值
//x,y,z:读取10次后取平均值
void ADXL345_RD_Avval(short *x,short *y,short *z)
{
    short tx=0,ty=0,tz=0;      
    u8 i;  
    for(i=0;i<10;i++)
    {
        ADXL345_RD_XYZ(x,y,z);
        delay_ms(10);
        tx+=(short)*x;
        ty+=(short)*y;
        tz+=(short)*z;     
    }
    *x=tx/10;
    *y=ty/10;
    *z=tz/10;
}  



//自动校准
//xval,yval,zval:x,y,z轴的校准值
void ADXL345_AUTO_Adjust(char *xval,char *yval,char *zval)
{
    short tx,ty,tz;
    u8 i;
    short offx=0,offy=0,offz=0;
    ADXL345_WR_Reg(POWER_CTL,0x00);     //先进入休眠模式.
    delay_ms(100);
    ADXL345_WR_Reg(DATA_FORMAT,0X2B);   //低电平中断输出,13位全分辨率,输出数据右对齐,16g量程 
    ADXL345_WR_Reg(BW_RATE,0x0A);       //数据输出速度为100Hz
    ADXL345_WR_Reg(POWER_CTL,0x28);     //链接使能,测量模式
    ADXL345_WR_Reg(INT_ENABLE,0x00);    //不使用中断      

    ADXL345_WR_Reg(OFSX,0x00);
    ADXL345_WR_Reg(OFSY,0x00);
    ADXL345_WR_Reg(OFSZ,0x00);
    delay_ms(12);
    for(i=0;i<10;i++)
    {
        ADXL345_RD_Avval(&tx,&ty,&tz);
        offx+=tx;
        offy+=ty;
        offz+=tz;
    }           
    offx/=10;
    offy/=10;
    offz/=10;
    *xval=-offx/4;
    *yval=-offy/4;
    *zval=-(offz-256)/4;      
    ADXL345_WR_Reg(OFSX,*xval);
    ADXL345_WR_Reg(OFSY,*yval);
    ADXL345_WR_Reg(OFSZ,*zval); 
}

//读取ADXL345的数据times次,再取平均
//x,y,z:读到的数据
//times:读取多少次
void ADXL345_Read_Average(short *x,short *y,short *z,u8 times)
{
    u8 i;
    short tx,ty,tz;
    *x=0;
    *y=0;
    *z=0;
    if(times)//读取次数不为0
    {
        for(i=0;i<times;i++)//连续读取times次
        {
            ADXL345_RD_XYZ(&tx,&ty,&tz);
            *x+=tx;
            *y+=ty;
            *z+=tz;
            delay_ms(5);
        }
        *x/=times;
        *y/=times;
        *z/=times;
    }
} 

//得到角度
//x,y,z:x,y,z方向的重力加速度分量(不需要单位,直接数值即可)
//dir:要获得的角度.0,与Z轴的角度;1,与X轴的角度;2,与Y轴的角度.
//返回值:角度值.单位0.1°.
//res得到的是弧度值,需要将其转换为角度值也就是*180/3.14
short ADXL345_Get_Angle(float x,float y,float z,u8 dir)
{
    float temp;
    float res=0;
    switch(dir)
    {
        case 0://与自然Z轴的角度
            temp=sqrt((x*x+y*y))/z;
            res=atan(temp);
            break;
        case 1://与自然X轴的角度
            temp=x/sqrt((y*y+z*z));
            res=atan(temp);
            break;
        case 2://与自然Y轴的角度
            temp=y/sqrt((x*x+z*z));
            res=atan(temp);
            break;
    }
    return res*180/3.14;
}

adxl345.h

#ifndef _adxl345_H
#define _adxl345_H

#include "system.h"



#define DEVICE_ID       0X00    //器件ID,0XE5
#define THRESH_TAP      0X1D    //敲击阀值
#define OFSX            0X1E
#define OFSY            0X1F
#define OFSZ            0X20
#define DUR             0X21
#define Latent          0X22
#define Window          0X23 
#define THRESH_ACK      0X24
#define THRESH_INACT    0X25 
#define TIME_INACT      0X26
#define ACT_INACT_CTL   0X27     
#define THRESH_FF       0X28    
#define TIME_FF         0X29 
#define TAP_AXES        0X2A  
#define ACT_TAP_STATUS  0X2B 
#define BW_RATE         0X2C 
#define POWER_CTL       0X2D 

#define INT_ENABLE      0X2E
#define INT_MAP         0X2F
#define INT_SOURCE      0X30
#define DATA_FORMAT     0X31
#define DATA_X0         0X32
#define DATA_X1         0X33
#define DATA_Y0         0X34
#define DATA_Y1         0X35
#define DATA_Z0         0X36
#define DATA_Z1         0X37
#define FIFO_CTL        0X38
#define FIFO_STATUS     0X39


//0X0B TO OX1F Factory Reserved  
//如果ALT ADDRESS脚(12脚)接地,ADXL地址为0X53(不包含最低位).
//如果接V3.3,则ADXL地址为0X1D(不包含最低位).
//因为开发板接V3.3,所以转为读写地址后,为0X3B和0X3A(如果接GND,则为0XA7和0XA6)  
#define ADXL_READ    0X3B
#define ADXL_WRITE   0X3A

u8 ADXL345_Init(void);                              //初始化ADXL345
void ADXL345_WR_Reg(u8 addr,u8 val);                //写ADXL345寄存器
u8 ADXL345_RD_Reg(u8 addr);                         //读ADXL345寄存器
void ADXL345_RD_XYZ(short *x,short *y,short *z);    //读取一次值
void ADXL345_RD_Avval(short *x,short *y,short *z);  //读取平均值
void ADXL345_AUTO_Adjust(char *xval,char *yval,char *zval);//自动校准
void ADXL345_Read_Average(short *x,short *y,short *z,u8 times);//连续读取times次,取平均
short ADXL345_Get_Angle(float x,float y,float z,u8 dir);


#endif

main.c



#include "system.h"
#include "SysTick.h"
#include "led.h"
#include "usart.h"
#include "tftlcd.h"
#include "key.h"
#include "adxl345.h"


//x,y:开始显示的坐标位置
//num:要显示的数据
//mode:0,显示加速度值;1,显示角度值;
void ADXL_Show_num(u16 x,u16 y,short num,u8 mode)   //ADXL345显示
{
    u8 valbuf[3];
    if(mode==0)   //显示加速度值
    {
        if(num<0)
        {
            num=-num;
            LCD_ShowString(x,y,tftlcd_data.width,tftlcd_data.height,16,"-");
        }
        else
        {
            LCD_ShowString(x,y,tftlcd_data.width,tftlcd_data.height,16," ");
        }
        valbuf[0]=num/100+0x30;
        valbuf[1]=num%100/10+0x30;
        valbuf[2]=num%100%10+0x30;  
        LCD_ShowString(x+10,y,tftlcd_data.width,tftlcd_data.height,16,valbuf);  
    }
    else         //显示角度值
    {
        if(num<0)
        {
            num=-num;
            LCD_ShowString(x,y,tftlcd_data.width,tftlcd_data.height,16,"-");
        }
        else
        {
            LCD_ShowString(x,y,tftlcd_data.width,tftlcd_data.height,16," ");
        }
        valbuf[0]=num/10+0x30;
        valbuf[1]='.';
        valbuf[2]=num%10+0x30;  
        LCD_ShowString(x+10,y,tftlcd_data.width,tftlcd_data.height,16,valbuf);      
    }       
}

void data_pros()    //数据处理函数
{
    short x,y,z;
    short xang,yang,zang;   
    u8 key;
    ADXL345_Read_Average(&x,&y,&z,10);  //读取x,y,z 3个方向的加速度值 总共10次
    ADXL_Show_num(60,120,x,0);
    ADXL_Show_num(60,140,y,0);
    ADXL_Show_num(60,160,z,0);

    xang=ADXL345_Get_Angle(x,y,z,1);
    yang=ADXL345_Get_Angle(x,y,z,2);
    zang=ADXL345_Get_Angle(x,y,z,0);
    ADXL_Show_num(60,180,xang,1);
    ADXL_Show_num(60,200,yang,1);
    ADXL_Show_num(60,220,zang,1);

    key=KEY_Scan(0);
    if(key==KEY_UP)       //按下K_UP校准
    {
        led2=0;     //LED2亮表示正在校准
        ADXL345_AUTO_Adjust((char*)&x,(char*)&y,(char*)&z);
        led2=1;    //LED2灭表示校准完成
    }
}

int main()
{
    u8 i=0;

    SysTick_Init(72);
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);  //中断优先级分组 分2组
    LED_Init();
    USART1_Init(9600);
    TFTLCD_Init();          //LCD初始化
    KEY_Init();
    
    FRONT_COLOR=BLACK;

    LCD_ShowString(10,10,tftlcd_data.width,tftlcd_data.height,16,"PRECHIN STM32F1");
    LCD_ShowString(10,30,tftlcd_data.width,tftlcd_data.height,16,"www.prechin.net");
    LCD_ShowString(10,50,tftlcd_data.width,tftlcd_data.height,16,"ADXL345 Test");
    LCD_ShowString(10,90,tftlcd_data.width,tftlcd_data.height,16,"K_UP:ADXL345 Adjust");
    LCD_ShowString(10,120,tftlcd_data.width,tftlcd_data.height,16,"X Val:");
    LCD_ShowString(10,140,tftlcd_data.width,tftlcd_data.height,16,"Y Val:");
    LCD_ShowString(10,160,tftlcd_data.width,tftlcd_data.height,16,"Z Val:");
    LCD_ShowString(10,180,tftlcd_data.width,tftlcd_data.height,16,"X Ang:");
    LCD_ShowString(10,200,tftlcd_data.width,tftlcd_data.height,16,"Y Ang:");
    LCD_ShowString(10,220,tftlcd_data.width,tftlcd_data.height,16,"Z Ang:");
    
    FRONT_COLOR=RED;
    
    while(ADXL345_Init())
    {
        printf("ADXL345 Error!\r\n");
        LCD_ShowString(130,50,tftlcd_data.width,tftlcd_data.height,16,"Error  ");
        delay_ms(200);
    }
    printf("ADXL345 OK!\r\n");
    LCD_ShowString(130,50,tftlcd_data.width,tftlcd_data.height,16,"Success");
    while(1)
    {
        
        i++;
        if(i%20==0)
        {
            led1=!led1;
            data_pros();
        }
        delay_ms(10);
            
    }
    
}
4.PNG
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

stm32---ADXL345 的相关文章

  • 如何在 Cortex-M3 (STM32) 上从 RAM 执行函数?

    我正在尝试从 Cortex M3 处理器 STM32 上的 RAM 执行函数 该函数会擦除并重写内部闪存 所以我肯定需要在 RAM 中 但我该怎么做呢 我尝试过的是 使用 memcpy 将函数复制到 RAM 中的字节数组 检查它是否正确对齐
  • GCC - 如何停止链接 malloc?

    我正在努力将我的代码缩减到最小的骨架大小 我使用的是只有 32k 闪存的 STM32F0 需要很大一部分闪存用于数据存储 我的代码已经有大约 20k 闪存大小 其中一些是由于使用了 STM32 HAL 函数 我可以在以后需要时对其进行解释和
  • 140-基于stm32单片机智能晾衣杆控制系统Proteus仿真+源程序

    资料编号 140 一 功能介绍 1 采用stm32单片机 LCD1602显示屏 独立按键 DHT11传感器 ds1302时钟 光敏传感器 蜂鸣器 LED灯 制作一个基于stm32单片机智能晾衣杆控制系统Proteus仿真 2 通过光敏传感器
  • 138-基于stm32单片机汽车多功能仪表盘显示系统Proteus仿真+源程序

    资料编号 138 一 功能介绍 1 采用stm32单片机 LCD1602显示屏 独立按键 DHT11传感器 ds1302时钟 LED灯 蜂鸣器 电位器 制作一个基于stm32单片机汽车多功能仪表盘显示系统Proteus仿真 2 通过DHT1
  • 133-基于stm32单片机停车场车位管理系统Proteus仿真+源程序

    资料编号 133 一 功能介绍 1 采用stm32单片机 4位数码管 独立按键 制作一个基于stm32单片机停车场车位管理系统Proteus仿真 2 通过按键进行模拟车辆进出 并且通过程序计算出当前的剩余车位数量 3 将剩余的车位数量显示到
  • rt-thread studio中新建5.0不能用

    文章目录 一 版本对比 二 文件和文件夹打斜杠 在使用RT Thread studio创建新工程5 0版本的时候 结果发现新建完成之后程序不能正常运行 但是创建4 10版本的时候却能运行 那肯定是新版本出现了BUG 一 版本对比 首先对比了
  • 匹配 STM32F0 和 zlib 中的 CRC32

    我正在研究运行 Linux 的计算机和 STM32F0 之间的通信链路 我想对我的数据包使用某种错误检测 并且由于 STM32F0 有 CRC32 硬件 并且我在 Linux 上有带有 CRC32 的 zlib 所以我认为在我的项目中使用
  • [屏驱相关]【SWM166-SPI-Y1.28C1测评】+ 有点惊艳的开箱

    耳闻华芯微特许久了 看到论坛得评测活动赶紧上了末班车 毕竟对有屏幕得板子也是很喜欢得 京东快递小哥客客气气 微笑着把快递给了我 好评 直接拆了包 在此之前没看过视频号 所以这个圆盘盘得模具还是有点惊喜的 正面照如下 开机有灯光秀 还有动画
  • SHT10温湿度传感器——STM32驱动

    实验效果 硬件外观 接线 3 3V供电 IIC通讯 代码获取 查看下方 END
  • 解决KEIL编译慢问题

    两种方案 使用v6版本的ARM Compiler 如果v6版本编译不过 必须使用v5版本的 则可以勾选掉Browse Information选项 提升很明显 1分多钟能优化到几秒 看代码量 但是这个有个弊端 在KEIL中会影响函数跳转 建议
  • 在 Atollic TrueStudio、STM32CubeMX 中导入 C 库

    我目前正在开发 STM32F767ZI Nucleo 板和一个小安全芯片 microchip atecc508a 通过 i2c 连接进行连接 该芯片有一个可用的库加密验证库 https github com MicrochipTech cr
  • 跟着野火学FreeRTOS:第一段(任务定义,切换以及临界段)

    在裸机系统中 系统的主体就是 C P U CPU CP U 按照预先设定的程序逻辑在 m a i n
  • 串口通讯第一次发送数据多了一字节

    先初始化IO再初始化串口 导致第一次发送时 多出一个字节数据 优化方案 先初始化串口再初始化IO 即可正常通讯
  • STM32 暂停调试器时冻结外设

    当到达断点或用户暂停代码执行时 调试器可以停止 Cortex 中代码的执行 但是 当皮质停止在暂停状态下执行代码时 调试器是否会冻结其他外设 例如 DMA UART 和定时器 您只能保留时间 r 取决于外围设备 我在进入主函数时调用以下代码
  • STM32的HAL中实现单按、长按和双按功能

    我正在尝试实现单击 双击和长按功能来执行不同的功能 到目前为止 我已经理解了单击和长按的逻辑 但我不知道如何检测双击 至于代码 我使用计数器实现了单击和长按 但代码仅停留在第一个 if 条件上 bool single press false
  • for循环延时时间计算

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 pandas是什么 二 使用步骤 1 引入库 2 读入数据 总结 前言 之前做led点亮的实验 好像是被delay函数影响了 因为delay参数设置的不对
  • 核心耦合内存在 STM32F4xx 上可执行吗?

    尝试从 STM32F429s CCM 运行代码 但每当我命中 CCM 中的第一条指令时 我总是会遇到硬故障 并且 IBUSERR 标志被设置 该指令有效且一致 STM32F4xx 是否可能不允许从 CCM 执行 数据访问效果良好 alios
  • STM32 上的 ADC 单次转换

    我正在研究 STM32 F103x 上的 ADC 编程 并从最简单的情况 单次转换开始 测量内部温度传感器 连接到 ADC1 的值 并使用 USART 将其发送到 COM 端口 目标似乎很明确 但是当我尝试将源代码下载到闪存时 它不会向 C
  • 使用 STM32 USB 设备库将闪存作为大容量存储设备

    我的板上有这个闪存IC 它连接到我的STM32F04 ARM处理器 处理器的USB端口可供用户使用 我希望我的闪存在通过 USB 连接到 PC 时被检测为存储设备 作为第一步 我在程序中将 USB 类定义为 MSC 效果很好 因为当我将主板
  • STM32 传输结束时,循环 DMA 外设到存储器的行为如何?

    我想问一下 在以下情况下 STM32 中的 DMA SPI rx 会如何表现 我有一个指定的 例如 96 字节数组 名为 A 用于存储从 SPI 接收到的数据 我打开循环 SPI DMA 它对每个字节进行操作 配置为 96 字节 是否有可能

随机推荐

  • spring-kafka通过@KafkaListener实现消费者监听流程分析

    文章目录 主流程处理EnableKafka注解实现BeanPostProcessor接口postProcessAfterInitialization扫描 64 KafkaListenerregisterListenerContainer注册
  • c语言strrchr函数,strrchr_字符串 | Strings_C_参考手册_非常教程

    strrchr 在头文件中定义 char strrchr const char str xff0c int ch 通过 str 指向的以空字符结尾的字节字符串 每个字符解释为无符号字符 查找 ch 的最后一次出现 在转换为 char 之后
  • cmake中多级CMakeLists.txt调用

    文章目录 一 工程目录结构二 工程源代码2 1 上层目录2 1 1 cmaketest CMakeLists txt2 1 2 cmaketest main cpp2 1 3 cmaketest inc func1 hpp2 1 4 cma
  • c++ 函数后面加一个冒号的含义

    转载自 xff1a https www cnblogs com Allen rg p 11529949 html 冒号后面跟的是赋值 xff0c 这种写法是C 43 43 的特性 括号赋值只能在变量定义并初始化中 不能用在变量定义后再赋值
  • 理解死锁产生的四个必要条件

    死锁的定义 死锁是指两个或两个以上的进程在执行过程中 xff0c 由于竞争资源或者由于彼此通信而造成的一种阻塞的现象 xff0c 若无外力作用 xff0c 它们都将无法推进下去 此时称系统处于死锁状态或系统产生了死锁 xff0c 这些永远在
  • c++ error 2064: term does not evaluate to a function taking 1 arguments解决方法

    首先来看一个简单的示例 xff1a class T public T 61 default T 61 default int convertToInt double x return ceil x void doSomething vect
  • SZU_OnlineJudge_C++多态实验总结

    父类和子类的赋值问题 1 子类可以直接赋值给父类 如Cpoint 61 CRect 2 通过强制类型转换 xff0c 可以让父类赋值给子类 如 Cpoint Crect 61 cpoint 3 派生类对象指针 或引用 可以赋值给基类对象指针
  • 奇偶校验码原来这样算!!!

    数据传输的正误 数据发出方A像数据接收方B发送一串加密过后的情书 但是信息在传输过程中可能发生错误 比如某人截获并修改内容 一段美好的爱情就结束了 手动狗头 在电路传输中 电信号很容易受到干扰 电梯打电话你就知道了 于是我们要在原有的信息之
  • 手把手教你打造自己的4G数传模块

    如何低成本打造自己的4G数传模块 大家好 xff0c 现在给大家介绍一种简单的方法打造自己的4G数传 目录 一 背景 1 二 材料清单 2 2 1 G43模块 2 2 2 PSHAT接口板 5 三 使用方法 5 3 1 硬件连接 6 3 2
  • .error: C++ requires a type specifier for all declarations

    error C 43 43 requires a type specifier for all declarations 出错原因 xff1a 代码片段没有写在函数中 解决方法 xff1a 将代码片段写进函数中
  • 4g图传数传实测

    又一位客户极高的评价 xff0c 为了反馈大家 xff0c 从文章看到的并且加我qq1767893964 xff0c 备注gslink购买者 xff0c 毕淘宝搜索下单的有很大的优惠哦 下面是客户的测试 xff1a 最近南京天气开始变暖 x
  • Unable to locate package错误解决办法

    Ubuntu下执行apt install python pip得到如下错误提示 xff1a Reading package lists Done Building dependency tree Reading state informat
  • 树莓派编译卡死用交换空间问题的解决

    今天在树莓派编译一个ros包时发现 xff0c 每次编译到后速度会特别慢并且卡死 xff0c 经过各种尝试 xff0c 增加2G交换空间后才解决问题 xff0c 编译只花了不到10s xff0c 之前折腾了大半天啊 树莓派3B默认的swap
  • SpringAOP中@EnableAspectJAutoProxy注解的作用

    文章目录 前言从注解开始Import注解封装对象 注入容器 AnnotationAwareAspectJAutoProxyCreator的作用类图回顾IOC对象初始化后置处理器 总结 前言 如果要使用SpringAOP的功能 xff0c 必
  • HDMI转CSI转换板给你做出来了

    小编前段时间一直在做无人机图像的项目 因为项目要求飞机飞行速度较快 小编就像找一款是全局快门 防抖 自动对焦 焦距定焦镜头的一款相机和镜头 首先想到的就是gopro 体积不大 价格也还行 小编之前出去玩一直用对成像效果也是很满意 于是小编就
  • cmakelist.txt 编写教程

    1 CMake编译原理 CMake是一种跨平台编译工具 xff0c 比make更为高级 xff0c 使用起来要方便得多 CMake主要是编写CMakeLists txt文件 xff0c 然后用cmake命令将CMakeLists txt文件
  • VS Code在线安装ESP-IDF出现乱码(已解决)

    VS Code在线安装ESP IDF出现乱码 xff08 已解决 xff09 VS Code安装ESP IDF插件的安装乱码解决办法 VS Code安装 按照乐鑫给出的要求是安装VS Code之前需要安装Git和Python3 xff08
  • ffmpeg推流rtmp指定udp传输

    RTMP Real Time Messaging Protocol 是一个用于音频 视频和数据的传输协议 RTMP 协议本身可以支持 TCP 或 UDP 作为其底层传输协议 在 RTMP 中 xff0c TCP 是默认的传输协议 xff0c
  • 单片机小白学习之路(十五)---定时器和计数器的理解(一)

    目标 xff1a 定时器和计数器的理解 一 1 定时器 计数器简介 定时器 计数器 xff08 Timer Counter xff0c 简称T C xff09 是单片机中最基本的接口之一 即可以定时又可以计数 常用于计数 延时 测量周期 脉
  • stm32---ADXL345

    ADXL345是一款三轴加速度传感器 xff0c 广泛用于手机 游戏手柄等设计 ADXL 支持标准的 I2C 或 SPI 数字接口 xff0c 自带 32 级 FIFO 存储 xff0c 并且内 部有多种运动状态检测和灵活的中断方式等特性