本人新手一只,剛接觸單片機(jī)一個(gè)多月,目前在做一個(gè)項(xiàng)目是做激光測(cè)距儀,于是在淘寶上淘到一激光測(cè)距模塊。
模塊的波特率9600bps, 8位數(shù)據(jù)位,1位起始位,一位停止位,無奇偶校驗(yàn),買時(shí)自帶ttl轉(zhuǎn)USB串口
1.我拿到模塊開始用電腦測(cè)試,用串口調(diào)試助手直接發(fā)送上電代碼,在發(fā)送單次測(cè)量即可返回測(cè)距距離的代碼(以后只發(fā)送單次測(cè)量代碼即可開始測(cè)量無需發(fā)送上電)
2.隨后我將供電線,地線,rxd和txd分別接入單片機(jī)開發(fā)板上,確定供電無問題,將讀寫線直接接到單片機(jī)的數(shù)據(jù)讀寫串口,并燒入以下程序(第一部只是為了測(cè)試模塊在單片機(jī)控制下正常工作,所以沒有編寫寫入程序),但無法使模塊工作。
3.已知程序中所編寫十六進(jìn)制的數(shù)據(jù)能正常發(fā)送給上位機(jī)的串口調(diào)試助手。
以下程序?yàn)槲沂褂么诎l(fā)送激光模塊單次測(cè)距的命令的相關(guān)代碼:
(參數(shù)為出廠設(shè)置時(shí),讀取數(shù)據(jù)的命令: 單次測(cè)量:80 06 02 78 )
Usart.c中我定義了一個(gè)如下的簡(jiǎn)單的發(fā)送數(shù)據(jù)函數(shù):
void send_data_yhr(void)
{
USART_ClearFlag(USART2,USART_FLAG_TC);
USART_SendData(USART2, 0x80);
while( USART_GetFlagStatus(USART2,USART_FLAG_TC) == RESET);
delay_ms(200);
USART_SendData(USART2, 0x06);
while(USART_GetFlagStatus(USART2, USART_FLAG_TC) == RESET);
delay_ms(200);
USART_SendData(USART2, 0x02);
while(USART_GetFlagStatus(USART2, USART_FLAG_TC) == RESET);
delay_ms(200);
USART_SendData(USART2, 0x78);
while(USART_GetFlagStatus(USART2, USART_FLAG_TC) == RESET);
delay_ms(200);
}
在Main.c中我對(duì)此函數(shù)進(jìn)行了調(diào)用:
#include "main.h"
int main(void)
{
USART2_Configuration();
while(1)
{
send_data_yhr();
delay_ms(200);
}
}
在Delay.c里:
void delay_ms(unsigned int t)
{
int i;
for( i=0;i<t;i++)
{
int a=10300;
while(a--);
}
}
|