首页 >> 卡通气模

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

发布时间:2022-10-10 00:45:12 来源:台帆机械网
【连载】基于AVR XMEGA-A3BU Xplained控制器的Wifi小车制作(6)

导读:本文将介绍在智能车制作过程中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? ?? ?? ?? ?? ???true

i

nt main (void)

{

board_init();

sysclk_init();//调用ASF框架函数初始化时钟

delay_init(sysclk_get_cpu_hz());//调用ASF框架函数初始化delay服务

//Create USART options struct

static 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 module

usart_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框架函数延时500Ms

gpio_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? ?? ?? ?? ?true

int main (void)

{

board_init();

sysclk_init();//调用ASF框架函数初始化时钟

delay_init(sysclk_get_cpu_hz());//调用ASF框架函数初始化delay服务

//Create USART options struct

static 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 module

usart_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 USART

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框架函数延时500Ms

gpio_set_pin_high(LED0);

received_byte=0;

delay_ms(2000);

}

}

}

这个是实验效果视频

ˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉ
作者? 张艺

集成灶温度太高怎么办
洗衣机底轮怎么拆卸
冰箱里面食物串味怎么办
冰箱怎么看压缩机坏了
友情链接