liners 发表于 2023-10-13 13:38:27

SPI的SCK波形很奇怪,有波浪,是正常的吗,是不是A版与BCD版本的区别

        GPIO_InitTypeDef GPIO_InitStructure;
       
        //PN532_SS(P13)        上拉准双向
        GPIO_InitStructure.Pin        = GPIO_Pin_3;
        GPIO_InitStructure.Mode        = GPIO_PullUp;
        GPIO_Inilize(GPIO_P1,&GPIO_InitStructure);        //P1
       
        //PN532_MOSI(P34), PN532_SCK(P32) 上拉准双向
        GPIO_InitStructure.Pin        = GPIO_Pin_2 | GPIO_Pin_4;
        GPIO_InitStructure.Mode        = GPIO_PullUp;
        GPIO_Inilize(GPIO_P3,&GPIO_InitStructure);        //P3
       
        //PN532_MISO(P33) 上拉准双向
        GPIO_InitStructure.Pin        = GPIO_Pin_3;
        GPIO_InitStructure.Mode        = GPIO_PullUp;
        GPIO_Inilize(GPIO_P3,&GPIO_InitStructure);        //P3
       
        //PN532_IRQ(P16), PN532_RSTO(P16) 上拉准双向
        GPIO_InitStructure.Pin        = GPIO_Pin_6 | GPIO_Pin_7;
        GPIO_InitStructure.Mode        = GPIO_PullUp;
        GPIO_Inilize(GPIO_P1,&GPIO_InitStructure);        //P1
       
        //设置初始状态
        PN532_SS_H();




        SPI_SSIG_None();                //忽略 SS 引脚功能,        使用 MSTR 确定器件是主机还是从机
        SPI_Enable();                        //使能 SPI 功能
        SPI_LSB_First();                //先发送/接收数据的低位(LSB)
        SPI_Master();                        //设置主机模式
        SPI_SCLK_NormalH();                //SCLK 空闲时为高电平,SCLK        的前时钟沿为下降沿,后时钟沿为上升沿
        SPI_PhaseH();                        //数据在SCLK 的前时钟沿驱动,后时钟沿采样
        SPI_Speed(3);                        //SPI 时钟频率选择,        0: 4T, 1: 8T,2: 16T,        3: 32T,        当前设置为40M/16=1.25M
       
        SPI_USE_P35P34P33P32();        /* 将SPI切换到P35(SS) P34(MOSI)        P33(MISO) P32(SCLK)。*/
       
        //设置初始状态
               
       

        SPSTAT = SPIF +        WCOL;        //清0 SPIF和WCOL标志






        SPI_SCLK_NormalL();
        SPI_PhaseL();
改成电平就是这样的





做了个死循环一直发送0x55

是不是我用的STC8H8K64U是BCD版本,启用了快速SPI?






神农鼎 发表于 2023-10-13 14:48:02

把你原来图的 PDF 贴上来

liners 发表于 2023-10-13 16:46:01



原理图很简单,SPI口接不接设备都是一样波形,前面的图片我空载测的

乘风飞扬 发表于 2023-10-13 18:51:16

liners 发表于 2023-10-13 16:46
原理图很简单,SPI口接不接设备都是一样波形,前面的图片我空载测的

输出引脚 SCLK、MOSI、SS 设置为推挽输出试试

liners 发表于 2023-10-14 15:15:17

推挽一样的波形,开始这三个就是推挽,后来看例程改的双向

神农鼎 发表于 2023-10-14 15:27:05

把 SPI的外设去掉,空载测试下
=== 跟 MCU 版本无任何关心

liners 发表于 2023-10-16 11:45:57

liners 发表于 2023-10-13 16:46
原理图很简单,SPI口接不接设备都是一样波形,前面的图片我空载测的

这里已经试验过,不接外设,空载测的波形

乘风飞扬 发表于 2023-10-16 14:15:57

本帖最后由 乘风飞扬 于 2023-10-16 14:16 编辑

liners 发表于 2023-10-16 11:45
这里已经试验过,不接外设,空载测的波形根据你的代码及注释判断
SPI_Speed(3);    //SPI 时钟频率选择,      0: 4T, 1: 8T,2: 16T,      3: 32T,      当前设置为40M/16=1.25M你的主频使用40MHz,原本打算进行16分频得到1.25M的SPI时钟
但是如果使用的是STC8H8K64U B/C/D版本芯片的话,实际设置是40M/2=20M的SPI时钟。
高频时钟建议输出口设置推挽输出模式,使能IO口快速电平转换。
如果外设断开,空载情况下就算是准双向模式也不至于出现你测量的样子,引脚上的应该还是有些干扰
以下是B版本芯片实测SCLK 20M时的波形图:

附件是配套测试代码
页: [1]
查看完整版本: SPI的SCK波形很奇怪,有波浪,是正常的吗,是不是A版与BCD版本的区别