OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 1457|回复: 12

GD32F330引脚无法复用为SPI1的问题

[复制链接]

7

主题

34

帖子

0

精华

初级会员

Rank: 2

积分
124
金钱
124
注册时间
2020-2-26
在线时间
36 小时
发表于 2023-10-12 16:45:19 | 显示全部楼层 |阅读模式
22金钱
本帖最后由 balalalal 于 2023-10-13 09:27 编辑

GD32F330进行以下复用:PB1/SPI1_SCK,PA13/SPI1_MISO,使用NSS软件模式。其中,PB1引脚及复用情况见附件
新增说明:用同样的程序将PA5复用为SPI0_SCK,PA5能够正常输出时钟波形

问题:PB1的复用程序编好后,PB1无法发出时钟信号,将PB1设置成普通io输出模式,PB1输出电平可正常翻转。PB1和SPI1配置程序如下,有大佬知道原因是啥么:
        rcu_periph_clock_enable(RCU_GPIOB);

        gpio_af_set(GPIOB,GPIO_AF_6,GPIO_PIN_1);  
        gpio_mode_set(GPIOB, GPIO_MODE_AF, GPIO_PUPD_PULLUP, GPIO_PIN_1);
        gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_1);

        /* configure SPI1 */
        rcu_periph_clock_enable(RCU_SPI1);
        
        /* deinitilize SPI1 and the parameters */
        spi_i2s_deinit(SPI1);
        spi_struct_para_init(&spi_init_struct);

        spi_init_struct.device_mode          = SPI_MASTER;  
        spi_init_struct.trans_mode           = SPI_TRANSMODE_FULLDUPLEX;  
        spi_init_struct.frame_size           = SPI_FRAMESIZE_8BIT;  
        spi_init_struct.clock_polarity_phase = SPI_CK_PL_HIGH_PH_2EDGE;
        spi_init_struct.nss                  = SPI_NSS_SOFT;  
        spi_init_struct.prescale             = SPI_PSC_4;
        spi_init_struct.endian               = SPI_ENDIAN_MSB;  
        spi_init(SPI1, &spi_init_struct);
        spi_enable(SPI1);








PB1复用映射表.png
PB1引脚.png
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
150
金钱
150
注册时间
2023-5-17
在线时间
28 小时
发表于 2023-10-12 16:52:04 | 显示全部楼层
看看是不是和重映射有关系
回复

使用道具 举报

7

主题

34

帖子

0

精华

初级会员

Rank: 2

积分
124
金钱
124
注册时间
2020-2-26
在线时间
36 小时
 楼主| 发表于 2023-10-12 17:00:29 | 显示全部楼层
qq1646544 发表于 2023-10-12 16:52
看看是不是和重映射有关系

我先考虑过重映射,但是PB1默认为普通IO,应该不需要重映射,另外在GD32F330固件库中找了一圈,没看见重映射函数
回复

使用道具 举报

10

主题

3281

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8204
金钱
8204
注册时间
2020-5-11
在线时间
3697 小时
发表于 2023-10-12 17:21:02 | 显示全部楼层
看到后面那个小小的数字3和5没有?看看注释写的啥。
专治疑难杂症
回复

使用道具 举报

7

主题

34

帖子

0

精华

初级会员

Rank: 2

积分
124
金钱
124
注册时间
2020-2-26
在线时间
36 小时
 楼主| 发表于 2023-10-12 17:25:13 | 显示全部楼层
LcwSwust 发表于 2023-10-12 17:21
看到后面那个小小的数字3和5没有?看看注释写的啥。

那个是备注的哪些具体型号有这个功能,我这个芯片有这个
回复

使用道具 举报

2

主题

446

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4133
金钱
4133
注册时间
2018-5-14
在线时间
902 小时
发表于 2023-10-13 08:53:56 | 显示全部楼层
balalalal 发表于 2023-10-12 17:25
那个是备注的哪些具体型号有这个功能,我这个芯片有这个

你这不是配置的NSS由SOFT控制吗,当然PB1没反应了,你要配成硬件驱动NSS才行啊
回复

使用道具 举报

7

主题

34

帖子

0

精华

初级会员

Rank: 2

积分
124
金钱
124
注册时间
2020-2-26
在线时间
36 小时
 楼主| 发表于 2023-10-13 09:26:38 | 显示全部楼层
姚先起 发表于 2023-10-13 08:53
你这不是配置的NSS由SOFT控制吗,当然PB1没反应了,你要配成硬件驱动NSS才行啊

主机SPI的通信是需要主机拉低NSS才会输出SCK么?我单独配置过PB1复用成SCK,PB1没时钟输出,后来把软件NSS加上并拉低,PB1还是没有时钟输出
回复

使用道具 举报

0

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
150
金钱
150
注册时间
2023-5-17
在线时间
28 小时
发表于 2023-10-13 09:48:56 | 显示全部楼层
本帖最后由 qq1646544 于 2023-10-13 09:50 编辑

rcu_periph_clock_enable(RCU_AF); 这句话需要调用一下,我看到你贴出的程序好像没有
回复

使用道具 举报

2

主题

446

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4133
金钱
4133
注册时间
2018-5-14
在线时间
902 小时
发表于 2023-10-13 10:34:39 | 显示全部楼层
balalalal 发表于 2023-10-13 09:26
主机SPI的通信是需要主机拉低NSS才会输出SCK么?我单独配置过PB1复用成SCK,PB1没时钟输出,后来把软件NS ...

有没有开启PB的时钟
回复

使用道具 举报

7

主题

34

帖子

0

精华

初级会员

Rank: 2

积分
124
金钱
124
注册时间
2020-2-26
在线时间
36 小时
 楼主| 发表于 2023-10-13 11:37:54 | 显示全部楼层
qq1646544 发表于 2023-10-13 09:48
rcu_periph_clock_enable(RCU_AF); 这句话需要调用一下,我看到你贴出的程序好像没有

f30x需要RCU_AF时钟使能,F3x0系列没有了
回复

使用道具 举报

7

主题

34

帖子

0

精华

初级会员

Rank: 2

积分
124
金钱
124
注册时间
2020-2-26
在线时间
36 小时
 楼主| 发表于 2023-10-13 11:38:20 | 显示全部楼层
姚先起 发表于 2023-10-13 10:34
有没有开启PB的时钟

程序有开启GPIOB
回复

使用道具 举报

7

主题

34

帖子

0

精华

初级会员

Rank: 2

积分
124
金钱
124
注册时间
2020-2-26
在线时间
36 小时
 楼主| 发表于 2023-10-13 11:40:22 | 显示全部楼层
qq1646544 发表于 2023-10-13 09:48
rcu_periph_clock_enable(RCU_AF); 这句话需要调用一下,我看到你贴出的程序好像没有

SPI0配置程序和贴出来的一样,能正常产生SCK
回复

使用道具 举报

0

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
150
金钱
150
注册时间
2023-5-17
在线时间
28 小时
发表于 2023-10-13 14:02:47 | 显示全部楼层
balalalal 发表于 2023-10-13 11:40
SPI0配置程序和贴出来的一样,能正常产生SCK

  尝试改为 gpio_mode_set(GPIOB, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_1);
顺便查查PB1引脚其他地方有没有用到,如果这些都不能解决,优先考虑是不是硬件方面的问题了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-23 07:31

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表