STC15W4K56S4的SPI口无法切换到第二组管脚
STC15W4K56S4的SPI口无法切换到第二组管脚,示波器看不到时钟信号,但是切换到第一第三组都正常,用的官方库实例。同样的代码在STC15F2K60S2上测试却没有这个问题。原因查找中。
void SPI_config(void)
{
SPI_InitTypeDef SPI_InitStructure;
SPI_InitStructure.SPI_Module = ENABLE; //SPI启动 ENABLE, DISABLE
SPI_InitStructure.SPI_SSIG = DISABLE; //片选位 ENABLE, DISABLE
SPI_InitStructure.SPI_FirstBit= SPI_MSB; //移位方向 SPI_MSB, SPI_LSB
SPI_InitStructure.SPI_Mode = SPI_Mode_Slave; //主从选择 SPI_Mode_Master, SPI_Mode_Slave
SPI_InitStructure.SPI_CPOL = SPI_CPOL_High; //时钟相位 SPI_CPOL_High, SPI_CPOL_Low
SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge; //数据边沿 SPI_CPHA_1Edge,SPI_CPHA_2Edge
SPI_InitStructure.SPI_Interrupt = ENABLE; //中断允许 ENABLE,DISABLE
SPI_InitStructure.SPI_Speed = SPI_Speed_128; //SPI速度 SPI_Speed_4, SPI_Speed_16, SPI_Speed_64, SPI_Speed_128
// SPI_InitStructure.SPI_IoUse = SPI_P12_P13_P14_P15; //IO口切换 SPI_P12_P13_P14_P15, SPI_P24_P23_P22_P21, SPI_P54_P40_P41_P43
SPI_InitStructure.SPI_IoUse = SPI_P24_P23_P22_P21;
// SPI_InitStructure.SPI_IoUse = SPI_P54_P40_P41_P43;
SPI_Init(&SPI_InitStructure);
SPI_TxRxMode = SPI_Mode_Slave;
} 我试过同样spi程序,stc15可以工作,iap15早期版本可以工作,后期版本卡死在等待发送完成地方 测试过,没有问题 解决了,不同型号的15系列芯片管脚特性不一样,要配置为准双向输出口。
voidSPI_Config(u8 SPI_io, u8 SPI_speed)
{
SPI_SS_SEL = SPI_io; //保存SPI的SS脚的编号, 0-->P1.2, 1-->P2.4, 2-->P5.4
SPCTL = (SSIG << 7) + (SPEN << 6) + (DORD << 5) + (MSTR << 4) + (CPOL << 3) + (CPHA << 2) + (SPI_speed & 3); //配置SPI
if(SPI_io == 1)
{
P_SW1 = (P_SW1 & ~0x0c) | (1<<2); //切换到P2.4(SS) P2.3(MOSI) P2.2(MISO) P2.1(SCLK)
P2n_standard(0x1E); //设置为准双向口
}
else if(SPI_io == 2)
{
P_SW1 = (P_SW1 & ~0x0c) | (2<<2); //切换到P5.4(SS) P4.0(MOSI) P4.1(MISO) P4.3(SCLK)
P5n_standard(0x10); //设置为准双向口
P4n_standard(0x0B); //设置为准双向口
}
else
{
P_SW1 &= ~(3<<2); //切换到P1.2(SS) P1.3(MOSI) P1.4(MISO) P1.5(SCLK)
P1n_standard(0x3C); //设置为准双向口
}
}
上面代码是深圳梁工给的。
关于卡死在那个等待的地方我也碰到,待后再测试一下。 fyq2000wx 发表于 2021-10-28 11:19
解决了,不同型号的15系列芯片管脚特性不一样,要配置为准双向输出口。
voidSPI_Config(u8 SPI_io, u8 SP ...
{:lol:}不要以为一家公司出的产品,特性都一样
芯片资料还是要看的……
就像东芝的步进电机驱动芯片,大部分都是低端采样的,也有几款是高端采样。有些客户直接都当成低端采样的来用,结果是通电没有输出…… 我一般都习惯自己初始化寄存器、IO,不依赖上电默认模式,移植方便。
对应STC,15系列和8系列的SPI程序我都是通用的。 突然看到:
//
// 注意: STC15W4K32S4系列的芯片,上电后所有与PWM相关的IO口均为
// 高阻态,需将这些口设置为准双向口或强推挽模式方可正常使用
// 相关IO: P0.6/P0.7/P1.6/P1.7/P2.1/P2.2
// P2.3/P2.7/P3.7/P4.2/P4.4/P4.5
//
页:
[1]