TA的每日心情 | 怒 2014-8-28 17:09 |
---|
签到天数: 1 天 连续签到: 1 天 [LV.1]初来乍到
|
本文将介绍在智能车制作过程中A3BU Xplained板子与wifi模块RMO4进行串口通信功能。
今天想进行A3BU Xplained板子与wifi模块RMO4进行串口通信(该模块是将wifi信号转换成串口信号)。
先查看下RMO4模块是否配置完好,把RMO4 串口(USB转串口)链接我的本本,然后通电,打开笔记本的wifi 能搜索到
本本上运行一个串口&TCP_UDP调试工具.exe 设置参数后
说明一下,这个是用于测试串口是否转换成wifi成功。 用笔记本上的串口发送数据给RMO4模块,该模块可以把数据转化成wifi信号发送出,本本的wifi接收器接收到信号后,显示出,就可以与发送的进行比较,看看效果。
!上面的发送与接收过程是可逆的!
相应参数配置好后,上面的图片看出 传送的效果是相当的完美。
接着来测试安卓手机发送wifi信号 与 RMO4间的通信
首先是在安卓手机上安装一个 网络调试助手(安卓手机版),先打开wifi 搜索到刚才的 HI-LINK_04D5 ,连接上,然后手机上打开刚才的网络调试软件。这个软件在360手机助手上面下载的。 在以前的帖中我有提到。 点击TCP CLINT---增加 ,就可以自动连上了。当然本本上得打开一个 串口调试工具.exe
小试了下发送效果,如图。发现 从RMO4发送的信号,手机接收的正确率为100%,可是 手机发送出的信号,串口接收的正确率很低。原因不明!
截止,说明方案是行得通的,手机可以发出wifi 信号给RMO4的串口 ,再把RMO4的串口接到 A3BU Xplained板子的串口上,就可以实现手机和 A3BU Xplained板子的通信了。
上面关于那个 手机发送出的信号,串口接收的正确率很低的原因大概是找到了,因为设置的是 数据位只有8-bit.
当用手机只发送一位时,比如‘a’, 串口接收的正确率也是100%,迫不及待的将RMO4 上的RXD TXD 接到A3BU Xplained板子的PE2、PE3端口 即USATRE0
修改上次的串口测试代码:
#include <asf.h> // &USARTE0接收#define USART_SERIAL_BAUDRATE 115200#define USART_SERIAL_CHAR_LENGTH USART_CHSIZE_8BIT_gc#define USART_SERIAL_PARITY USART_PMODE_DISABLED_gc#define USART_SERIAL_STOP_BIT trueint main (void){board_init();sysclk_init();//调用ASF框架函数初始化时钟delay_init(sysclk_get_cpu_hz());//调用ASF框架函数初始化delay服务//Create USART options structstatic usart_rs232_options_t USART_SERIAL_OPTIONS = {.baudrate = USART_SERIAL_BAUDRATE,.charlength = USART_SERIAL_CHAR_LENGTH,.paritytype = USART_SERIAL_PARITY,.stopbits = USART_SERIAL_STOP_BIT};sysclk_enable_module(SYSCLK_PORT_E, PR_USART0_bm);//Enable the clock for the USART moduleusart_init_rs232(&USARTE0, &USART_SERIAL_OPTIONS);//Initialize in RS232 mode:uint8_t received_byte;//A variable for the received byte must be added:while(1){received_byte = usart_getchar(&USARTE0);//Wait for reception of a character:usart_putchar(&USARTE0, received_byte);//Echo the character back:if ( received_byte=='a' ){gpio_set_pin_low(LED0);delay_ms(2000); //调用ASF框架函数延时500Msgpio_set_pin_high(LED0);received_byte=0;delay_ms(2000);}}}
编译后, 下载进板子
然后用手机发送一个'a' 并没有出现预期的效果。
在wifi模块与A3BU板子串口通讯的问题,也就是两块单片机上的串口通讯,RMO4上面用的是什么型号的单片机看不到商家做了保密。但是告诉了 RXD TXD,本想直接用 RM04上的 RXD TXD与A3BU板子的RXD TXD相连,但是纠结的是RM04底板上没有引出来,自己动手引出也不好弄,就作罢,但是RM04底板上给的资源有一个9孔的母串口,实在激了个动,就尝试去给A3BU也外接个RS232就找来一个RS232模块,然后自己制了一个两头都是公头的D9串口线 ,这样就让RM04与A3BU串口通讯硬件链接了。
当然 RS232模块得另外供电,自制的串口线,需要用3根,TXD RXD GND .赶紧修改了下之前的代码,让A3BU的 &USARTE0接收到字符a,就令LED灯闪亮。当然现在的A3BU的串口已经是能够接收WIFI信 号的。可以用安卓手机打开网络调试助手软件,搜索连上wifi客户端,然后发送a,就可以看到效果小灯会闪亮,关闭后,小灯熄灭。
#include <asf.h>#define USART_SERIAL &USARTD0 //&USARTD0发送 &USARTE0接收#define USART_SERIAL_BAUDRATE 115200#define USART_SERIAL_CHAR_LENGTH USART_CHSIZE_8BIT_gc#define USART_SERIAL_PARITY USART_PMODE_DISABLED_gc#define USART_SERIAL_STOP_BIT trueint main (void){board_init();sysclk_init();//调用ASF框架函数初始化时钟delay_init(sysclk_get_cpu_hz());//调用ASF框架函数初始化delay服务//Create USART options structstatic usart_rs232_options_t USART_SERIAL_OPTIONS = {.baudrate = USART_SERIAL_BAUDRATE,.charlength = USART_SERIAL_CHAR_LENGTH,.paritytype = USART_SERIAL_PARITY,.stopbits = USART_SERIAL_STOP_BIT };//sysclk_enable_module(SYSCLK_PORT_D, PR_USART0_bm);//Enable the clock for the USART module//usart_init_rs232(&USARTD0, &USART_SERIAL_OPTIONS);//Initialize in RS232 mode:sysclk_enable_module(SYSCLK_PORT_E, PR_USART0_bm);//Enable the clock for the USART moduleusart_init_rs232(&USARTE0, &USART_SERIAL_OPTIONS);//Initialize in RS232 mode:uint8_t received_byte;//A variable for the received byte must be added:while(1){//usart_putchar(&USARTD0, 'a');//Send an 'a' character via USARTreceived_byte = usart_getchar(&USARTE0);//Wait for reception of a character://usart_putchar(&USARTE0, received_byte);//Echo the character back:if ( received_byte=='a' ){gpio_set_pin_low(LED0);delay_ms(2000); //调用ASF框架函数延时500Msgpio_set_pin_high(LED0);received_byte=0;delay_ms(2000);}}}
这个是实验效果视频 |
|