上一篇我们已经将程序烧录进了YS-V0.7模块中,接下来我们将它与开发版进行连接
野火开发版关于串口 2 的引脚定义
- 将模块的5V与开发板的5V对接
- 将模块的GDN与开发板的GDN对接
- 将模块的TX与开发板的RX对接
- 将模块的RX与开发板的TX对接
具体接线方式(具体方式随板子接口不同变动)
接下来我们开始编写开发板部分的接收与基础rgb灯的程序
/* 通过RTT例子修改 用于测试YSV0.7是否可用 */ #include <rtthread.h> #include <rtdevice.h> #include <board.h> #define LED0_PIN GET_PIN(B, 1) //定位到野火开发板上两个RGB相关的寄存器上 #define LED0_PINE GET_PIN(B, 0) #define SAMPLE_UART_NAME "uart2" static rt_device_t serial; /* 串口设备句柄 */ struct serial_configure config = RT_SERIAL_CONFIG_DEFAULT; /* 配置参数 */ /* 用于接收消息的信号量 */ static struct rt_semaphore rx_sem; static rt_device_t serial; /* 接收数据回调函数 */ static rt_err_t uart_input(rt_device_t dev, rt_size_t size) { /* 串口接收到数据后产生中断,调用此回调函数,然后发送接收信号量 */ rt_sem_release(&rx_sem); return RT_EOK; } static void serial_thread_entry(void *parameter) { char ch; while (1) { /* 从串口读取一个字节的数据,没有读取到则等待接收信号量 */ while (rt_device_read(serial, -1, &ch, 1) != 1) { /* 阻塞等待接收信号量,等到信号量后再次读取数据 */ rt_sem_take(&rx_sem, RT_WAITING_FOREVER); } // 检测接受缓存区内的字符,与手机发送字符对应,已达到检测开灯的效果 if(ch == 'a'){ rt_pin_mode(LED0_PIN, PIN_MODE_OUTPUT); rt_pin_mode(LED0_PINE, PIN_MODE_OUTPUT); } if(ch == '0'){ rt_pin_mode(LED0_PIN, PIN_MODE_OUTPUT); rt_pin_mode(LED0_PINE, PIN_MODE_OUTPUT); } if(ch == 'u'){ rt_pin_write(LED0_PIN, PIN_HIGH); rt_thread_mdelay(500); } if(ch == 'n'){ rt_pin_write(LED0_PIN, PIN_LOW); rt_thread_mdelay(500); } if(ch == 'b'){ rt_pin_write(LED0_PINE, PIN_HIGH); rt_thread_mdelay(500); } if(ch == 'i'){ rt_pin_write(LED0_PINE, PIN_LOW); rt_thread_mdelay(500); } } } static int mdr1(int argc, char *argv[]) { rt_err_t ret = RT_EOK; char uart_name[RT_NAME_MAX]; if (argc == 2) { rt_strncpy(uart_name, argv[1], RT_NAME_MAX); } else { rt_strncpy(uart_name, SAMPLE_UART_NAME, RT_NAME_MAX); } /* 查找系统中的串口设备 */ serial = rt_device_find(uart_name); rt_device_control(serial, RT_DEVICE_CTRL_CONFIG, &config); if (!serial) { rt_kprintf("find %s failed!\n", uart_name); return RT_ERROR; } /* 初始化信号量 */ rt_sem_init(&rx_sem, "rx_sem", 0, RT_IPC_FLAG_FIFO); /* 以中断接收及轮询发送模式打开串口设备 */ rt_device_open(serial, RT_DEVICE_FLAG_INT_RX); config.baud_rate = BAUD_RATE_9600; //配置串口通信为9600 config.data_bits = DATA_BITS_8; config.stop_bits = STOP_BITS_1; config.parity = PARITY_NONE; /* 打开设备后才可修改串口配置参数 */ rt_device_control(serial, RT_DEVICE_CTRL_CONFIG, &config); /* 设置接收回调函数 */ rt_device_set_rx_indicate(serial, uart_input); /* 发送字符串 */ // rt_device_write(serial, 0, str, (sizeof(str) - 1)); /* 创建 serial 线程 */ rt_thread_t thread = rt_thread_create("serial", serial_thread_entry, RT_NULL, 1024, 25, 10); /* 创建成功则启动线程 */ if (thread != RT_NULL) { rt_thread_startup(thread); } else { ret = RT_ERROR; } return ret; } /* 导出到 msh 命令列表中 */ MSH_CMD_EXPORT(mdr1, uart JUN);
在RTT的bsp中加入本C文件,编译运行后烧录进开发板中
在开发板复位运行后,在msh>输入mdr1
输入后
对着麦克风,说出“杰哥”口令,可以看到YS模块上的D1灯被点亮了
之后,再说出“均鞭”口令,可以看到开发板上的灯被点亮了,说明通信有效
之后再以此说出“杰哥”指令,和“关灯”指令后,灯也能跟随指令进行关闭动作。