STM32HAL库实现ADXL355加速度传感器简单记步器功能(SPI)
文章目录
# STM32HAL库实现ADXL355加速度传感器简单记步功能
记录一下用正点原子STM32F103RCT6开发板实现对ADXL355加速度传感器的SPI驱动的编写,通过串口打印各轴加速度数值,并根据Z轴的数值实现简单的记步器功能。
一、硬件连接
借助ADXL355加速度传感器的Demo模块,通信接口采用四线SPI实现。
相关套件信息请参考: https://www.analog.com/cn/products/adxl355.html.
芯片手册给出的ADXL355应用电路如下:
四线式SPI连接方式如下:ADXL355模块各引脚与开发板连接引脚为
片选信号CS–>PA4 VCC–>3.3V GND–>GND
SCLK–>PA5
MISO–>PA6
MOSI–>PA7
用6根杜邦线将ADXL355模块与开发板相应引脚连接起来。STM32F103RCT6的SPI1的相关配置可以在STM32CubeMX中进行,后面将进行说明。
二、STM32CubeMx配置
系统时钟配置为72MHz,相关引脚配置如下:
PA4为片选,IO口配置为GPIO_Output模式,之后在程序中通过设置引脚SET或RESET进行拉高或者拉低。
由SPI时序图以及芯片手册相关协议可知,时序方案遵循时钟极性(CPOL)=0和时钟相位(CPHA)=0。SPI时钟速率范围为100kHz至10MHz。
因此,配置SPI模式为Full-Duplex Master,即全双工主机模式,配置SPI通信数据的格式:CPOL为LOW,CPHA为1Edge
最后,配置一下串口1波特率,导出工程即可。
三、程序编写
1.相关寄存器宏定义
相关寄存器定义在芯片手册里找,如何使用、配置等介绍的很详细。
#define XL355_DEVID_AD 0x00
#define XL355_DEVID_MST 0x01
#define XL355_PARTID 0x02
#define XL355_REVID 0x03
#define XL355_STATUS 0x04
#define XL355_FIFO_ENTRIES 0x05
#define XL355_TEMP2 0x06
#define XL355_TEMP1 0x07
#define XL355_XDATA3 0x08
#define XL355_XDATA2 0x09
#define XL355_XDATA1 0x0A
#define XL355_YDATA3 0x0B
#define XL355_YDATA2 0x0C
#define XL355_YDATA1 0x0D
#define XL355_ZDATA3 0x0E
#define XL355_ZDATA2 0x0F
#define XL355_ZDATA1 0x10
#define XL355_FIFO_DATA 0x11
#define XL355_OFFSET_X_H 0x1E
#define XL355_OFFSET_X_L 0x1F
#define XL355_OFFSET_Y_H 0x20
#define XL355_OFFSET_Y_L 0x21
#define XL355_OFFSET_Z_H 0x22
#define XL355_OFFSET_Z_L 0x23
#define XL355_ACT_EN 0x24
#define XL355_ACT_THRESH_H 0x25
#define XL355_ACT_THRESH_L 0x26
#define XL355_ACT_COUNT 0x27
#define XL355_FILTER 0x28
#define XL355_FIFO_SAMPLES 0x29
#define XL355_INT_MAP 0x2A
#define XL355_SYNC 0x2B
#define XL355_RANGE 0x2C
#define XL355_POWER_CTL 0x2D
#define XL355_SELF_TEST 0x2E
#define XL355_RESET 0x2F
uint8_t SPI_ReadWriteByte(uint8_t TData) //通过SPI读写一个字节
{
TxData = TData;
if(HAL_SPI_TransmitReceive(&hspi1,&TxData,&RxData,1,0xff)!=HAL_OK)
RxData=0xFF;
return RxData;
}
2.通过SPI向ADXL355写入一个字节的数据
代码如下: