打印

GD32F450 SPI1问题

[复制链接]
8384|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
GD32F450 SPI1 使用GPIOI端口管脚0到管脚3,初始化后SPI1不工作,谁知道什么问题?

使用特权

评论回复
沙发
勤劳的我| | 2021-9-16 23:20 | 只看该作者

引脚配置没错的话。就得确认SPII的初始化配置了。18166272203,欢迎讨论交流

使用特权

评论回复
板凳
Sean_JianLong|  楼主 | 2021-9-17 07:01 | 只看该作者
配置肯定是对的,仿真器跟进去,查看了所有SPI1寄存器,我同时在使用SPI3和SPI5,对比了SPI1和SPI3以及SPI5,它们的寄存器配置相同
也确认了GPIO的相关寄存器与MCU手册中的描述也一致,因为片选信号使用软件模拟控制,通过示波器测量发现片选是有的,但SPI1的时钟以及MO均没有信号

使用特权

评论回复
地板
孜然一人| | 2021-9-17 11:59 | 只看该作者
时钟配置有没问题呢

使用特权

评论回复
5
呐咯密密| | 2021-9-17 16:30 | 只看该作者
能否贴一下初始化函数和你的SPI收发代码,这样不好判断

使用特权

评论回复
6
Sean_JianLong|  楼主 | 2021-9-18 06:48 | 只看该作者
孜然一人 发表于 2021-9-17 11:59
时钟配置有没问题呢

时钟配置也调试器跟进去查看了寄存器配置与芯片手册中描述一致

使用特权

评论回复
7
Sean_JianLong|  楼主 | 2021-9-18 06:59 | 只看该作者
伪代码如下:
初始化部分:
开启GPIOI时钟
开启SPI1时钟
配置GPIOI0为普通IO,备注:软件控制SPI1的CS
配置GPIOI1/2/3为AF模式, 端口驱动为悬浮模式
配置GPIOI1/2/3为输出选项为推挽模式,速度为50MHz
配置GPIOI1/2/3为AF SPI1

配置SPI1工作参数为主,全双工,8位,大端,CKPL=0,CKPH=0,2分频时钟
使能SPI1

SPII收发部分:
GPIOI0置低
写SPI1数据
等待TBE标志为1
等待RBNE标志为1
读SPI1数据
GPIOI0置高

使用特权

评论回复
8
Sean_JianLong|  楼主 | 2021-9-18 07:03 | 只看该作者
孜然一人 发表于 2021-9-17 11:59
时钟配置有没问题呢

时钟配置是正确的,调试器跟进去查看了相关寄存器与芯片手册描述一致

使用特权

评论回复
9
Sean_JianLong|  楼主 | 2021-9-18 07:07 | 只看该作者
呐咯密密 发表于 2021-9-17 16:30
能否贴一下初始化函数和你的SPI收发代码,这样不好判断

初始化部分:
    RCU_PeriphClkSet( RCU_GPIOI, ENABLE ) ;
    GPIO_ModeSet(   GPIOI, GPIO_PIN_0, GPIO_CTL_OUT, GPIO_PUD_PU ) ;
    GPIO_OutOptSet( GPIOI, GPIO_PIN_0, GPIO_OM_PP, GPIO_OSPD_200MHZ ) ;
    TOD_SPI_FPGA_CS_HI( ) ;

    GPIO_ModeSet(   GPIOI, GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3, GPIO_CTL_AF, GPIO_PUD_FL ) ;
    GPIO_OutOptSet( GPIOI, GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3, GPIO_OM_PP, GPIO_OSPD_200MHZ ) ;
   
    GPIO_AFSet( GPIOI, GPIO_PIN_1, GPIO_AF_SPI1 ) ;
    GPIO_AFSet( GPIOI, GPIO_PIN_2, GPIO_AF_SPI1 ) ;
    GPIO_AFSet( GPIOI, GPIO_PIN_3, GPIO_AF_SPI1 ) ;
   
    RCU_PeriphClkSet( RCU_SPI1, ENABLE ) ;
    SPI_InitParam.device_mode = SPI_MASTER ;
    SPI_InitParam.trans_mode  = SPI_TRANSMODE_FULLDUPLEX ;
    SPI_InitParam.frame_size  = SPI_FRAMESIZE_8BIT ;
    SPI_InitParam.nss         = SPI_NSSMODE_SOFT ;
    SPI_InitParam.endian      = SPI_ENDIAN_MSB ;
    SPI_InitParam.cl**       = SPI_CK_PL_LOW_PH_1EDGE ;
    SPI_InitParam.prescale    = SPI_PSC_2 ;
    SPI_Init( SPI1, &SPI_InitParam ) ;
   
    SPI_En( SPI1, ENABLE ) ;

收发部分:
    TOD_SPI_FPGA_CS_LO( ) ;
    TOD_SPI_waitTBE( err ) ;   
    SPI_DataTx( SPI1, data ) ;
    TOD_SPI_waitRBNE( err ) ;   
    data = SPI_DataRx( SPI1 ) ;
    TOD_SPI_FPGA_CS_HI( ) ;

使用特权

评论回复
10
Sean_JianLong|  楼主 | 2021-9-19 18:38 | 只看该作者
看来没人遇到过这个问题

使用特权

评论回复
11
孜然一人| | 2021-9-24 09:02 | 只看该作者
你伪代码写的初始化50MH,但贴出来的不是200M吗

使用特权

评论回复
12
孜然一人| | 2021-9-24 09:09 | 只看该作者
我看官方的spi_flash历程初始化是25M的,不知道这个芯片对频率有没有限制,你可以试试

使用特权

评论回复
13
Sean_JianLong|  楼主 | 2021-11-8 13:06 | 只看该作者
孜然一人 发表于 2021-9-24 09:02
你伪代码写的初始化50MH,但贴出来的不是200M吗

MCU支持的速率都试过,都没有影响

使用特权

评论回复
14
Sean_JianLong|  楼主 | 2021-11-8 13:07 | 只看该作者
孜然一人 发表于 2021-9-24 09:09
我看官方的spi_flash历程初始化是25M的,不知道这个芯片对频率有没有限制,你可以试试 ...

各个频率都试过,没有作用

使用特权

评论回复
15
江11111| | 2021-11-8 17:29 | 只看该作者
你要不要试一下用同样设置初始化其他SPI看看是不是配置出了问题

使用特权

评论回复
16
Sean_JianLong|  楼主 | 2021-11-8 19:47 | 只看该作者
江11111 发表于 2021-11-8 17:29
你要不要试一下用同样设置初始化其他SPI看看是不是配置出了问题

同样的配置SPI3是正常的

使用特权

评论回复
17
guijial511| | 2021-11-9 08:17 | 只看该作者
不工作,说明配置有问题。

使用特权

评论回复
18
davyford| | 2022-10-17 02:19 | 只看该作者
楼主的问题解决了吗?我也遇到这个问题,尝试很多方法都找不到啥原因

使用特权

评论回复
19
13567147939| | 2022-11-22 16:02 | 只看该作者
可能原因:
1.SPI外设挂载的总线不一样,SPI0,SPI3和SPI5都在APB2总线下,SPI1在APB1总线下,分频后时钟会不一样

2.建议系统时钟不要用200M,最好用192M,这样SPI不会有太多问题,原因还是GD的SPI兼容性太差了

使用特权

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

本版积分规则

11

主题

43

帖子

1

粉丝