开始使用GD32F303遇到的问题。

[复制链接]
5588|13
 楼主| 学习来咯 发表于 2021-9-8 09:13 | 显示全部楼层 |阅读模式
本帖最后由 学习来咯 于 2021-9-9 09:47 编辑

初接触GD的芯片,现在就是很简单的翻转IO,遇到好奇怪的问题,自己摸索了一晚上没办法了,只能求助大伙了。希望解惑。因为模电太久没用,都忘了。
我现在的需求就是翻转GD32F303CCTE的48PIN封装的PB15,但是1ms周期都出现波形失真,如果把周期缩短,直接就把直流电平抬高,翻转速度再快一点直接一直是高电平了。一开始我怀疑是硬件(外部这个管脚只有PCB走线,没有接任何的电阻电容)问题,我把外部的走线割断直接测管脚也是一样的失真波形。但是同样的配置,同一个程序,在PB14上没有问题。 手上只有一个芯片,有没有可能是芯片坏了。。。。
程序是最简单的,默认配置主频是120Mhz。
20210909
试过了大伙的建议,都还是一样的问题,我这个端口外部下拉一个电阻会好很多,200K都可以输出(之前200K这个管脚是输出不了的)。怀疑是这个管脚受损坏了(因为配置了上拉,在输出低电平的时候不应该是以内部下拉形式输出的嘛。。。)。手上没有芯片,后面如果有的话会更新给大家结果。谢谢大家了!

  1. #include "gd32f30x.h"
  2. #include "systick.h"
  3. #include <stdio.h>
  4. #include "main.h"



  5. /*!
  6.     \brief      main function
  7.     \param[in]  none
  8.     \param[out] none
  9.     \retval     none
  10. */

  11. int main(void)
  12. {
  13.     /* configure systick */
  14.   systick_config();
  15.         
  16.         rcu_periph_clock_enable(RCU_GPIOB);

  17.         gpio_init(GPIOB, GPIO_MODE_OUT_PP, GPIO_OSPEED_MAX, GPIO_PIN_15);
  18.    


  19.     while (1){
  20.                         GPIO_OCTL(GPIOB) |= (uint32_t)(GPIO_PIN_15);
  21.                         delay_1ms(1);
  22.                         GPIO_OCTL(GPIOB) &= ~((uint32_t)(GPIO_PIN_15));
  23.                         delay_1ms(1);

  24.         }
  25.    
  26. }
代码就是这么简单,如果我换成GPIO_PIN_14是正常的,就算不加延迟翻转都OK。




PB15

PB15


PB14

PB14



PB14

PB14









 楼主| 学习来咯 发表于 2021-9-8 09:16 | 显示全部楼层
希望能找到答案,因为这个需要用到SPI1,刚好用到这个管脚,发现使用硬件SPI发送数据时候这个MOSI(PB15)一直是高电平。
wifi99 发表于 2021-9-8 15:14 | 显示全部楼层
GPIO_OCTL(GPIOB) |= *(uint32_t*)(GPIO_PIN_15);
这样试下。
圣骑士by 发表于 2021-9-8 17:04 | 显示全部楼层
把这个GPIO_OSPEED_MAX换成中间的速度试试
就这名字吧 发表于 2021-9-8 17:35 | 显示全部楼层
看手册上有一句,输出速度超过50M,需要使能速度补偿功能。不知道是不是这个原因,没用过303
 楼主| 学习来咯 发表于 2021-9-9 09:41 | 显示全部楼层
wifi99 发表于 2021-9-8 15:14
GPIO_OCTL(GPIOB) |= *(uint32_t*)(GPIO_PIN_15);
这样试下。

谢谢,试了一样的是失真严重。
 楼主| 学习来咯 发表于 2021-9-9 09:42 | 显示全部楼层
圣骑士by 发表于 2021-9-8 17:04
把这个GPIO_OSPEED_MAX换成中间的速度试试

2M 10M 50M都试过,一样的问题。
 楼主| 学习来咯 发表于 2021-9-9 09:43 | 显示全部楼层
就这名字吧 发表于 2021-9-8 17:35
看手册上有一句,输出速度超过50M,需要使能速度补偿功能。不知道是不是这个原因,没用过303 ...

手动打开补偿也一样的,换其他低速的配置也一样的问题
lvben5d 发表于 2021-9-9 09:47 | 显示全部楼层
学习来咯 发表于 2021-9-8 09:16
希望能找到答案,因为这个需要用到SPI1,刚好用到这个管脚,发现使用硬件SPI发送数据时候这个MOSI( ...

看看手册 IO 需要重映射 还是 remap 或是默认 就是GPIO  哦
 楼主| 学习来咯 发表于 2021-9-9 11:05 | 显示全部楼层
lvben5d 发表于 2021-9-9 09:47
看看手册 IO 需要重映射 还是 remap 或是默认 就是GPIO  哦

芯片默认就是GPIO的功能的。现在使GPIO翻转都有问题,使用SPI速度快了根本就实现不了。
During or just after the reset period, the alternative functions are all inactive and the GPIO
ports are configured as the input floating mode without Pull-Up (PU)/Pull-Down (PD) resistors.
But the JTAG/Serial-Wired Debug pins are configured as input PU/PD mode after reset:
PA15: JTDI in PU mode.
PA14: JTCK / SWCLK in PD mode.
PA13: JTMS / SWDIO in PU mode.
PB4: NJTRST in PU mode.
PB3: JTDO in Floating mode.
lvben5d 发表于 2021-11-5 09:15 | 显示全部楼层
本帖最后由 lvben5d 于 2021-11-5 09:18 编辑

P14 是 标准JTAG的一个功能引脚,你看下,是否需要 gpio_pin_remap_config(GPIO_SWJ_SWDPENABLE_REMAP, ENABLE);           //PA15做普通IO    这个是我E103C8T6库函数, 上电复位P14 15估计是做JTAG那边的。   我去看了下 F303,  果然P14引脚上电复位 默认是  PA14 109 I/O 5VTDefault: JTCK, SWCLKRemap: PA14
chengxingyu 发表于 2022-7-16 15:00 | 显示全部楼层
spi速度别超过10M,否则就会有失真,别的芯片我试过也一样失真
pltczw666 发表于 2022-7-16 23:44 | 显示全部楼层
本帖最后由 pltczw666 于 2022-7-17 00:19 编辑

应该是这个管脚坏了。我也是用这个芯片,也用这个SPI1,速度30M,完全没问题。
pltczw666 发表于 2022-7-17 12:57 | 显示全部楼层
换个芯片吧,应该是管脚损坏了。我也是用这个CPU,也用SPI1,速度30M完全没问题。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

34

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部