|
5黑幣
本人新手一只,剛接觸單片機一個多月,目前在做一個項目是做激光測距儀,于是在淘寶上淘到一激光測距模塊。
模塊的波特率9600bps, 8位數據位,1位起始位,一位停止位,無奇偶校驗,買時自帶ttl轉USB串口
1.我拿到模塊開始用電腦測試,用串口調試助手直接發送上電代碼,在發送單次測量即可返回測距距離的代碼(以后只發送單次測量代碼即可開始測量無需發送上電)
2.隨后我將供電線,地線,rxd和txd分別接入單片機開發板上,確定供電無問題,將讀寫線直接接到單片機的數據讀寫串口,并燒入以下程序(第一部只是為了測試模塊在單片機控制下正常工作,所以沒有編寫寫入程序),但無法使模塊工作。
3.已知程序中所編寫十六進制的數據能正常發送給上位機的串口調試助手。
以下程序為我使用串口發送激光模塊單次測距的命令的相關代碼:
(參數為出廠設置時,讀取數據的命令: 單次測量:80 06 02 78 )
Usart.c中我定義了一個如下的簡單的發送數據函數:
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中我對此函數進行了調用:
#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--);
}
}
|
最佳答案
查看完整內容
可以,
1, 每個模塊必須要有地址, 作為從機即可; 如果無法設置地址,則看下面
2, 自己用CD4052模擬開關, 將單片機的串口,通過該開關,動態切換.
|