ADX345使用IIC讀取數據
IIC配置
方法一:使用IO模擬IIC操作
彩屏顯示使用之前修改好的ili9325的程序(lcd.c,lcd.h,gui.c,gui.h),在main.c中直接添加lcd_init()初始化函數抄伍,就可以使用lcd和gui中的繪圖或者顯示字符的函數了糖儡,不過需要注意要重定向printf輸出到串口白对。
IIC使用IO模擬,創(chuàng)建IIC初始化和讀寫函數
ADX345的相關操作
ADX345初始化操作
查看器件 ID简烘。ADXL345 的 ID 寄存器為 0x00
設置 ADXL345 存儲數據的方式和通信方式。寄存器地址為:0x31定枷。
設置數據的輸出速率設置的是 BW_RATE 寄存器孤澎,地址為:0x2C。
設置測量模式和鏈接模式
設置不啟用中斷欠窒,設置 INT_ENABLE 寄存器覆旭,設置它不使用中斷模式。
初始化偏移量岖妄,設置 OFSX 寄存器型将、OFSY 寄存器、OFSZ 寄存器荐虐。
讀寄存器操作
1) 發(fā)送起始信號
2) 發(fā)送 I2C 寫器件地址
3) 等待應答
4) 發(fā)送 I2C 要讀的寄存器地址
5) 等待應答
6) 發(fā)送起始信號
7) 發(fā)送 I2C 讀器件地址
8) 等待應答
9) 接收返回數據
10) 發(fā)送結束信號
寫寄存器操作
1) 發(fā)送起始信號
2) 發(fā)送 I2C 寫器件地址
3) 等待應答
4) 發(fā)送要寫入的寄存器地址
5) 等待應答
6) 發(fā)送要寫入的數據
7) 等待應答
8) 發(fā)送結束信號
注意讀到的為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函數中添加顯示最終結果的程序福扬,注意將獲得的變量存入數組中腕铸,這樣就可以使用原有函數顯示變量了。