ADX345使用IIC读取数据
IIC配置
方法一:使用IO模拟IIC操作
彩屏显示使用之前修改好的ili9325的程序(lcd.c,lcd.h,gui.c,gui.h),在main.c中直接添加lcd_init()初始化函数,就可以使用lcd和gui中的绘图或者显示字符的函数了,不过需要注意要重定向printf输出到串口。
IIC使用IO模拟,创建IIC初始化和读写函数
ADX345的相关操作
ADX345初始化操作
查看器件 ID。ADXL345 的 ID 寄存器为 0x00
设置 ADXL345 存储数据的方式和通信方式。寄存器地址为:0x31。
设置数据的输出速率设置的是 BW_RATE 寄存器,地址为:0x2C。
设置测量模式和链接模式
设置不启用中断,设置 INT_ENABLE 寄存器,设置它不使用中断模式。
初始化偏移量,设置 OFSX 寄存器、OFSY 寄存器、OFSZ 寄存器。
读寄存器操作
1) 发送起始信号
2) 发送 I2C 写器件地址
3) 等待应答
4) 发送 I2C 要读的寄存器地址
5) 等待应答
6) 发送起始信号
7) 发送 I2C 读器件地址
8) 等待应答
9) 接收返回数据
10) 发送结束信号
写寄存器操作
1) 发送起始信号
2) 发送 I2C 写器件地址
3) 等待应答
4) 发送要写入的寄存器地址
5) 等待应答
6) 发送要写入的数据
7) 等待应答
8) 发送结束信号
注意读到的为8位,需要改成16位
uint8_t readValue[6];
|
*xValue = (uint16_t)(readValue[1] << 8) + readValue[0];
*yValue = (uint16_t)(readValue[3] << 8) + readValue[2];
*zValue = (uint16_t)(readValue[5] << 8) + readValue[4];
STM32CubeMX配置
需要添加得到文件
lcd
void LCD_Init(void);
void LCD_DisplayOn(void);
void LCD_DisplayOff(void);
void LCD_Clear(uint16_t Color);
void LCD_SetCursor(uint16_t Xpos, uint16_t Ypos);
void LCD_DrawPoint(uint16_t x,uint16_t y);//画点
uint16_t LCD_ReadPoint(uint16_t x,uint16_t y); //读点
void LCD_DrawLine(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2);
void LCD_DrawRectangle(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2);
void LCD_SetWindows(uint16_t xStar, uint16_t yStar,uint16_t xEnd,uint16_t yEnd);
void LCD_DrawPoint_16Bit(uint16_t color);
uint16_t LCD_RD_DATA(void);//读取LCD数据
void LCD_WriteReg(uint16_t LCD_Reg, uint16_t LCD_RegValue);
void LCD_WR_DATA(uint16_t data);
uint16_t LCD_ReadReg(uint8_t LCD_Reg);
void LCD_WriteRAM_Prepare(void);
void LCD_WriteRAM(uint16_t RGB_Code);
uint16_t LCD_ReadRAM(void);
uint16_t LCD_BGR2RGB(uint16_t c);
void LCD_SetParam(void);
gui
void GUI_DrawPoint(uint16_t x,uint16_t y,uint16_t color);
void LCD_Fill(uint16_t sx,uint16_t sy,uint16_t ex,uint16_t ey,uint16_t color);
void LCD_DrawLine(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2);
void LCD_DrawRectangle(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2);
void Draw_Circle(uint16_t x0,uint16_t y0,uint16_t fc,uint8_t r);
void LCD_ShowChar(uint16_t x,uint16_t y,uint16_t fc, uint16_t bc, uint8_t num,uint8_t size,uint8_t mode);
void LCD_ShowNum(uint16_t x,uint16_t y,uint32_t num,uint8_t len,uint8_t size);
void LCD_Show2Num(uint16_t x,uint16_t y,uint16_t num,uint8_t len,uint8_t size,uint8_t mode);
void LCD_ShowString(uint16_t x,uint16_t y,uint8_t size,uint8_t *p,uint8_t mode);
void GUI_DrawFont16(uint16_t x, uint16_t y, uint16_t fc, uint16_t bc, uint8_t *s,uint8_t mode);
void GUI_DrawFont24(uint16_t x, uint16_t y, uint16_t fc, uint16_t bc, uint8_t *s,uint8_t mode);
void GUI_DrawFont32(uint16_t x, uint16_t y, uint16_t fc, uint16_t bc, uint8_t *s,uint8_t mode);
void Show_Str(uint16_t x, uint16_t y, uint16_t fc, uint16_t bc, uint8_t *str,uint8_t size,uint8_t mode);
iic
void IIC_Config(void);
void IIC_Start(void);
void IIC_Stop(void);
void IIC_SendData(uint8_t dat);
uint8_t IIC_ReceiveData(uint8_t ack);
int8_t IIC_WaitAck(void);
adx345
在mian函数中添加显示最终结果的程序,注意将获得的变量存入数组中,这样就可以使用原有函数显示变量了。