查看: 756|回复: 0

【连载】基于AVR XMEGA-A3BU Xplained控制器的Wifi小车制作(6)

[复制链接]
  • TA的每日心情

    2014-8-28 17:09
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2014-8-23 01:07:00 | 显示全部楼层 |阅读模式
    分享到:
    本文将介绍在智能车制作过程中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);}}}
    这个是实验效果视频
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-3-28 21:12 , Processed in 0.126359 second(s), 18 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.