STM32 HAL库学习笔记-(SPI驱动ADXL345)

最近有项目需要需要用到ADXL345,网上转了一圈都是IIC驱动为主,正好最近在学习HAL库,所以本文将使用SPI驱动ADXL345

CUBEMX配置


上图为ADXL345 SPI的时序图,时钟线在空闲状态为高电平,所以CPOL=HIGH,数据采样是第二个边沿开始,图中第一个红色竖线的位置,所以CPHA=2 Edge,有了这些信息后,我们开始配置CUBEMX

NSS本文选择为PA4,生成代码后我们来到MDK中编写代码

MDK程序编写

1.片选设置

/*** @brief 片选拉低* */
void Nss_Low(void)
{HAL_GPIO_WritePin(NSS_GPIO_Port, NSS_Pin, GPIO_PIN_RESET);
}/*** @brief 片选拉高* */
void Nss_High(void)
{HAL_GPIO_WritePin(NSS_GPIO_Port, NSS_Pin, GPIO_PIN_SET);
}

2.获取ADXL345 ID

这一步是测试通讯的关键一步,同样也可以作为初始化中循环的判断条件
首先我们连接下ADXL345 ID寄存器的地址

2.1 编写ADXL345的读写程序


void ADXL345_Write(uint8_t addr, uint8_t value)
{addr &= 0x3F;Nss_Low();HAL_SPI_Transmit(&hspi1, &addr, 1, 10);HAL_SPI_Transmit(&hspi1, &value, 1, 10);Nss_High();
}void ADXL345_Rread(uint8_t addr, uint8_t *value)
{addr &= 0x3F; addr |= (0x80);Nss_Low();HAL_SPI_Transmit(&hspi1, &addr, 1, 10);HAL_SPI_Receive(&hspi1, value, 1, 10);Nss_High();
}

关于为什么要与上0x3F和或上0x80,请看下图

相信读者看到SPI的时序图后一定能理解本文的操作。

2.2ADXL读取ID

uint8_t Get_Adxl345_ID(void)
{uint8_t DEVICEID = 0x00;uint8_t result = 0;ADXL345_Rread(DEVICEID, &result);return result;
}

程序返回0xe5后即代表通讯成功

3.ADXL345初始化

void ADXL345_Init(void)
{while (Get_Adxl345_ID() != 0xe5){printf("ADXL345 Init Fail:%x\n", Get_Adxl345_ID());HAL_Delay(1000);}ADXL345_Write(INT_ENABLE, 0x00);ADXL345_Write(DATA_FORMAT, 0x0B);ADXL345_Write(BW_RATE, 0x1A);ADXL345_Write(POWER_CTL, 0x08);ADXL345_Write(INT_ENABLE, 0x14);printf("ADXL345 Init Success\n");
}

相关宏定义

#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_ACT      0X24    // 运动阈值寄存器
#define THRESH_INACT    0X25    // 静止阈值寄存器
#define TIME_INACT      0X26    // 静止时间         比例1 sec /LSB
#define ACT_INACT_CTL   0X27    // 启用运动/静止检测
#define THRESH_FF       0X28    // 自由下落阈值   建议采用300 mg与600 mg(0x05至0x09)之间的值 比例62.5 mg/LSB
#define TIME_FF         0X29    // 自由下落时间   建议采用100 ms与350 ms(0x14至0x46)之间的值 比例5ms/LSB
#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

4.读取X轴数据

void ADXL345_Test()
{short x;uint8_t addrxl = 0x32;uint8_t addrxh = 0x33;uint8_t xl, xh;ADXL345_Rread(addrxl, &xl);ADXL345_Rread(addrxh, &xh);x = (short)(((uint16_t)xh << 8) + xl);printf("x:%d\n", x);
}

至此ADXL345驱动完成,本文放在FreeRTOS中的线程读取X轴角度,其余角度无非是改变访问的寄存器。

求关注,求点赞

STM32 HAL库学习笔记-(SPI驱动ADXL345)相关推荐

  1. STM32 HAL库学习笔记1-HAL库简介

    STM32 HAL库学习笔记1-HAL库简介 HAL库 SPL 库 和 HAL 库两者相互独立,互不兼容.几种库的比较如下 目前几种库对不同芯片的支持情况如下 ST 中文官网上有一篇<关于ST库 ...

  2. STM32 HAL库学习笔记4-SPI

    STM32 HAL库学习笔记4-SPI 前言 一.SPI协议简介 SPI物理层 SPI协议层 1.基本通讯过程 2. 通讯的起始和停止信号 3. 数据有效性 4. CPOL/CPHA 及通讯模式 二. ...

  3. STM32 HAL库学习笔记2 HAL库介绍

    STM32 HAL库学习笔记2 HAL库介绍 CMSIS标准 一.再次认识HAL库 HAL库设计思想 HAL库实现方式 以GPIO模块为例 GPIO外设数据类型 GPIO外设接口函数 二.使用HAL库 ...

  4. STM32F407霸天虎HAL库学习笔记——使用ADC采集MQ135的数据并通过OLED显示

    STM32F407霸天虎HAL库学习笔记--使用ADC采集MQ135的数据并通过OLED显示 一.软件准备 二.硬件准备 三.CubeMX配置 四.Keil MQ135.c MQ135.h main函 ...

  5. STM32F407霸天虎HAL库学习笔记——串口发送

    STM32F407霸天虎HAL库学习笔记--串口收发 一.软件准备 二.硬件准备 三.CubeMX配置 四.Keil printf重写 main函数 五.实验效果 一.软件准备 软件准备 二.硬件准备 ...

  6. (HAL库学习8)STM32CubeMX 驱动0.96寸IIC oled(取字模,取图模)

    这一篇讲解用STM32CubeMX来使用0.96寸的IIC oled(128*64,VCC,GND,SCL,SDA四脚) 这篇文章我重新写了,如果你是第二次读到这篇文章,对不起,之前卧病额米有讲清楚, ...

  7. STM32cubemx——HAL库学习笔记 六、IWDG独立看门狗的配置

    一.配置STM32cubeMX工程 在配置好时钟和调试设备以后进行一下操作即可以使用 看门狗的溢出时间公式为 Tout= 分频系数/ 时钟 * 重装载值 二.IWDG的技术讲解 可以到看,看门狗相对于 ...

  8. STM32 HAL库 实现基于SPI模式的SD卡、TF卡FATS文件系统+模拟U盘的应用笔记

    前言 很多单片机不带SDIO接口,所以在使用SD卡时必须使用SPI模式进行读写. 想做一个基于SPI的SD卡文件系统读写SD卡上的文件,再配合USB接口做一个模拟U盘.只能利用业余时间慢慢更新,也不知 ...

  9. 晶联讯12864液晶+STM32+HAL库 IO模拟SPI成功实现显示。

    液晶型号:JLX12864G-290-PN不带字库 芯片型号:STM32F030F4 SPI连接方式:IO口模拟 STM32CubeMX  中引脚设置 JLX12864G_290_PN.h文件 #if ...

  10. STM32 HAL库学习系列第13篇---串口重定向配置--printf

    我的首发平台是公众号[CodeAllen],学习交流QQ群:736386324,本文版权归作者所有,转载请注明出处 发送函数重定向 之后就可以使用输入输出函数 /******************* ...

最新文章

  1. pd.merge 结果出现重复_COUNTIFS函数技巧之去重复值计数(思路分析,过程详解)...
  2. python画折线图代码-python绘制简单折线图代码示例
  3. C语言编程题显示日历,C语言日历问题
  4. java消费者模式_基于Java 生产者消费者模式(详细分析)
  5. GDCM:gdcm::TableReader的测试程序
  6. Java基础--面向对象以及相关知识
  7. 一个传统媒体人转型创业的真实故事
  8. 骁龙8性能巅峰旗舰!黑鲨5系列获3C认证:配备120W快充
  9. LoadDruidSegmentStep failed SQLException: Cannot load JDBC driver class ‘com.mysql.jdbc.Driver‘
  10. Rust: map中的问题,两种写法有什么不同?
  11. java使用ffmpeg转码并上传视频
  12. C#编程,使用 Roslyn引擎动态编译代码
  13. WordPress防止自动压缩jpg图片
  14. mysql 怎么 增加新用户名和密码_在mysql中怎么添加用户名和密码
  15. 支付宝实现当面付扫描支付退款及退款查询
  16. 苹果系统上安装windows教程(图文详解+工具)一看就会!
  17. 2017/7/11 新开博客
  18. Apache POI操作Excel文件
  19. 深信服上网行为管理如何配置双因素/双因子(2FA)身份认证
  20. legacy引导gpt分区_legacy支持gpt吗

热门文章

  1. 【博闻强记】java来发送邮件
  2. Qt5之图形视图框架(一)
  3. html把图片色调一致,ps怎样让两张不同的图片色调统一
  4. Linux运维工程师发展
  5. 错误代码0x800F081F怎么解决,安装NET Framework
  6. 大学英语综合教程三 Unit 2 课文内容英译中 中英翻译
  7. 三菱Q系列PLC基本指令讲解
  8. 视频转GIF小工具,原生javascript + gif.js + canvas,自定义制作表情包
  9. MATLAB之物理场可视化
  10. win10 蓝牙耳机已连接但是耳机仍没有声音,音频仍是扬声器输出问题的出现条件及解决方案