|
折腾完OLED开始折腾WIFI这块了,由于选取的串口转WIFI的模块很多东西都瞬间简单了许多,只需配置串口用AT指令可以配置WIFI的网关 IP 端口,剩下的TCP方面的协议都被模块搞定了。数据通过透传模式通讯,折腾了一下串口DMA 不定长数据接收,另外初步确定了一下通讯协议协议格式如下:
帧头1个字节 数据长度1个字节 命令1个字节 数据(不定长根据命令设定) 效验1个字节(异或);
涉及的主要命令有 各通道亮度设定、各通道打开关闭、用户触发流程设定、删除、软件触发、等。
然后就说一下串口DMA不定长接收数据。用的是串口空闲中断,配合DMA接收函数如下。
void WIFI_REC_DMA(uint8_t *pData, uint16_t Size)
{
dma_parameter_struct dma_init_struct;
rcu_periph_clock_enable(RCU_DMA);
dma_deinit(DMA_CH2);
dma_init_struct.direction = DMA_PERIPHERAL_TO_MEMORY;
dma_init_struct.memory_addr = (uint32_t)pData;
dma_init_struct.memory_inc = DMA_MEMORY_INCREASE_ENABLE;
dma_init_struct.memory_width = DMA_MEMORY_WIDTH_8BIT;
dma_init_struct.number = Size;
dma_init_struct.periph_addr = 0x40013824;
dma_init_struct.periph_inc = DMA_PERIPH_INCREASE_DISABLE;
dma_init_struct.periph_width = DMA_PERIPHERAL_WIDTH_8BIT;
dma_init_struct.priority = DMA_PRIORITY_ULTRA_HIGH;
dma_init(DMA_CH2, dma_init_struct);
dma_circulation_disable(DMA_CH2);
dma_memory_to_memory_disable(DMA_CH2);
dma_channel_enable(DMA_CH2);
usart_dma_receive_config(USART0,USART_DENR_ENABLE);
}
调试期间犯了一个低级错误就是usUSART_DENR_ENABLE 这个标志位用于没怎么看直接复制成USART_DENT_ENABLE了导致郁闷半天唉,最后还是一点一点看用户手册看标志位才发现错误。
OK 重要的事情总会留在后边说好的丑陋的APP 要登场了,闲着没事本来想着既然有WIFI那也可以叫做物联网,不写个手机APP都对不起我的WIFI 模块。但是本人不会JAVA,找了半天最省事的方案就是用QT来写。虽然QT也不怎么熟,边百度边写的各位凑合看,先来个手机界面截图,测试视频只是测试软件触发、还有调光部分、用户流程设定方面还没有写,过几天逐步细化吧。手机截图如下:
测试视频手有点汗再加上另外一个手在录视频所以滑动不是很流流畅。
http://v.youku.com/v_show/id_XMzgzMzc5NDYwMA==.html?x&sharefrom=android&sharekey=d8a871c8c13bd658daae98ae1bf68a602
|
|