GD32替换STM32F103芯片过程中,SPI通讯数据出现问题
产品开发中,将STM32F103芯片换成GD32的芯片,但是依然是STM32的工程,其中#define HSE_STARTUP_TIMEOUT ((uint16_t)0x0500)替换为#define HSE_STARTUP_TIMEOUT ((uint16_t)0xFFFF)发现 CAN和串口通讯正常,但是SPI通讯异常,异常如下:
1、 SPI连续发送2个数据(u8),但是从示波器上看,发送的数据相反了,而且每个数据都左移了一位,数据接收还没有验证。
2、关于STM32工程中SPI的配置如下:
GPIO_InitTypeDef GPIO_InitStructure;
SPI_InitTypeDefSPI_InitStructure;
RCC_APB1PeriphClockCmd( RCC_APB1Periph_SPI2, ENABLE );
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE );
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; //
SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; //
SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256;//SPI_BaudRatePrescaler_32; //
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; //
//SPI_InitStructure.SPI_CRCPolynomial = 7; //
SPI_Init(SPI2, &SPI_InitStructure); //
SPI_Cmd(SPI2, ENABLE);
这是CPOL和CPHA不对吧 引脚配置问题 时序要求差异 GD32和STM32F103的工作电压可能存在差异。 查GD32与SPI外设之间的硬件连接是否正确。包括SPI的MOSI、MISO、SCK和SS等引脚的连接,以及任何必要的电源和地线连接。
GD32芯片和STM32F103芯片的时钟设置可能不同,导致SPI通讯时序不匹配,需要确保时钟设置正确 SPI通讯的参数设置包括数据位宽、时钟极性、时钟相位等,需要确保GD32芯片的SPI参数设置与原来的设置一致 GD32芯片和STM32F103芯片的引脚映射可能不同,需要确保SPI通讯的引脚连接正确 如果SPI通讯使用了中断,需要确保中断处理的设置正确,包括中断优先级、中断标志清除等 GD32芯片和STM32F103芯片的电气特性可能有所不同,需要确保电气特性符合SPI通讯的要求 你不如直接使用GD的例程进行测试了 建议直接用GD提供的demo,把SPI部分提取出来复制到你现在用的工程里就好了 建议检查时钟设置、SPI参数设置、引脚映射、中断处理部分 你可以尝试使用示波器或逻辑分析仪来观察SPI通讯的时序和波形,以帮助定位问题 还是得看手册,就是GD的手册和ST的不能完全兼容的,比如寄存器时序都不一定一样的 查一下数据手册就知道了
页:
[1]