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?
把你原来图的 PDF 贴上来
原理图很简单,SPI口接不接设备都是一样波形,前面的图片我空载测的
liners 发表于 2023-10-13 16:46
原理图很简单,SPI口接不接设备都是一样波形,前面的图片我空载测的
输出引脚 SCLK、MOSI、SS 设置为推挽输出试试 推挽一样的波形,开始这三个就是推挽,后来看例程改的双向 把 SPI的外设去掉,空载测试下
=== 跟 MCU 版本无任何关心
liners 发表于 2023-10-13 16:46
原理图很简单,SPI口接不接设备都是一样波形,前面的图片我空载测的
这里已经试验过,不接外设,空载测的波形 本帖最后由 乘风飞扬 于 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]