|
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模拟开关, 将单片机的串口,通过该开关,动态切换.
|