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

[复制链接]
 楼主| 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功能
 楼主| gwlall 发表于 2025-3-12 10:47 | 显示全部楼层
问题怎么修改呢?
4888467d0f5b4abae2.png
 楼主| 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工作。

评论

芯片编程手册应该有如何将 JTAG 变为普通GPIO口的方法,估计例程中也应该有,找找看。  发表于 2025-3-12 18:48
cr315 发表于 2025-3-12 11:23 | 显示全部楼层
LED的连接方向是否正确
jcky001 发表于 2025-3-12 14:00 | 显示全部楼层
检查硬件连接是否有问题。
laocuo1142 发表于 2025-3-12 14:09 | 显示全部楼层
时钟配置检查,如果时钟没有正确配置,GPIOA可能无法正常工作。
Chad1989 发表于 2025-3-12 14:23 | 显示全部楼层
难道GD这么大的公司连个例程都没?
ddb_21ic 发表于 2025-3-12 15:57 | 显示全部楼层
进调试模式,看寄存器对应位的值
flycamelaaa 发表于 2025-3-12 16:23 | 显示全部楼层
检查LED是否需要低电平点亮。如果是低电平点亮,你的代码中gpio_bit_reset(GPIOA, GPIO_PIN_15)应该是点亮LED,而gpio_bit_set(GPIOA, GPIO_PIN_15)应该是熄灭LED。
flycamelaaa 发表于 2025-3-12 16:23 | 显示全部楼层
如果LED是高电平点亮,可能需要交换gpio_bit_set和gpio_bit_reset的调用。
powerantone 发表于 2025-3-12 17:23 | 显示全部楼层
延时函数问题
13728885036 发表于 2025-3-12 17:36 | 显示全部楼层
rcu_periph_clock_enable(RCU_AF);   加上这条代码,你AFIO没使能
stormwind123 发表于 2025-3-12 18:00 | 显示全部楼层
你的延时函数是一个简单的空操作循环,这种方法可能导致延时不足,特别是在优化级别较高的情况下,编译器可能会优化掉asm("nop")。
probedog 发表于 2025-3-12 19:59 | 显示全部楼层
GD32库版本可能不匹配
classroom 发表于 2025-3-12 21:09 | 显示全部楼层
JLink单步调试代码看GPIOA_ODR寄存器值是否有变化。
wang369 发表于 2025-3-13 06:54 | 显示全部楼层
搞定了吗?单步DEBUG一下,看看寄存器值,以及使用示波器看一下你的IO是否有状态的变化?
21mengnan 发表于 2025-3-13 10:08 | 显示全部楼层
是不是这个接口需要特殊的配置或者设置才能用IO。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

5

帖子

0

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