K_A12_022 基于STM32等单片机驱动VL53L0X模块 串口与OLED0.96双显示
K_A12_022 基于STM32等單片機(jī)驅(qū)動(dòng)VL53L0X模塊 串口與OLED0.96雙顯示
- 一、資源說(shuō)明
- 二、基本參數(shù)
- 參數(shù)
- 引腳說(shuō)明
- 三、驅(qū)動(dòng)說(shuō)明
- UART對(duì)應(yīng)程序:
- IIC對(duì)應(yīng)程序:
- 四、部分代碼說(shuō)明
- 1、接線引腳定義
- 1.1、STC89C52RC+VL53L0X模塊
- 1.2、STM32F103C8T6+VL53L0X模塊
- 五、基礎(chǔ)知識(shí)學(xué)習(xí)與相關(guān)資料下載
- 六、視頻效果展示與程序資料獲取
- 七、注意事項(xiàng)
- 八、接線說(shuō)明
- STC89C52RC
- UART:
- IIC:
- STM32F103C8T6
- UART:
- IIC:
注:偏差校準(zhǔn)步驟(均十六進(jìn)制發(fā)送)
1、偏差校準(zhǔn)命令
A5 21 0A D0(此處是在10CM處校準(zhǔn))
2、加載數(shù)據(jù)命令
A5 43 04 EC(斷電重啟后加載偏差補(bǔ)償)
3、保存設(shè)置命令
A5 87 01 2D(保存設(shè)置后生效)
一、資源說(shuō)明
| STC89C52RC | 晶振11.0592M | VL53L0X模塊 | STC89C52RC驅(qū)動(dòng)VL53L0X模塊參數(shù) 串口與OLED0.96雙顯示 |
| STM32F103C8T6 | 晶振8M/系統(tǒng)時(shí)鐘72M | VL53L0X模塊 | STM32F103C8T6驅(qū)動(dòng)VL53L0X模塊參數(shù) 串口與OLED0.96雙顯示 |
其他資料目錄 直戳跳轉(zhuǎn)
二、基本參數(shù)
參數(shù)
引腳說(shuō)明
| VCC | 正極 3.3-5V供電 |
| GND | 負(fù)極 接GND |
| CT | 串口 USART_TX / IIC_SCL |
| DR | 串口 USART_RX / IIC_SDA |
| SET | 設(shè)置上下限距離報(bào)警值(電壓 0~3.3V) |
| OUT | 報(bào)警值狀態(tài)輸出 |
三、驅(qū)動(dòng)說(shuō)明
UART對(duì)應(yīng)程序:
以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波特率設(shè)置:FDFD,9600;FFFF,57600TR1=1; //允許T1計(jì)數(shù) EA=1;TCON |=0x40;//啟動(dòng)定時(shí)器1IE |=0x90;//打開(kāi)串口中斷,MCU總中斷 }void UartSend(uint8_t dat) {while(send_ok);//等待發(fā)送緩存為空SBUF = dat;send_ok=1;//緩存標(biāo)志置1 }void UartSendStr(uint8_t *p) {uint8_t k=0;while ((*(p+k))!='\0'){UartSend(*(p+k));k++;} }IIC對(duì)應(yīng)程序:
以51為例
/**@brief IIC總線初始化函數(shù)*@param[in] NULL*@author MrWeng*@date 2020-8-10*/ void VL53L0X_IIC_Init(void) {IIC_SDA = 1;//釋放IIC總線的數(shù)據(jù)線。IIC_SCL = 1;//釋放IIC總線的時(shí)鐘線。} /**************************************************************** 通訊起始信號(hào):當(dāng) SCL 線是高電平時(shí) SDA 線從高電平向低電平切換,表示通訊的開(kāi)始; *****************************************************************/void VL53L0X_IIC_start(void) {IIC_SDA = 1;//拉高IIC_SCL = 1;IIC_Delay();IIC_SDA = 0;IIC_Delay();IIC_SCL = 0; //拉低時(shí)鐘線,準(zhǔn)備開(kāi)始時(shí)鐘} /**************************************************************** 通訊停止信號(hào):當(dāng) SCL 是高電平時(shí) SDA線由低電平向高電平切換,表示通訊的停止。 *****************************************************************/void VL53L0X_IIC_stop(void) {IIC_SCL = 1;IIC_SDA = 0;IIC_Delay();IIC_SDA = 1; //通訊停止IIC_SCL = 0;IIC_Delay(); } /**************************************************************** //接收應(yīng)答信號(hào)函數(shù) *****************************************************************/uint8_t VL53L0X_IIC_Get_ack(void) {uint16_t CNT;IIC_SCL = 0; //拉低時(shí)鐘線。IIC_Delay();IIC_SCL = 1; //拉高時(shí)鐘線。while((IIC_SDA) && (CNT < 100) ){CNT++;if(CNT == 100){return 0;}}IIC_SCL = 0; //拉低時(shí)鐘線。IIC_Delay();return 1;} /**************************************************************** //發(fā)送應(yīng)答信號(hào)函數(shù) *****************************************************************/void VL53L0X_IIC_ACK(void) { IIC_SDA = 0; //拉低數(shù)據(jù)線,應(yīng)答IIC_SCL = 1; //產(chǎn)生第九個(gè)時(shí)鐘信號(hào)。IIC_Delay();IIC_SCL = 0; IIC_Delay(); } //非應(yīng)答void VL53L0X_IIC_NACK(void) { IIC_SDA = 1; //拉高數(shù)據(jù)線,非應(yīng)答IIC_SCL = 1; //產(chǎn)生第九個(gè)時(shí)鐘信號(hào)。IIC_Delay();IIC_SCL = 0; IIC_Delay(); }/**************************************************************** //向IIC總線寫入一個(gè)字節(jié)的數(shù)據(jù) *****************************************************************/void VL53L0X_IIC_write_byte(uint8_t Data) {uint8_t i;for(i=0;i<8;i++)//八位數(shù)據(jù){if((Data & 0x80) == 0x80){IIC_SDA = 1;}else{IIC_SDA = 0;}IIC_Delay();IIC_SCL = 1; //一個(gè)時(shí)鐘信號(hào)送入數(shù)據(jù)IIC_Delay();IIC_SCL = 0;IIC_Delay();Data = Data << 1;//數(shù)據(jù)左移一位,把次高位放在最高位,為寫入次高位做準(zhǔn)備}IIC_SDA = 0; //應(yīng)答處理前拉低,跳過(guò)應(yīng)答IIC_Delay();VL53L0X_IIC_Get_ack(); } /**************************************************************** //從IIC總線讀取一個(gè)字節(jié)的數(shù)據(jù)函數(shù) *****************************************************************/uint8_t VL53L0X_IIC_read_byte(void) {uint8_t i;uint8_t Data = 0; //定義一個(gè)緩沖寄存器。IIC_SCL = 0; //先拉低時(shí)鐘線IIC_SDA = 1; //再拉高數(shù)據(jù)線for(i = 0;i < 8;i++){Data = Data<<1; //將緩沖字節(jié)的數(shù)據(jù)左移一位,準(zhǔn)備讀取數(shù)據(jù)。IIC_SCL = 1; //拉高時(shí)鐘線,開(kāi)始讀取下一位數(shù)據(jù)IIC_Delay();if(IIC_SDA == 1) //如果數(shù)據(jù)線為高平電平。{Data = Data|0x01; //則給緩沖字節(jié)的最低位寫1。}IIC_SCL = 0; //拉低時(shí)鐘線,一位讀取完成IIC_Delay();}return Data; //返回讀取的一個(gè)字節(jié)數(shù)據(jù)。}四、部分代碼說(shuō)明
1、接線引腳定義
需要自定義引腳可在此處更改,STM32要自定義引腳的話也要注意引腳時(shí)鐘使能的更改
1.1、STC89C52RC+VL53L0X模塊
//VL53L0X模塊引腳定義 IIC: sbit IIC_SDA = P1^0; //數(shù)據(jù)線 sbit IIC_SCL = P1^1; //時(shí)鐘線UART: CT(TX) ---------------P3.0 DR(RX)----------------P3.1//OLED0.96模塊引腳定義 sbit SCL=P1^3; //串行時(shí)鐘 sbit SDA=P1^2; //串行數(shù)據(jù)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必須開(kāi)漏輸出 GPIO_Init(GPIOB, &GPIO_InitStructure);五、基礎(chǔ)知識(shí)學(xué)習(xí)與相關(guān)資料下載
1、STC89C52RC程序下載 直戳跳轉(zhuǎn)
2、STM32F103C8T6程序下載
(1)串口下載 直戳跳轉(zhuǎn)
(2)ST-LINK下載 直戳跳轉(zhuǎn)
(3)J-LINK下載 直戳跳轉(zhuǎn)
(4)DAP-LINK下載 直戳跳轉(zhuǎn)
3、OLED0.96程序說(shuō)明 直戳跳轉(zhuǎn)
4、串口助手下載與使用
(1)安信可調(diào)試助手使用 直戳跳轉(zhuǎn)
(2) sscom33串口調(diào)試助手使用 直戳跳轉(zhuǎn)
(3)STC-ISP串口調(diào)試助手使用 直戳跳轉(zhuǎn)
六、視頻效果展示與程序資料獲取
視頻連接 直戳跳轉(zhuǎn)
資料獲取 ( 滑到最后添加個(gè)人號(hào))
七、注意事項(xiàng)
1、VCC GND請(qǐng)勿接反,接反易燒
2、OLED顯示異常時(shí),排除接線接觸不良
八、接線說(shuō)明
STC89C52RC
UART:
/************************************************************************************ // 生成日期 : 2021-6-21 // 最近修改 : 2021-11-21 // 功能描述 : VL53L0X模塊(UART)測(cè)試程序 // 測(cè)試條件 : STC89C52RC 晶振11.0592 接線 VL53L0X(UART)--------------------------STC89C52RC VCC------------------------------------5V GND------------------------------------GND CT(TX) --------------------------------P3.0 DR(RX)---------------------------------P3.1OLED0.96(IIC) -------------------------STC89C52RC VCC------------------------------------5V GND------------------------------------GND SCL------------------------------------P1^3 SDA------------------------------------P1^2 *************************************************************************************/IIC:
/************************************************************************************ // 生成日期 : 2021-6-21 // 最近修改 : 2021-11-21 // 功能描述 : VL53L0X模塊(IIC)測(cè)試程序 // 測(cè)試條件 : STC89C52RC 晶振11.0592 接線 VL53L0X (IIC)--------------------------STC89C52RC VCC------------------------------------5V GND------------------------------------GND CT(SCL)--------------------------------P1.1 DR(SDA)--------------------------------P1.0OLED0.96(IIC) -------------------------STC89C52RC VCC------------------------------------5V GND------------------------------------GND SCL------------------------------------P1.3 SDA------------------------------------P1.2 *************************************************************************************/STM32F103C8T6
UART:
/************************************************************************************ // 生成日期 : 2021-6-21 // 最近修改 : 2021-11-21 // 功能描述 : VL53L0X模塊(UART)測(cè)試程序 // 測(cè)試條件 : STM32F103C8T6 晶振8M 系統(tǒng)時(shí)鐘72M 接線 VL53L0X模塊(UART)----------------------STM32F103C8T6 VCC------------------------------------5V GND------------------------------------GND CT(TX) --------------------------------PA3 DR(RX)---------------------------------PA2OLED0.96-------------------------------STM32F103C8T6 VCC------------------------------------3.3V GND------------------------------------GND SCL -----------------------------------PB6 SDA------------------------------------PB7 *************************************************************************************/IIC:
/************************************************************************************ // 生成日期 : 2021-6-21 // 最近修改 : 2021-11-21 // 功能描述 : VL53L0X模塊(IIC)測(cè)試程序 // 測(cè)試條件 : STM32F103C8T6 晶振8M 系統(tǒng)時(shí)鐘72M 接線 VL53L0X模塊(IIC)-----------------------STM32F103C8T6 VCC------------------------------------5V GND------------------------------------GND CT(SCL) -------------------------------PB9 DR(SDA)--------------------------------PB8OLED0.96-------------------------------STM32F103C8T6 VCC------------------------------------3.3V GND------------------------------------GND SCL -----------------------------------PB6 SDA------------------------------------PB7 *************************************************************************************/總結(jié)
以上是生活随笔為你收集整理的K_A12_022 基于STM32等单片机驱动VL53L0X模块 串口与OLED0.96双显示的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 大象都能跳舞了
- 下一篇: cocos2dx-js 开发