HC32F451 SPI不能正常工作。
把SPI3配置成3线从模式,只进行发送,不能使能SPI3,甚至直接写CR1寄存器都不能使能。配置如下:
static void SPI_Config(void)
{
stc_spi_init_t stcSpiInit;
stc_irq_signin_config_t stcIrqSignConfig;
/* Configure Port */
GPIO_SetFunc(SPI_SCK_PORT,SPI_SCK_PIN,SPI_SCK_FUNC);
GPIO_SetFunc(SPI_MISO_PORT, SPI_MISO_PIN, SPI_MISO_FUNC);
/* Configuration SPI */
FCG_Fcg1PeriphClockCmd(SPI_CLK, ENABLE);
SPI_StructInit(&stcSpiInit);
stcSpiInit.u32WireMode = SPI_3_WIRE;
stcSpiInit.u32TransMode = SPI_SEND_ONLY;
stcSpiInit.u32MasterSlave = SPI_SLAVE;
stcSpiInit.u32Parity = SPI_PARITY_INVD;
stcSpiInit.u32SpiMode = SPI_MD_3;
stcSpiInit.u32BaudRatePrescaler = SPI_BR_CLK_DIV8;
stcSpiInit.u32DataBits = SPI_DATA_SIZE_32BIT;
stcSpiInit.u32FirstBit = SPI_FIRST_MSB;
stcSpiInit.u32FrameLevel = SPI_1_FRAME;
(void)SPI_Init(SPI_UNIT, &stcSpiInit);
}
在IAR中单步调试,发现用库函数SPI_Cmd(SPI_UNIT, ENABLE); 不能使能SPI, CR1总是为0x03
换成直接写寄存器命令
*(uint32_t *)0x40020004 = 0x00000043;
CR1仍然是0x03.
真的让人奔溃! 给你个思路,你先按第一种方法操作,还不行的话再操作第二种:
第一种:单独重建一个IAR工程
第二种:在第一种还无效的情况下换一个最新的hc32f451.svd文件 发现问题了,是因为MODFERF置位了,所以不能使能SPI了。
现在问题是,3线同步模式,只发送,主机发的SCK数远小于32bits, 我需要MISO发出相应的bit, 当sck停止后就清除发送寄存器,写入新数据.这样怎样实现呀 jjl3 发表于 2024-3-4 13:36
发现问题了,是因为MODFERF置位了,所以不能使能SPI了。
现在问题是,3线同步模式,只发送,主机发的SCK数 ...
很好的问题解决方法 检查使能 SPI 的方法是否正确。如果 SPI_Cmd(SPI_UNIT, ENABLE); 无法使能 SPI 模块,尝试用直接写寄存器的方式。
页:
[1]