• 安装星瞳实验室APP,快速收到回复。扫描二维码或者点击 https://singtown.com/app/
  • 必看:玩转星瞳论坛了解一下图片上传,代码格式等问题。
  • 一个提问,一个帖子,标题为问题的介绍
  • 请贴出具体的代码,与报错提示。
  • 代码一定要让别人可以运行的文本,不要贴图片
  • Openmv通讯问题,两个模块不能通讯,但是stm32或openmv单独与电脑可以通讯。



    • 请教大家一个问题
      ,Stm32f的单片机usart通讯程序已经写好了,电脑用串口助手发送“指定信息”可以让单片机实现预设功能。我使用的是openmv识别二维码功能(发送出的只是二维码内容,坐标什么已经被我去掉了)。电脑用串口助手也能正常运行,显示扫出来的内容,并且能把识别出的二维码信息发送给电脑。可是我将两个设备链接起来却不行了。(不知道是不是单片机没收到openmv的字符串)波特率一致的,我感觉一定是我搞错了,就是不知道有什么没注意到的地方。真心请教各位大神!



    • 怎么不行的?

      具体的故障现象?



    • @kidswong999 STM32的单片机与电脑通讯时是可以的,openmv与电脑通讯时也是可以的。发送接收的字符串也是经过电脑测试过的。但是不用电脑通讯直接将两个模块链接起来好像就不行了。openmv是不是要设置其他什么通讯协议?各位前辈有做过通讯的能指点一二么?



    • 直接将两个模块两个起来的时候,可以用示波器接在rx tx看一下信息。



    • 好的,老师需要看一些什么参数?等放假结束回学校看一下。我这边传几张图片是自己测试的图。





    • 小智老师,目前就是不知道问题出在哪了。两块硬件驱动还需要别的协议么?



    • 可以了,就是换行符的问题



    • 您好,请教一下您32里面“strcmp((const char*)USART_RX_BUF,"001")”这个函数是您自己写的还是用的库里面的?我和你用的应该是个库,找了半天没找见这个字符比较函数,可否指点一二?



    • 此回复已被删除!


    • 此回复已被删除!


    • @15536895760
      重新打了一遍,第一次贴程序。。。不会弄

      #include "led.h"
      #include "delay.h"
      #include "key.h"
      #include "sys.h"
      #include "usart.h"
      #include "string.h"	 
      #include "stdlib.h"
      #include "stm32f10x.h"
      #include "beep.h"
      int main(void)
       {	
      
      u16 len;
      
      delay_init();	    	 //延时函数初始化	
      NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组及优先级
      uart_init(115200);	 //串口初始化为115200
      LED_Init();			     //LED端口初始化
      KEY_Init();          //初始化与按键连接的硬件接口
      while(1)
         {
      	if(USART_RX_STA&0x8000)
      	{	
      			   
      		len=USART_RX_STA&0x3fff;//得到此次接收到的数据长度
      		printf("接收的字符:%s\n",USART_RX_BUF);     //打印接收字符
      		printf(" 字符的长度:%d\n",len);             //打印字符长度
      			
      			for(;strcmp((const char*)USART_RX_BUF,"001")==0;)   //通讯控制指令字符 001 判断 //strcmp 包含头文件#include "string.h"	 
      				{
      					printf("响0.5s");//打印灯灭 
      					LED_OFF();
      					break;
      					
      				}
      			for(;strcmp((const char*)USART_RX_BUF,"002")==0;)   //通讯控制指令字符 002 判断
      				{
      					printf("响1.0s"); //打印灯灭 闪烁    //这步图片没有放出来
      					LED_ON();
      					break;
      				}
      				memset(USART_RX_BUF,0,sizeof(USART_RX_BUF));     //		清空字符否则数据过长会造成混乱-> >#include "stdlib.h"
      				
      		
      		USART_RX_STA=0;
      	}
      }
      

      }



    • @18852935127 谢谢了



    • 您好,我也在做这个通讯,也是单片机和openmv通信不成功,请问下您说的换行符解决方法具体是怎么解决的



    • 需要在openmv程序里加一个\r\n。你输入\n看着是换行了,其实不然。我把程序贴出来可以参考一下我的解决办法。



    • import sensor, image, time,json
      from pyb import UART
      sensor.reset()
      sensor.set_pixformat(sensor.GRAYSCALE)
      sensor.set_framesize(sensor.VGA)
      sensor.set_windowing((240, 240))
      sensor.skip_frames(30)
      sensor.set_auto_gain(False) # must turn this off to prevent image washout...
      clock = time.clock()

      uart = UART(3, 115200)

      while(True):
      img = sensor.snapshot() # Take a picture and return the image.
      for code in img.find_qrcodes():
      output_str = code[4]
      print(output_str,'\r')
      uart.write(output_str+'\r')
      uart.write('\n') #上面没办法加\n这边特地多加了(\n)不加不行的。



    • 你好 你的问题解决了吗