发新帖我要提问
12
返回列表
打印

keil新建基础工程(基于gd32f103)

[复制链接]
楼主: 初级工程渣
手机看帖
扫描二维码
随时随地手机跟帖
21
初级工程渣|  楼主 | 2024-6-30 13:25 | 只看该作者 |只看大图 回帖奖励 |倒序浏览
bsp_system.c
#include "bsp_system.h"

volatile static uint32_t delay_count;

void system_config(void)
{
    nvic_priority_group_set(NVIC_PRIGROUP_PRE0_SUB4); // 设置系统中断优先级分组

    if (SysTick_Config(SystemCoreClock / 1000U / 1000U)) // 设置系统定时器频率位 1000 000Hz 的中断,并判断是否成功
    {
        /* 捕获错误,程序跑死 */
        while (1)
        {
        }
    }
    NVIC_SetPriority(SysTick_IRQn, 0x00U); // 配置系统棒中断程序优先级
}

void delay_sw_ns(uint32_t count)
{
    uint32_t i, j;
    for (i = 0; i < count; i++)
    {
        // for (j = 0; j < SystemCoreClock / 10000000U / 2U; j++)
        for (j = 0; j < 16U; j++)
            ;
    }
}

void delay_us(uint32_t count)
{
    delay_count = count;

    while (0U != delay_count)
    {
    }
}

void delay_ms(uint32_t count)
{
    delay_count = count * 1000; /* ms 比 us 多延时1000倍 */

    while (0U != delay_count)
    {
    }
}

void delay_decrement(void)
{
    if (0U != delay_count)
    {
        delay_count--; /* 系统滴答中断中每次减一 */
    }
}

void SysTick_Handler(void)
{
    delay_decrement();
}

使用特权

评论回复
22
初级工程渣|  楼主 | 2024-6-30 13:25 | 只看该作者
bsp_system.h
#ifndef BSP_SYSTEM_H
#define BSP_SYSTEM_H

#include "bsp.h"

void delay_sw_ns(uint32_t count);

void system_config(void);
void delay_ms(uint32_t count);
void delay_us(uint32_t count);

#endif

使用特权

评论回复
23
初级工程渣|  楼主 | 2024-6-30 13:25 | 只看该作者
bsp_gpio.c

#include "bsp_gpio.h"

void bsp_gpio_init(void)
{
    /* clk 配置 */
    rcu_periph_clock_enable(LED_GPIO_CLK);

    /* gpio 配置 */
    gpio_init(LED_GPIO_TYPE, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, LED_GPIO_PIN);
    gpio_bit_set(LED_GPIO_TYPE, LED_GPIO_PIN);
}

void bsp_gpio_on(void)
{
    gpio_bit_reset(LED_GPIO_TYPE, LED_GPIO_PIN);   
}

void bsp_gpio_off(void)
{
    gpio_bit_set(LED_GPIO_TYPE, LED_GPIO_PIN);
}

void bsp_gpio_toggle(void)
{
    if (gpio_output_bit_get(LED_GPIO_TYPE, LED_GPIO_PIN))
    {
        gpio_bit_reset(LED_GPIO_TYPE, LED_GPIO_PIN);
    }
    else
    {
        gpio_bit_set(LED_GPIO_TYPE, LED_GPIO_PIN);
    }
}

使用特权

评论回复
24
初级工程渣|  楼主 | 2024-6-30 13:26 | 只看该作者
bsp_gpio.h#ifndef BSP_GPIO_H
#define BSP_GPIO_H

#include "bsp.h"

/* GPIO 定义 */
#define LED_GPIO_CLK RCU_GPIOC
#define LED_GPIO_TYPE GPIOC
#define LED_GPIO_PIN GPIO_PIN_13

void bsp_gpio_init(void);
void bsp_gpio_on(void);
void bsp_gpio_off(void);
void bsp_gpio_toggle(void);

#endif

使用特权

评论回复
25
初级工程渣|  楼主 | 2024-6-30 13:26 | 只看该作者
由于我将延时函数的中断放在了bsp_system.c文件中所以gd32f10x_it.c文件需要删除此部分的中断函数,gd32f10x_it.c故应更改为(删除了不必要的注释,太长了)

#include "gd32f10x_it.h"
#include "bsp.h"

void NMI_Handler(void)
{
    /* if NMI exception occurs, go to infinite loop */
    while(1) {
    }
}

void HardFault_Handler(void)
{
    /* if Hard Fault exception occurs, go to infinite loop */
    while(1) {
    }
}

void MemManage_Handler(void)
{
    /* if Memory Manage exception occurs, go to infinite loop */
    while(1) {
    }
}

void BusFault_Handler(void)
{
    /* if Bus Fault exception occurs, go to infinite loop */
    while(1) {
    }
}

void UsageFault_Handler(void)
{
    /* if Usage Fault exception occurs, go to infinite loop */
    while(1) {
    }
}

void SVC_Handler(void)
{
    /* if SVC exception occurs, go to infinite loop */
    while(1) {
    }
}

void DebugMon_Handler(void)
{
    /* if DebugMon exception occurs, go to infinite loop */
    while(1) {
    }
}

void PendSV_Handler(void)
{
    /* if PendSV exception occurs, go to infinite loop */
    while(1) {
    }
}

使用特权

评论回复
26
初级工程渣|  楼主 | 2024-6-30 13:28 | 只看该作者
编译下载运行
点击build或直接F7按键

使用特权

评论回复
27
初级工程渣|  楼主 | 2024-6-30 13:29 | 只看该作者
没更改编译器版本则会如下报错:
../system/GD32F10x_standard_peripheral/gd32f10x_dac.c(35): warning: In file included from...

使用特权

评论回复
28
初级工程渣|  楼主 | 2024-6-30 13:29 | 只看该作者
因为编译器版本不对,做以下更改就行。



后面点击OK,再编译一次即可。

使用特权

评论回复
29
初级工程渣|  楼主 | 2024-6-30 13:29 | 只看该作者
若无其他报错即可下载运行,这里我的是jlink下载做以下设置即可

使用特权

评论回复
30
初级工程渣|  楼主 | 2024-6-30 13:29 | 只看该作者

使用特权

评论回复
31
初级工程渣|  楼主 | 2024-6-30 13:29 | 只看该作者

使用特权

评论回复
32
初级工程渣|  楼主 | 2024-6-30 13:30 | 只看该作者
如此设置即可,然后一步步确认ok即可。
下载程序

使用特权

评论回复
33
初级工程渣|  楼主 | 2024-6-30 13:30 | 只看该作者
效果:如果PC13引脚上接了led就会闪烁,或者用电压表测PC13引脚它会每隔500ms变化一次电平。


使用特权

评论回复
34
鹿鼎计| | 2024-7-1 20:01 | 只看该作者
在Keil中新建基于GD32F103的基础工程,可按照以下步骤操作:选择微控制器GD32F103,新建工程,配置项目属性,创建主文件。简要描述约40字:新建Keil工程,选GD32F103,配置后创建主文件。

使用特权

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

本版积分规则