天天看點

K_A12_022 基于STM32等單片機驅動VL53L0X子產品 序列槽與OLED0.96雙顯示一、資源說明二、基本參數三、驅動說明四、部分代碼說明五、基礎知識學習與相關資料下載下傳六、視訊效果展示與程式資料擷取七、注意事項八、接線說明

K_A12_022 基于STM32等單片機驅動VL53L0X子產品 序列槽與OLED0.96雙顯示

  • 一、資源說明
  • 二、基本參數
    • 參數
    • 引腳說明
  • 三、驅動說明
    • UART對應程式:
    • IIC對應程式:
  • 四、部分代碼說明
    • 1、接線引腳定義
      • 1.1、STC89C52RC+VL53L0X子產品
      • 1.2、STM32F103C8T6+VL53L0X子產品
  • 五、基礎知識學習與相關資料下載下傳
  • 六、視訊效果展示與程式資料擷取
  • 七、注意事項
  • 八、接線說明
    • STC89C52RC
      • UART:
      • IIC:
    • STM32F103C8T6
      • UART:
      • IIC:
K_A12_022 基于STM32等單片機驅動VL53L0X子產品 序列槽與OLED0.96雙顯示一、資源說明二、基本參數三、驅動說明四、部分代碼說明五、基礎知識學習與相關資料下載下傳六、視訊效果展示與程式資料擷取七、注意事項八、接線說明

注:偏差校準步驟(均十六進制發送)

1、偏差校準指令

A5 21 0A D0(此處是在10CM處校準)

2、加載資料指令

A5 43 04 EC(斷電重新開機後加載偏差補償)

3、儲存設定指令

A5 87 01 2D(儲存設定後生效)

一、資源說明

單片機型号 測試條件 子產品名稱 代碼功能
STC89C52RC 晶振11.0592M VL53L0X子產品 STC89C52RC驅動VL53L0X子產品參數 序列槽與OLED0.96雙顯示
STM32F103C8T6 晶振8M/系統時鐘72M VL53L0X子產品 STM32F103C8T6驅動VL53L0X子產品參數 序列槽與OLED0.96雙顯示

其他資料目錄 直戳跳轉

二、基本參數

參數

K_A12_022 基于STM32等單片機驅動VL53L0X子產品 序列槽與OLED0.96雙顯示一、資源說明二、基本參數三、驅動說明四、部分代碼說明五、基礎知識學習與相關資料下載下傳六、視訊效果展示與程式資料擷取七、注意事項八、接線說明

引腳說明

VL53L0X子產品 引腳說明
VCC 正極 3.3-5V供電
GND 負極 接GND
CT 序列槽 USART_TX / IIC_SCL
DR 序列槽 USART_RX / IIC_SDA
SET 設定上下限距離報警值(電壓 0~3.3V)
OUT 報警值狀态輸出

三、驅動說明

UART對應程式:

以51為例

void UartInit(void)
{
    SCON=0x50;   //UART方式1:8位UART;   REN=1:允許接收 
    PCON=0x00;   //SMOD=0:波特率不加倍 
    TMOD=0x20;   //T1方式2,用于UART波特率 
    TH1=0xFD; 
    TL1=0xFD;   //UART波特率設定:FDFD,9600;FFFF,57600
    TR1=1;	 //允許T1計數 
    EA=1;
    TCON |=0x40;//啟動定時器1
	IE   |=0x90;//打開序列槽中斷,MCU總中斷
}

void UartSend(uint8_t dat)
{
	while(send_ok);//等待發送緩存為空
 	SBUF = dat;
	send_ok=1;//緩存标志置1
}

void UartSendStr(uint8_t *p)
{
	uint8_t k=0;
    while ((*(p+k))!='\0')
    {
        UartSend(*(p+k));
		k++;
    }
}

           

IIC對應程式:

以51為例

/*
 *@brief 		IIC總線初始化函數
 *@param[in]	NULL
 *@author		MrWeng
 *@date			2020-8-10
 */
void VL53L0X_IIC_Init(void)	
{
		IIC_SDA = 1;//釋放IIC總線的資料線。
		IIC_SCL = 1;//釋放IIC總線的時鐘線。

}
/****************************************************************
通訊起始信号:當 SCL 線是高電平時 SDA 線從高電平向低電平切換,表示通訊的開始;
*****************************************************************/

void VL53L0X_IIC_start(void)  
{

		IIC_SDA = 1;//拉高
		IIC_SCL = 1;
		IIC_Delay();
		IIC_SDA = 0;
		IIC_Delay();
		IIC_SCL = 0;		//拉低時鐘線,準備開始時鐘

}
/****************************************************************
通訊停止信号:當 SCL 是高電平時 SDA線由低電平向高電平切換,表示通訊的停止。
*****************************************************************/

void VL53L0X_IIC_stop(void) 
{

		IIC_SCL = 1;
		IIC_SDA = 0;
		IIC_Delay();
		IIC_SDA = 1;	//通訊停止
		IIC_SCL = 0;
		IIC_Delay();
}
/****************************************************************
//接收應答信号函數
*****************************************************************/

uint8_t VL53L0X_IIC_Get_ack(void)
{
		uint16_t CNT;

		IIC_SCL = 0;		//拉低時鐘線。
		IIC_Delay();
		IIC_SCL = 1;		//拉高時鐘線。
		while((IIC_SDA)  && (CNT < 100) )
		{
				CNT++;
				if(CNT == 100)
				{
						return 0;
				}
		}

		IIC_SCL = 0;		//拉低時鐘線。
		IIC_Delay();
		return 1;

}
/****************************************************************
//發送應答信号函數
*****************************************************************/

void VL53L0X_IIC_ACK(void)	
{ 

		IIC_SDA = 0;	//拉低資料線,應答
		IIC_SCL = 1;	//産生第九個時鐘信号。
		IIC_Delay();
		IIC_SCL = 0;	
		IIC_Delay();
}
//非應答

void VL53L0X_IIC_NACK(void)
{ 

		IIC_SDA = 1;	//拉高資料線,非應答
		IIC_SCL = 1;	//産生第九個時鐘信号。
		IIC_Delay();
		IIC_SCL = 0;	
		IIC_Delay();
}

/****************************************************************
//向IIC總線寫入一個位元組的資料
*****************************************************************/

void VL53L0X_IIC_write_byte(uint8_t Data)
{

		uint8_t i;
		for(i=0;i<8;i++)//八位資料
		{
				if((Data & 0x80) == 0x80)
				{
						IIC_SDA = 1;
				}
				else
				{
						IIC_SDA = 0;
				}
				IIC_Delay();
				IIC_SCL = 1; //一個時鐘信号送入資料
				IIC_Delay();
				IIC_SCL = 0;
				IIC_Delay();
				Data = Data << 1;//資料左移一位,把次高位放在最高位,為寫入次高位做準備
		}
		IIC_SDA = 0;		//應答處理前拉低,跳過應答
		IIC_Delay();
		VL53L0X_IIC_Get_ack();
}
/****************************************************************
//從IIC總線讀取一個位元組的資料函數
*****************************************************************/

uint8_t VL53L0X_IIC_read_byte(void)
{

		uint8_t i;
		uint8_t Data = 0;       //定義一個緩沖寄存器。
		IIC_SCL = 0;	//先拉低時鐘線
		IIC_SDA = 1;	//再拉高資料線
		for(i = 0;i < 8;i++)
		{
				Data = Data<<1;		//将緩沖位元組的資料左移一位,準備讀取資料。
				IIC_SCL = 1;				//拉高時鐘線,開始讀取下一位資料
			  IIC_Delay();
				if(IIC_SDA == 1)		//如果資料線為高平電平。
				{
						Data = Data|0x01;	//則給緩沖位元組的最低位寫1。
				}
				IIC_SCL = 0;				//拉低時鐘線,一位讀取完成
				IIC_Delay();
		}
		return Data;					//傳回讀取的一個位元組資料。



}

           

四、部分代碼說明

1、接線引腳定義

需要自定義引腳可在此處更改,STM32要自定義引腳的話也要注意引腳時鐘使能的更改

1.1、STC89C52RC+VL53L0X子產品

//VL53L0X子產品引腳定義
IIC:
sbit IIC_SDA = P1^0;      //資料線
sbit IIC_SCL = P1^1;      //時鐘線

UART:
CT(TX) ---------------P3.0
DR(RX)----------------P3.1


//OLED0.96子產品引腳定義
sbit SCL=P1^3; //串行時鐘
sbit SDA=P1^2; //串行資料
           

1.2、STM32F103C8T6+VL53L0X子產品

//VL53L0X子產品引腳定義
IIC:
#define IIC_SDA_PIN   			GPIO_Pin_8  //				
#define IIC_SCL_PIN    			GPIO_Pin_9			// 
#define  IIC_SDA_H   			GPIO_SetBits(GPIOB,IIC_SDA_PIN)
#define  IIC_SDA_L   			GPIO_ResetBits(GPIOB,IIC_SDA_PIN)
#define  IIC_SCL_H   			GPIO_SetBits(GPIOB,IIC_SCL_PIN)
#define  IIC_SCL_L   			GPIO_ResetBits(GPIOB,IIC_SCL_PIN)
UART:
#define  DEBUG_USART2_TX_GPIO_PORT       GPIOA   
#define  DEBUG_USART2_TX_GPIO_PIN        GPIO_Pin_2
#define  DEBUG_USART2_RX_GPIO_PORT       GPIOA
#define  DEBUG_USART2_RX_GPIO_PIN        GPIO_Pin_3

//OLED0.96子產品引腳定義					
/*STM32F103C8T6晶片的硬體I2C: PB6 -- SCL; PB7 -- SDA */
GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_6 | GPIO_Pin_7;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD;//I2C必須開漏輸出
GPIO_Init(GPIOB, &GPIO_InitStructure);
           

五、基礎知識學習與相關資料下載下傳

1、STC89C52RC程式下載下傳 直戳跳轉

2、STM32F103C8T6程式下載下傳

(1)序列槽下載下傳 直戳跳轉

(2)ST-LINK下載下傳 直戳跳轉

(3)J-LINK下載下傳 直戳跳轉

(4)DAP-LINK下載下傳 直戳跳轉

3、OLED0.96程式說明 直戳跳轉

4、序列槽助手下載下傳與使用

(1)安信可調試助手使用 直戳跳轉

(2) sscom33序列槽調試助手使用 直戳跳轉

(3)STC-ISP序列槽調試助手使用 直戳跳轉

六、視訊效果展示與程式資料擷取

視訊連接配接 直戳跳轉

資料擷取 ( 滑到最後添加個人号)

七、注意事項

1、VCC GND請勿接反,接反易燒

2、OLED顯示異常時,排除接線接觸不良

八、接線說明

STC89C52RC

UART:

/************************************************************************************
//  生成日期   : 2021-6-21
//  最近修改   : 2021-11-21
//  功能描述   : VL53L0X子產品(UART)測試程式
//  測試條件   : STC89C52RC   晶振11.0592
接線
VL53L0X(UART)--------------------------STC89C52RC
VCC------------------------------------5V
GND------------------------------------GND
CT(TX) --------------------------------P3.0
DR(RX)---------------------------------P3.1

OLED0.96(IIC) -------------------------STC89C52RC
VCC------------------------------------5V
GND------------------------------------GND
SCL------------------------------------P1^3
SDA------------------------------------P1^2
*************************************************************************************/
           

IIC:

/************************************************************************************
//  生成日期   : 2021-6-21
//  最近修改   : 2021-11-21
//  功能描述   : VL53L0X子產品(IIC)測試程式
//  測試條件   : STC89C52RC   晶振11.0592
接線
VL53L0X (IIC)--------------------------STC89C52RC
VCC------------------------------------5V
GND------------------------------------GND
CT(SCL)--------------------------------P1.1
DR(SDA)--------------------------------P1.0

OLED0.96(IIC) -------------------------STC89C52RC
VCC------------------------------------5V
GND------------------------------------GND
SCL------------------------------------P1.3
SDA------------------------------------P1.2
*************************************************************************************/
           

STM32F103C8T6

UART:

/************************************************************************************
//  生成日期   : 2021-6-21
//  最近修改   : 2021-11-21
//  功能描述   : VL53L0X子產品(UART)測試程式
//  測試條件   : STM32F103C8T6   晶振8M  系統時鐘72M
接線
VL53L0X子產品(UART)----------------------STM32F103C8T6
VCC------------------------------------5V
GND------------------------------------GND
CT(TX) --------------------------------PA3
DR(RX)---------------------------------PA2

OLED0.96-------------------------------STM32F103C8T6
VCC------------------------------------3.3V
GND------------------------------------GND
SCL -----------------------------------PB6 
SDA------------------------------------PB7
*************************************************************************************/
           

IIC:

/************************************************************************************
//  生成日期   : 2021-6-21
//  最近修改   : 2021-11-21
//  功能描述   : VL53L0X子產品(IIC)測試程式
//  測試條件   : STM32F103C8T6   晶振8M  系統時鐘72M
接線
VL53L0X子產品(IIC)-----------------------STM32F103C8T6
VCC------------------------------------5V
GND------------------------------------GND
CT(SCL) -------------------------------PB9
DR(SDA)--------------------------------PB8

OLED0.96-------------------------------STM32F103C8T6
VCC------------------------------------3.3V
GND------------------------------------GND
SCL -----------------------------------PB6 
SDA------------------------------------PB7
*************************************************************************************/
           

繼續閱讀