打印

第一次用GD32,点一个LED,结果没亮,大神帮忙看一下?

[复制链接]
954|22
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
gwlall|  楼主 | 2025-3-12 09:53 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
代码如下:
#include "gd32f10x.h"
#include "systick.h"
#include <stdio.h>
#include "main.h"
#include "gd32f10x_eval.h"


void delay(int time)
{
    while(time--)
    {
            asm("nop");
    }

    return;
}

int main(void)
{
        rcu_apb2_clock_config(RCU_APB2_CKAHB_DIV1);

        rcu_periph_clock_enable(RCU_GPIOA);

        gpio_init(GPIOA, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_15);

        gpio_bit_reset(GPIOA, GPIO_PIN_15);

    while(1)
    {
        delay(2000000);
        gpio_bit_set(GPIOA, GPIO_PIN_15);
        delay(2000000);
        gpio_bit_reset(GPIOA, GPIO_PIN_15);
    }
    return 0;
}

使用特权

评论回复
沙发
两只袜子| | 2025-3-12 10:24 | 只看该作者
代码可以稍作修改,使用更可靠的延时函数。

使用特权

评论回复
板凳
elephant00| | 2025-3-12 10:27 | 只看该作者
用万用表测量GPIOA_PIN_15的电压是否有高低电平切换。

使用特权

评论回复
地板
gwlall|  楼主 | 2025-3-12 10:32 | 只看该作者
检查了一下发现PA15默认是JTDI功能

使用特权

评论回复
5
gwlall|  楼主 | 2025-3-12 10:47 | 只看该作者
问题怎么修改呢?

4888467d0f5b4abae2.png (46.82 KB )

4888467d0f5b4abae2.png

使用特权

评论回复
6
gwlall|  楼主 | 2025-3-12 11:03 | 只看该作者
改成这样还是不行:
int main(void)
{
        rcu_apb2_clock_config(RCU_APB2_CKAHB_DIV1);

        rcu_periph_clock_enable(RCU_GPIOA);

        gpio_pin_remap_config(GPIO_SWJ_SWDPENABLE_REMAP, ENABLE);

        gpio_init(GPIOA, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_15);

        gpio_bit_reset(GPIOA, GPIO_PIN_15);

    while(1)
    {
        delay(2000000);
        gpio_bit_set(GPIOA, GPIO_PIN_15);
        delay(2000000);
        gpio_bit_reset(GPIOA, GPIO_PIN_15);
    }
    return 0;
}
改成PA8管口就能正常翻转电平,看来还是JTAG功能没有关闭,管脚没有以普通IO工作。

使用特权

评论回复
评论
alienmiller 2025-3-12 18:48 回复TA
芯片编程手册应该有如何将 JTAG 变为普通GPIO口的方法,估计例程中也应该有,找找看。 
7
cr315| | 2025-3-12 11:23 | 只看该作者
LED的连接方向是否正确

使用特权

评论回复
8
jcky001| | 2025-3-12 14:00 | 只看该作者
检查硬件连接是否有问题。

使用特权

评论回复
9
laocuo1142| | 2025-3-12 14:09 | 只看该作者
时钟配置检查,如果时钟没有正确配置,GPIOA可能无法正常工作。

使用特权

评论回复
10
Chad1989| | 2025-3-12 14:23 | 只看该作者
难道GD这么大的公司连个例程都没?

使用特权

评论回复
11
ddb_21ic| | 2025-3-12 15:57 | 只看该作者
进调试模式,看寄存器对应位的值

使用特权

评论回复
12
flycamelaaa| | 2025-3-12 16:23 | 只看该作者
检查LED是否需要低电平点亮。如果是低电平点亮,你的代码中gpio_bit_reset(GPIOA, GPIO_PIN_15)应该是点亮LED,而gpio_bit_set(GPIOA, GPIO_PIN_15)应该是熄灭LED。

使用特权

评论回复
13
flycamelaaa| | 2025-3-12 16:23 | 只看该作者
如果LED是高电平点亮,可能需要交换gpio_bit_set和gpio_bit_reset的调用。

使用特权

评论回复
14
powerantone| | 2025-3-12 17:23 | 只看该作者
延时函数问题

使用特权

评论回复
15
13728885036| | 2025-3-12 17:36 | 只看该作者
rcu_periph_clock_enable(RCU_AF);   加上这条代码,你AFIO没使能

使用特权

评论回复
16
stormwind123| | 2025-3-12 18:00 | 只看该作者
你的延时函数是一个简单的空操作循环,这种方法可能导致延时不足,特别是在优化级别较高的情况下,编译器可能会优化掉asm("nop")。

使用特权

评论回复
17
probedog| | 2025-3-12 19:59 | 只看该作者
GD32库版本可能不匹配

使用特权

评论回复
18
classroom| | 2025-3-12 21:09 | 只看该作者
JLink单步调试代码看GPIOA_ODR寄存器值是否有变化。

使用特权

评论回复
19
wang369| | 2025-3-13 06:54 | 只看该作者
搞定了吗?单步DEBUG一下,看看寄存器值,以及使用示波器看一下你的IO是否有状态的变化?

使用特权

评论回复
20
21mengnan| | 2025-3-13 10:08 | 只看该作者
是不是这个接口需要特殊的配置或者设置才能用IO。

使用特权

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

本版积分规则

1

主题

4

帖子

0

粉丝