GD32F450 SPI1问题

[复制链接]
5598|11
手机看帖
扫描二维码
随时随地手机跟帖
Sean_JianLong|  楼主 | 2021-9-16 17:41 | 显示全部楼层 |阅读模式
GD32F450 SPI1 使用GPIOI端口管脚0到管脚3,初始化后SPI1不工作,谁知道什么问题?

使用特权

评论回复
勤劳的我| | 2021-9-16 23:20 | 显示全部楼层
9538561436079a635b.png
引脚配置没错的话。就得确认SPII的初始化配置了。18166272203,欢迎讨论交流

使用特权

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

使用特权

评论回复
孜然一人| | 2021-9-17 11:59 | 显示全部楼层
时钟配置有没问题呢

使用特权

评论回复
呐咯密密| | 2021-9-17 16:30 | 显示全部楼层
能否贴一下初始化函数和你的SPI收发代码,这样不好判断

使用特权

评论回复
Sean_JianLong|  楼主 | 2021-9-18 06:48 | 显示全部楼层
孜然一人 发表于 2021-9-17 11:59
时钟配置有没问题呢

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

使用特权

评论回复
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置高

使用特权

评论回复
Sean_JianLong|  楼主 | 2021-9-18 07:03 | 显示全部楼层
孜然一人 发表于 2021-9-17 11:59
时钟配置有没问题呢

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

使用特权

评论回复
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.clkPP       = 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( ) ;

使用特权

评论回复
Sean_JianLong|  楼主 | 2021-9-19 18:38 | 显示全部楼层
看来没人遇到过这个问题

使用特权

评论回复
孜然一人| | 2021-9-24 09:02 | 显示全部楼层
你伪代码写的初始化50MH,但贴出来的不是200M吗

使用特权

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

使用特权

评论回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 我要提问 投诉建议 申请版主

本版热帖

本版活跃用户

优质原创写原创,赢大奖

编辑推荐

  • 1 呐咯密密 得到打赏 ¥310.00
  • 2 gaoyang9992006 得到打赏 ¥200.00
  • 3 yanzhengxin1 得到打赏 ¥150.00
  • 4 qbwww 得到打赏 ¥130.00
  • 5 逍遥李 得到打赏 ¥75.00
  • 6 kk的回忆 得到打赏 ¥50.00
  • 7 cjseng 得到打赏 ¥50.00
  • 8 二哲科技 得到打赏 ¥50.00
  • 9 qintian0303 得到打赏 ¥25.00
  • 10 wangming147 得到打赏 ¥20.00
在线客服 快速回复 返回顶部 返回列表