打印

GD32F130 SPI无法使用

[复制链接]
4954|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hiolan|  楼主 | 2018-4-26 14:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我使用的芯片型号是GD32F130G8U6
电路图如下:
[url=][/url]

使用PA15--->SPI_CS
      PB3--->SPI_CLK
      PB4--->SPI_MISO
      PB5--->SPI_MOSI
SPI工作在从机模式,中断接收。但是,没办法完成通信。我检查和验证过连线,绝对没有问题。
代码如下:
/*****************************************************
** @函数名:spi_slave_init
** @描述  :spi初始化为从模式
** @参数  :无
** @返回值:None  
*****************************************************/
void spi_slave_init(void)
{
spi_parameter_struct  spi_init_struct;

rcu_periph_clock_enable(RCU_GPIOA);                                              //打开GPIOA口时钟,PA15是CS
rcu_periph_clock_enable(RCU_GPIOB);                                              //打开GPIOB口时钟,PB3、4、5 -> SCK MISO MOSI
rcu_periph_clock_enable(RCU_SPI1);                                               //打开SPI1的时钟
  
  gpio_af_set(GPIOB, GPIO_AF_0, GPIO_PIN_3 | GPIO_PIN_4| GPIO_PIN_5);
  gpio_mode_set(GPIOB, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_3 | GPIO_PIN_4| GPIO_PIN_5);
  gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_3 | GPIO_PIN_4| GPIO_PIN_5);

  gpio_af_set(GPIOA, GPIO_AF_0, GPIO_PIN_15);
  gpio_mode_set(GPIOA, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_15);
  gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_15);

     
  //SPI1 parameter config */
  spi_init_struct.trans_mode           = SPI_TRANSMODE_FULLDUPLEX;
  spi_init_struct.device_mode          = SPI_SLAVE;                //
  spi_init_struct.frame_size           = SPI_FRAMESIZE_16BIT;;
  spi_init_struct.clock_polarity_phase = SPI_CK_PL_LOW_PH_2EDGE;
  spi_init_struct.nss                  = SPI_NSS_SOFT;              //软件触发
  spi_init_struct.prescale             = SPI_PSC_2 ;
  spi_init_struct.endian               = SPI_ENDIAN_MSB;;
  spi_init(SPI1, &spi_init_struct);


//中断配置
nvic_priority_group_set(NVIC_PRIGROUP_PRE1_SUB3);
nvic_irq_enable(SPI1_IRQn,0,1);  
//使能SPI中断
spi_i2s_interrupt_enable(SPI1, SPI_I2S_INT_RBNE); //接收中断
  spi_enable(SPI1);                                 //使能SPI
}
/*****************************************************
** @函数名:SPI1_IRQHandler
** @描述  :spi接收中断函数
** @参数  :无
** @返回值:None  
*****************************************************/
void SPI1_IRQHandler(void)
{
uint16_t spi1_receive;
if(spi_i2s_interrupt_flag_get(SPI1, SPI_I2S_INT_TBE) != RESET)
  {
  spi1_receive = spi_i2s_data_receive(SPI1);
}
}



请各位大侠给与指导。谢谢。

QQ图片20180426142523.png (135.2 KB )

QQ图片20180426142523.png
沙发
darling心弦| | 2018-4-26 15:02 | 只看该作者
SPI0的IO才是这些吧   SPI0    SPI0   SPI零

使用特权

评论回复
板凳
hiolan|  楼主 | 2018-4-26 15:31 | 只看该作者
darling心弦 发表于 2018-4-26 15:02
SPI0的IO才是这些吧   SPI0    SPI0   SPI零

你好,官方给的手册,是SPI1

使用特权

评论回复
地板
darling心弦| | 2018-4-26 15:40 | 只看该作者
你的库也是3.0的吧

GD32F130xx Datasheet Rev3.0.pdf

1.06 MB

使用特权

评论回复
5
hiolan|  楼主 | 2018-4-26 16:01 | 只看该作者

对啊。我使用的就是他们最新的库3.0

使用特权

评论回复
6
hiolan|  楼主 | 2018-4-26 16:03 | 只看该作者

你好,我的手册和你的不一样啊。为啥我的是SPI1啊。

使用特权

评论回复
7
engao| | 2018-4-26 16:11 | 只看该作者
你的引脚设置是不是有问题啊

使用特权

评论回复
8
engao| | 2018-4-26 16:12 | 只看该作者
个人觉得可以考虑写一个用IO口模拟的试下

使用特权

评论回复
9
hiolan|  楼主 | 2018-4-26 16:14 | 只看该作者

谢谢你,问题已解决,果然是,SPI0,这个好奇怪啊。我的手册为啥是SPI1,卡我几天。

使用特权

评论回复
10
engao| | 2018-4-26 16:28 | 只看该作者
这是因为资料写的有问题

使用特权

评论回复
11
123ycli| | 2018-4-26 16:47 | 只看该作者
用官方的例程试了没?移植过去的,还是新写的

使用特权

评论回复
12
hiolan|  楼主 | 2018-4-27 00:01 | 只看该作者
123ycli 发表于 2018-4-26 16:47
用官方的例程试了没?移植过去的,还是新写的

官方例程没啥用。是文件错误。

使用特权

评论回复
13
zzyybb22| | 2018-4-27 10:30 | 只看该作者
hiolan 发表于 2018-4-27 00:02
官方例程没啥用。是文件错误。

官方文件没错误,有2个版本的库及文件,一个GD风格的对应1x0的都是3.x,还针对ST风格做了一个版本 对应资料及库都是1.x的

使用特权

评论回复
14
shenmu2012| | 2018-4-28 22:24 | 只看该作者
那就多检查下程序设计的

使用特权

评论回复
15
inteler| | 2018-5-1 23:38 | 只看该作者
GD有没有stm32cubemx这样的东西

使用特权

评论回复
16
lgg123| | 2018-5-4 18:04 | 只看该作者
兄弟,你的时钟没打开

使用特权

评论回复
17
angerbird| | 2018-5-8 20:30 | 只看该作者

这个资料的参考了的哈

使用特权

评论回复
18
123ycli| | 2018-5-19 09:51 | 只看该作者
hiolan 发表于 2018-4-27 00:01
官方例程没啥用。是文件错误。

不要轻易怀疑官方的错误,经过多少人验证了都。

使用特权

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

本版积分规则

2

主题

10

帖子

1

粉丝