ch552g中使用SPI进行主从机通信时发现的问题

参考

基本硬件准备

两块独立的ch552g的板子,开始连接时数据传输出现数据错误,本来猜想是通信线连接问题,后来用了较短的连接线依然没有改善,这个问题出现的主要原因还是同步通信的原因。
在这里插入图片描述

前期出现问题

1,一直触发中断

在打印结果中发现,多次触发中断,得出的结论;在中断中添加对中断标志位清零后解决问题

2,为了使得现象明显,通过LED显;但亮度不稳定

猜测:由于使用串口助手检测输出结果,LED引脚和和UART通信的引脚公用了。但是UART发送信号的电压变化相当于一个不规则的PWM导致亮度时刻变化

3,数据出现乱码情况,且每次同样的运行出的输出结果不同

这是主要困扰的问题,发现每次的数据居然不是预期的,而且同样的程序,再次运行时发现结果居然不同。最终意外想起,在SPI引脚和触摸检测的引脚在一个引脚,硬件设计时,多加了电容,在实际使用时忘记拆掉。后来拆掉发现数据输出稳定。
在这里插入图片描述
在这里插入图片描述

4,接收数据和发送数据不一致

主要控制的配置,下面的不同情况配置就是通过改变下面的几个控制参数
在这里插入图片描述

在这里插入图片描述

主机发送数据时无延时

for(COUNT=0;COUNT<10;COUNT++)
	{
		master_cs = 0 ; //低电平片选有效
		REM_FIR = 48+COUNT;
		mDelaymS(1000); 
		
		SPI_WriteByte(REM_FIR); //ASCII码的0字符对应的就是48
		mDelaymS(5);  //这个不能省,否则接收会一直读取数据
		//master_cs = 1 ;  //取消片选
		//mDelayuS(1);  //这个不能省,否则接收会一直读取数据

		LED = 1; //主机显示
		LED1 = !LED1;
		master_cs = 1 ;  //取消片选
		REM_FIR=1;
		
	}
	

下面这些测试结果都是在主机只发送从机只是接收的情况下测试的
在这里插入图片描述
在这里插入图片描述

主机发送有延迟

都能完成正确发送和接收,下面对应的条件和前面(除了主机发送延时)其他都一样,数据传送没问题

在这里插入图片描述

分析上面出现的问题

虽然SPI是实时通信,但从数据写入寄存器然后发送到从机的寄存器,再从从机寄存器读取出来。根据最开始说明的原因,在主机发送数据后,主机和从机都触发中断,但主机想要得到被从机处理过的数据,那么主机中断后需要等待一定时间,这段时间为了让从机处理好数据,然后读取的结果就会稳定了。

在这里插入图片描述

主从机相互通信出现问题

数据出现问题,一种是数据没处理完成或传递控制有问题,而下面的情况说明有部分正确数据,有些不正确。在数据读取过程中出现数据不稳定,说明读取和处理数据的时间可能有冲突(同时发生了)。所以,在从机处理数据时把,主机的中断暂停一会儿再读取数据。
在这里插入图片描述

CH552G的spi传输的几个要点

1,只有主机才能开启spi传输,触发中断的最初原因一定是主机

在这里插入图片描述

2,确定主机和从机

有些控制位只能在从机中使用
在这里插入图片描述

3,主机的读取和发送数据都会出现写寄存器的过程

从下面程序发现,都执行了对寄存器的写入。但需要注意的是,在主机的写入寄存器可能直接触发SPI中断
在这里插入图片描述
由于主机写入SPI0_DATA后会自动触发SPI传输,而一个字节传输完成后,就触发SPI中断了。所以在主机中断函数中,即使最开始对中断标志位清零,但若中断函数中间,主机有对从机的数据操作也可能会置位中断,所以最好在中断函数结尾清零标志位
在这里插入图片描述

在这里插入图片描述

SPI通信的认知

SPI一般都是全双工实时通信,所以在发送数据时一般有短暂的停留使得数据稳定读取
在这里插入图片描述

在这里插入图片描述
整体程序数据运行过程和发送接收方式
在这里插入图片描述
在这里插入图片描述

相关推荐

  1. Android使用USB进行通信4种方式

    2024-07-14 20:54:03       29 阅读
  2. STM32 HAL 主从通信

    2024-07-14 20:54:03       32 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-14 20:54:03       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-14 20:54:03       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-14 20:54:03       58 阅读
  4. Python语言-面向对象

    2024-07-14 20:54:03       69 阅读

热门阅读

  1. ISA95-Part5-安全和权限管理的设计思路

    2024-07-14 20:54:03       22 阅读
  2. 前端请求整合

    2024-07-14 20:54:03       17 阅读
  3. 2024.7.13 刷题总结

    2024-07-14 20:54:03       22 阅读
  4. 安卓热门面试题二

    2024-07-14 20:54:03       19 阅读
  5. 单元化(Cell Sharding)

    2024-07-14 20:54:03       21 阅读
  6. 网络安全-网络设备及其配置1

    2024-07-14 20:54:03       22 阅读
  7. C++指针

    2024-07-14 20:54:03       24 阅读
  8. Tensor-LLM简单介绍

    2024-07-14 20:54:03       22 阅读