orange 发表于 2025-6-24 15:23
大佬,我刚才看了一下代码,就是通过SPI通信,把SPDAT赋值,然后把SPDAT的值缓存到buff里面,在通过Tx把Buff的 ...
SPDAT赋值是发送
SPDAT给别的变量赋值是接收。
下面贴的图不是仿真,是逻辑分析仪查的波形,用的DSLogic逻辑分析仪。
另外仿真看下这几个帖子:
仿真演示-STC单片机教学视频 国芯技术交流网站 - AI32位8051交流社区
【仿真】仿真注意事项总结 | 大家帮继续总结 - 仿真/编译器/汇编器/头文件 国芯技术交流网站 - AI32位8051交流社区
如何仿真MCU的USB功能,不占用MCU自带的USB来支援仿真通信 - 仿真/编译器/汇编器/头文件 国芯技术交流网站 - AI32位8051交流社区
32位8051如何仿真,32G12K128自带硬件USB直接仿真,视频讲解回放 - 仿真/编译器/汇编器/头文件 国芯技术交流网站 - AI32位8051交流社区
ercircle 发表于 2025-6-24 15:37
SPDAT赋值是发送
SPDAT给别的变量赋值是接收。
下面贴的图不是仿真,是逻辑分析仪查的波形,用的DSLogic ...
{:4_188:}{:4_188:}{:4_188:}
ercircle 发表于 2025-6-24 15:37
SPDAT赋值是发送
SPDAT给别的变量赋值是接收。
下面贴的图不是仿真,是逻辑分析仪查的波形,用的DSLogic ...
如果要测试这个程序,只要把串口接到USB转串口,通过串口助手就可以查看SPI发送的数据了么
orange 发表于 2025-7-1 16:32
如果要测试这个程序,只要把串口接到USB转串口,通过串口助手就可以查看SPI发送的数据了么 ...
是串口发给SPI外设通过MOSI引脚发出去,要看回复还得接个Spi从设,它再回回来透传给串口给上位机。
ercircle 发表于 2025-7-1 16:44
是串口发给SPI外设通过MOSI引脚发出去,要看回复还得接个Spi从设,它再回回来透传给串口给上位机。 ...
<p><img src="data/attachment/forum/202507/01/170213zfj2p68j2pv1f21g.png" alt="image.png" title="image.png" /></p>
<p>是这样么</p>
orange 发表于 2025-7-1 17:02
是这样么
是的
ercircle 发表于 2025-7-1 17:06
是的
终于想明白是怎么回事了,我太笨了{:4_192:},
一开机,就会通过串口给上位机发送个字符串:"SPI与UART透传程序";
然后上位机发送数据,触发串口中断函数,将接收到的数据缓存,通过SPI发送,
从机如果给主机发送数据,会触发下面的中断函数吗,这个if条件看不太明白,触发中断后,主机设置的是主机模式,还会执行到else里面给SPI_RxBuffer赋值
void SPI_ISR_Handler() interrupt SPI_VECTOR
{
if(SPCTL & 0x10) //主机模式
{
B_SPI_Busy = 0;
}
else //从机模式
{
if(SPI_RxCnt >= SPI_BUF_LENTH) SPI_RxCnt = 0;
SPI_RxBuffer = SPDAT;
SPI_RxTimerOut = 5;
}
SPSTAT = SPIF + WCOL; //清0 SPIF和WCOL标志
}
orange 发表于 2025-7-1 17:59
终于想明白是怎么回事了,我太笨了,
一开机,就会通过串口给上位机发送个字符串:"SPI与UART透传程序";
然后 ...
这个例子是在8H库函数例子上改的,只是为了验证SPI_SW(SPI_P12_P13_P14_P15);
可以看下原始代码,16-SPI互为主从-串口1透传,是通过切换主从的方式收发消息。
还有一种办法就是一直主机模式,要收消息时发送00或者FF之类的无用字节驱动从机回传消息。
https://www.stcaimcu.com/data/download/DemoCode/STC8G-STC8H-LIB-DEMO-CODE.zip
ercircle 发表于 2025-7-1 18:20
这个例子是在8H库函数例子上改的,只是为了验证SPI_SW(SPI_P12_P13_P14_P15);
可以看下原始代码,16-SPI ...
<p><img src="data/attachment/forum/202507/02/115055nvhhzt2vq3772ttp.png" alt="image.png" title="image.png" /></p>
<p><img src="data/attachment/forum/202507/02/115335mwiwyvxxyxwwy7bv.png" alt="image.png" title="image.png" /></p>
<p>这个config里面定义的主时钟和用ISP下载时候选的时钟有啥关系,</p>
<p>下载时候,要选的一样么</p>
<p>如果不一样,以哪个为准</p>
<p>或者说程序里面定义了主时钟,下载的时候可以把这个勾选去掉</p>
orange 发表于 2025-7-2 11:54
这个config里面定义的主时钟和用ISP下载时候选的时钟有啥关系,
下载时候,要选的一样么
如果不一样,以哪 ...
必须保持一样,一般是计算波特率用的,不一样串口会乱码。