打印

GD32替换STM32F103芯片过程中,SPI通讯数据出现问题

[复制链接]
2641|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
键盘手没手|  楼主 | 2024-2-28 20:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
产品开发中,将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_InitTypeDef  SPI_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);     

使用特权

评论回复
沙发
药无尘| | 2024-3-28 14:01 | 只看该作者
这是CPOL和CPHA不对吧

使用特权

评论回复
板凳
powerantone| | 2024-3-28 15:23 | 只看该作者
引脚配置问题

使用特权

评论回复
地板
stormwind123| | 2024-3-28 18:00 | 只看该作者
时序要求差异

使用特权

评论回复
5
probedog| | 2024-3-28 19:20 | 只看该作者
GD32和STM32F103的工作电压可能存在差异。

使用特权

评论回复
6
classroom| | 2024-3-28 20:26 | 只看该作者
查GD32与SPI外设之间的硬件连接是否正确。包括SPI的MOSI、MISO、SCK和SS等引脚的连接,以及任何必要的电源和地线连接。

使用特权

评论回复
7
alxd| | 2024-4-18 13:59 | 只看该作者
GD32芯片和STM32F103芯片的时钟设置可能不同,导致SPI通讯时序不匹配,需要确保时钟设置正确

使用特权

评论回复
8
B1lanche| | 2024-4-18 15:07 | 只看该作者
SPI通讯的参数设置包括数据位宽、时钟极性、时钟相位等,需要确保GD32芯片的SPI参数设置与原来的设置一致

使用特权

评论回复
9
Charlene沙| | 2024-4-18 16:10 | 只看该作者
GD32芯片和STM32F103芯片的引脚映射可能不同,需要确保SPI通讯的引脚连接正确

使用特权

评论回复
10
Emily999| | 2024-4-18 17:12 | 只看该作者
如果SPI通讯使用了中断,需要确保中断处理的设置正确,包括中断优先级、中断标志清除等

使用特权

评论回复
11
Allison8859| | 2024-4-18 18:20 | 只看该作者
GD32芯片和STM32F103芯片的电气特性可能有所不同,需要确保电气特性符合SPI通讯的要求

使用特权

评论回复
12
Candic12e| | 2024-4-18 19:22 | 只看该作者
你不如直接使用GD的例程进行测试了

使用特权

评论回复
13
Belle1257| | 2024-4-19 07:10 | 只看该作者
建议直接用GD提供的demo,把SPI部分提取出来复制到你现在用的工程里就好了

使用特权

评论回复
14
Alina艾| | 2024-4-19 08:42 | 只看该作者
建议检查时钟设置、SPI参数设置、引脚映射、中断处理部分

使用特权

评论回复
15
Carmen7| | 2024-4-19 10:04 | 只看该作者
你可以尝试使用示波器或逻辑分析仪来观察SPI通讯的时序和波形,以帮助定位问题

使用特权

评论回复
16
Annie556| | 2024-4-19 11:10 | 只看该作者
还是得看手册,就是GD的手册和ST的不能完全兼容的,比如寄存器时序都不一定一样的

使用特权

评论回复
17
shenxiaolin| | 2024-4-30 16:01 | 只看该作者
查一下数据手册就知道了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

104

主题

1180

帖子

0

粉丝