orange 发表于 2025-6-24 15:40:27

ercircle 发表于 2025-6-24 15:37
SPDAT赋值是发送
SPDAT给别的变量赋值是接收。
下面贴的图不是仿真,是逻辑分析仪查的波形,用的DSLogic ...

{:4_188:}{:4_188:}{:4_188:}

orange 发表于 2025-7-1 16:32:46

ercircle 发表于 2025-6-24 15:37
SPDAT赋值是发送
SPDAT给别的变量赋值是接收。
下面贴的图不是仿真,是逻辑分析仪查的波形,用的DSLogic ...

如果要测试这个程序,只要把串口接到USB转串口,通过串口助手就可以查看SPI发送的数据了么

ercircle 发表于 2025-7-1 16:44:05

orange 发表于 2025-7-1 16:32
如果要测试这个程序,只要把串口接到USB转串口,通过串口助手就可以查看SPI发送的数据了么 ...

是串口发给SPI外设通过MOSI引脚发出去,要看回复还得接个Spi从设,它再回回来透传给串口给上位机。

orange 发表于 2025-7-1 17:02:26

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>

ercircle 发表于 2025-7-1 17:06:30

orange 发表于 2025-7-1 17:02
是这样么

是的

orange 发表于 2025-7-1 17:59:04

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标志
}

ercircle 发表于 2025-7-1 18:20:14

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

orange 发表于 2025-7-2 11:54:37

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>

ercircle 发表于 2025-7-2 12:01:37

orange 发表于 2025-7-2 11:54
这个config里面定义的主时钟和用ISP下载时候选的时钟有啥关系,
下载时候,要选的一样么
如果不一样,以哪 ...

必须保持一样,一般是计算波特率用的,不一样串口会乱码。

orange 发表于 2025-7-2 17:47:58

ercircle 发表于 2025-7-2 12:01
必须保持一样,一般是计算波特率用的,不一样串口会乱码。

<p>为什么我一编译,c文件下面的.h文件就没了</p>
<p><img src="data/attachment/forum/202507/02/174631rr65c11g5igarntw.png" alt="image.png" title="image.png" /></p>
<p>打开下载的工程:</p>
<p><img src="data/attachment/forum/202507/02/174731c0ix2xjzo4qr7xoo.png" alt="image.png" title="image.png" /></p>
页: 1 2 [3] 4
查看完整版本: 在进行SPI通信的时候,引脚模式该怎么设置