关于openmv与stm32通信数据传输遇到的问题

这篇具有很好参考价值的文章主要介绍了关于openmv与stm32通信数据传输遇到的问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 遇到smt32与openmv无法通信,或者数据对不上。

stm32单片机openmv,stm32,嵌入式硬件,单片机,python
上面的是openmv端发给stm32端的数据
%c4 b‘  ’:是stm32打印接收到的数据

 逐个排查:openmv与pc端串口助手正常发收。stm32与pc端也可以正常发,但是接收数据的时候不能正常接收。
利用LED灯debug。
 确定问题出在stm32端的中断服务函数里反复看中断服务函数,并没有明显的逻辑错误。

经过查找资料发现,因为数据打印用的是串口一,使用时会产生中断。同时单片机接受OpenMV发送的数据使用的是串口一,也会有中断,这时就会产生中断嵌套,导致接受数据错乱。
解决方案:直接不打印数据,等接受完数据之后再打印。
但是发现还是不能正常接收数据。
纯小白,搞了一整天,没错整整是一天,没整出个所以然来。

但是就在今天下午,莫名的就整出来了。通信问题终于是解决问题了。在此记录一下
但是为什么还没弄懂为什么。希望大佬指出!!!

stm32单片机openmv,stm32,嵌入式硬件,单片机,python
解决后的,可以正常接收数据,数据也是正确的


uart = UART(1,115200)   #定义串口1变量
uart.init(115200, bits=8, parity=None, stop=1) 
def sending_data(cx,cy,cw,ch):
    global uart;

    data = bytearray([0x2c,0x12,cx,cy,cw,ch,0x5b]) 
    uart.write(data);

while(True):
    if detect_circle():           #识别圆
        sending_data(YUAN_X,YUAN_Y,YUAN_R,YUAN_R)  #发送数据
        print(YUAN_X,YUAN_Y,YUAN_R,YUAN_R)        #打印数据
        if(uart.any()):                    
            r=uart.read()
            print("%c4",r)                    #打印stm32发来的数据

stm32端的代码

//USART1 中断服务函数
void USART1_IRQHandler(void)			 
{
		u8 com_data; 
		u8 i;
		static u8 RxCounter1=0;
		static u16 RxBuffer1[10]={0};
		static u8 RxState = 0;	


		if( USART_GetITStatus(USART1,USART_IT_RXNE)!=RESET)  	   //接收中断
		{
				USART_ClearITPendingBit(USART1,USART_IT_RXNE);   //清除中断标志位
				com_data = USART_ReceiveData(USART1);
				LED1=0;                                   //打开LED灯
				if(RxState==0&&com_data==0x2C)  //判断帧头是否为0x2c
				{
					RxState=1;
					RxBuffer1[RxCounter1++]=com_data;
					LED1=1;
				}
		
				else if(RxState==1&&com_data==0x12)  //判断帧头是否为0x12
				{
					LED1=0;
					RxState=2;
					RxBuffer1[RxCounter1++]=com_data;
				}
		
				else if(RxState==2)
				{
					RxBuffer1[RxCounter1++]=com_data;

					if(RxCounter1>=10||com_data == 0x5B)     //RxBuffer1接收满了,或者检测到帧尾0x5B
					{
						RxState=3;
						Cx=RxBuffer1[RxCounter1-5];
						Cy=RxBuffer1[RxCounter1-4];
						Cw=RxBuffer1[RxCounter1-3];
						Ch=RxBuffer1[RxCounter1-2];
						LED1=1;
						//printf("%d,%d,%d,%d\n",Cx,Cy,Ch,Cw);
					}
				}
		
				else if(RxState==3)		//检查是否接收到结束标志位
				{
						if(RxBuffer1[RxCounter1-1] == 0x5B)
						{
									USART_ITConfig(USART1,USART_IT_RXNE,DISABLE);//关闭中断
									RxCounter1 = 0;
									RxState = 0;
							//LED1=0;
									printf("%d,%d,%d,%d\n",Cx,Cy,Cw,Ch);
									USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);
									//printf("%d,%d,%d,%d\n",Cx,Cy,Cw,Ch);
						}
						else   //接收错误
						{
									RxState = 0;
									RxCounter1=0;
									for(i=0;i<10;i++)
									{
											RxBuffer1[i]=0x00;      //将接收数组清空
										LED1=0;
									}
						}
				} 
	
				else   //接收异常
				{
						RxState = 0;
						RxCounter1=0;
						for(i=0;i<10;i++)
						{
								RxBuffer1[i]=0x00;      //将接收数组清空
							//LED1=0;
						}
				}

		}
}

本人小白,欢迎大家指出错误。也希望能和大佬们多交流!!!
                    文章来源地址https://www.toymoban.com/news/detail-617803.html

到了这里,关于关于openmv与stm32通信数据传输遇到的问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32+ESP-01s+EMQX实现单片机MQTT协议传输数据上云(二)STM32F103与ESP-01s的Usart通信,实现STM32连接上网上云

    单片机:STM32F103c8t6 WiFi模块:ESP8266-01s EMQX:自身服务器上搭载emq服务器或者借用emqx window 版本  USB TO TTL模块:CH340 因为CH340不能给ESP-01s供3.3V的电,所以测试时需要外加供电           本章中涉及到的技术原理主要为ESP01S wfi模块的AT指令通信,我在上一篇文章给大家提到了

    2024年02月16日
    浏览(35)
  • 关于openmv与stm32之间的串口通信实现

    已经在研一度过快3个月了,研究生学习跟本科学习还是有很大区别的,要善于自己找资料善于自己总结,因此我也决定从现在开始时不时的写写博客总结后面每段时间遇到的各种困难以及解决方法,为以后工作积累经验也方便以后查阅。 这是我第一篇博客,之前都是在做关

    2024年02月14日
    浏览(21)
  • STM32 HAL库定时器触发DMA并口数据传输

    STM32与FPGA通讯,通过8位并口线进行通讯,16byte的数据在10us之内通过8位并口数据线传给FPGA,FPGA读取该数据。 时钟采用80MHz,由于16byte的数据要在10us之内传完,那么10/(16*2)=0.3125us/次,也就是传输频率得≥3.2MHz。 定时器设置:为了方便起见,先选用了4MHz的传输频率。80MHz

    2024年02月02日
    浏览(49)
  • 电脑传输数据STM32模拟I2C显示实时画面到OLED

    写的不好,还望大家指正,有的地方引用了一下大佬的代码。 一、所需硬件: STM32F103C8T6 USB转串口模块 OLED 128*64显示屏 STLINK 二、代码部分 1.stm32串口部分代码 2.stm32OLED屏幕部分代码 3.主程序 4.电脑通过opencv库截取电脑当前1080p一帧画面,并对图片二值化处理,通过电脑端编写

    2024年02月13日
    浏览(28)
  • 【STM32】IIC使用中DMA传输时 发送数据总少一个的问题

    在使用STM32 I2C数据发送过程中,发现每轮实际发送出去的数据总比在DMA配置中设定的传输数据个数要少一个。比方说:DMA配置里设定的传输数据个数是10个,结果发现在总线上只能发出9个,经过进一步发现是少了最后一个数据。当对I2C接收到的数据进行DMA传输时,没有异常。

    2024年02月10日
    浏览(21)
  • 基于OpenMV与STM32的数据通信项目(代码开源)

    前言: 本文为手把手教学   OpenMV 与 STM32 的数据通信项目 教程,本教程使用  STM32F103C8T6 与 OpenMV 进行操作。 OpenMV 是非常强大的计算机视觉实现工具,自身提供了非常多的视觉项目案例,编程与使用门槛极低。为了进一步增强作品的功能与创意性,往往需要将 OpenMV 的视觉与

    2024年02月02日
    浏览(35)
  • stm32串口空闲中断+DMA传输接受不定长数据+letter shell 实现命令行

    空闲中断(IDLE),俗称帧中断,即第一帧数据接收完毕到第二帧数据开始接收期间存在一个空闲状态(每接收一帧数据后空闲标志位置1),检测到此空闲状态后即执行中断程序。 空闲中断的优点在于省去了帧头帧尾的检测 ,进入中断程序即意味着已经接收到一组完整数据,仅需

    2024年02月03日
    浏览(40)
  • STM32_ADC————ADC+DMA多路数据传输,看门狗中断,传感器控制LED

    一:介绍ADC与DMA的基本情况与初始化 二:利用ADC+DMA+看门狗中断+传感器控制LED灯代码 三:总结实验过程中碰到的错误与问题 通过DMA转运ADC的数据,设置ADC的中断看门狗阈值,当光敏传感器的ADC采样值在看门狗高低阈值中间,不触发中断,如果超过看门狗的高低阈值就会触发

    2024年02月04日
    浏览(31)
  • 基于STM32F103C8T6的高速DMA传输多通道ADC数据

    ADC在STM32系列单片机的使用中占用着很大的比例,常见的案例是通过ADC单次转换电压值,这种方式的缺陷在于转换效率不高。一般的单片机带有ADC1和ADC2两个ADC转换,单次转换需要执行一定的程序,想得到结果需要耗费一些时间在赋值,调用中断上面。在此基础上,为了提高转

    2024年02月11日
    浏览(41)
  • HC06蓝牙2.0模块连接不稳定 和 STM32串口不传输数据(串口接收中断)的一些问题

    最近,在一个项目中使用到蓝牙,但是调试过程出现了很多问题。 刚开始使用的是HC06蓝牙,刚开始使用较为正常,可以实现蓝牙模块和电脑设备直接连接,而且数据接收正常。 在接下来的设计中,考虑到适配问题,就设计了配套的蓝牙接收模块,同样是HC06贴片模块。但问题

    2024年02月14日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包