GD32官方开发环境及固件库使用笔记(一)

本文介绍了如何在GD32官方开发环境GDEclipse中快速创建工程,包括配置固件库、修改SysTick中断优先级以提高实时性,以及在不使用printf的情况下实现串口打印。同时提到了使用printf可能带来的内存消耗问题和替代方案。

1.快速创建GD32工程

使用GD32官方的开发环境(以下称GD Eclipse)暂时只支持GD32E23x和GD32F31x等系列的单片机进行图形配置及代码生成(这些系列同时也提供HAL固件库)。其他系列的单片机尽管无法进行图形配置和自动生成代码,但也可以利用其快速创建项目工程,相比使用标准版Eclipse来说,省去自行下载固件库和配置工程的麻烦,同时还可添加官方的初始化代码(尽管很简陋),方法如下:

点击菜单栏File->New->Project…,弹出创建新工程对话框。

deb8a02ed5d04e608711f72d52ece928.pngb4f7e885417e4c36940080011d0a13ee.png

4f440a08d9214ba2bfc5b7ef79774e4c.pnga29c8ca0b99b4512a77b360fca28eb14.png

通过选择目标芯片,自动拷贝对应的固件库相关文件,并且配置好对应的编译环境,可减少开发工作中Ctrl+C/V的使用频率。

2.修改systick中断优先级

GD官方开发环境创建工程时生成的初始化代码中,SysTick滴答定时器中断的优先级别默认设置为最高的0,需要把优先级别降低,因为一般都会使用SysTick滴答定时器来延时,该中断频繁响应会影响到其他重要中断的实时性,同时注意不要在中断服务函数(包括中断回调函数)中调用SysTick的延时函数。

3.开启串口打印功能

在GD Eclipse环境中要实现printf函数打印log信息,方法不同于Keil环境。

由于GD Eclipse环境中使用的是标准C库,printf函数的底层调用的是_write() 函数实现输出,所以要重写write函数:

int _write (int fd, char *pBuffer, int size)
{  
    for (int i = 0; i < size; i++)
    {
		usart_data_transmit(USART_PORT, (uint8_t)pBuffer[i]);
		while(RESET == usart_flag_get(USART_PORT, USART_FLAG_TBE));
    }
    return size;  
}

注意该函数在CMSIS库中也定义了,需要将其屏蔽,同时需要修改Eclipse的配置,见下图:

5afe055972504b4ea658db8f5f95d055.png

注意:该方法使用GCC的libgcc.a进行使用printf,会消耗较大的flash空间(实测会增加10K),小容量的单片机慎用。

使用GD官方的固件库时,推荐采用独立的函数来实现log日志打印,例如:

int uartport_debug_putstring (const uint8_t *pBuffer)
{
    uint8_t pchar;
    int i=0;
    if(debug_com_periph==0)return -1;
    pchar = pBuffer[i++];
    while(pchar!='\0'){
        while(RESET == usart_flag_get (debug_com_periph, USART_FLAG_TBE));
        usart_data_transmit (debug_com_periph, pchar);
        pchar = pBuffer[i++];
    }
    return i;
}

void log_printf( const char * format, ...)
{
    char str[64]={0};
    va_list ap;
    va_start(ap, format);
    (void)vsnprintf(str, sizeof(str)-1, format, ap);
    va_end(ap);
    uartport_debug_putstring((const uint8_t *)str);
}

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值