从零开始创建GD32F4系列单片机工程模板&移植涂鸦MCU-SDK

从零开始创建GD32F4系列单片机工程模板&移植涂鸦MCU-SDK

 兆易创新的GD32单片机在中国MCU厂商市场中一直有着不算太小的份额。最近由于ST系列单片机的大幅度涨价,国产MCU凭借价格优势逐渐扩大了在开发群体中的影响力和接受度。

  本文将教大家如何从0开始上手GD32系列单片机,并移植涂鸦MCU-SDK来对接涂鸦WB3S wifi模块,快速接入涂鸦云。

工程搭建


  本文选用的MCU型号为GD32F450,按照以下流程操作即可创建一个Keil5环境的工程模板:

  • 前去官网下载GD32F4xx的环境支持包和标准固件库:

从零开始创建GD32F4系列单片机工程模板&移植涂鸦MCU-SDK_第1张图片

  • 按照自己使用的IDE选择相应的支持包进行安装:

从零开始创建GD32F4系列单片机工程模板&移植涂鸦MCU-SDK_第2张图片

  • 创建一个文件夹,并在其中按照下图创建数个子文件夹:

从零开始创建GD32F4系列单片机工程模板&移植涂鸦MCU-SDK_第3张图片

  • 将下载的GD32F4xx_Firmware_Library_V2.1.2\Firmware\CMSIS文件夹下的所有内容拷贝到我们自己创建的CMSIS文件夹下,同时将GD32F4xx_Firmware_Library_V2.1.2\Template中的gd32f4xx_libopt.h文件拷贝到CMSIS\GD\GD32F4xx\include中:

从零开始创建GD32F4系列单片机工程模板&移植涂鸦MCU-SDK_第4张图片

从零开始创建GD32F4系列单片机工程模板&移植涂鸦MCU-SDK_第5张图片

  • 将GD32F4xx_Firmware_Library_V2.1.2\Firmware\GD32F4xx_standard_peripheral文件夹拷贝到Peripherals文件夹中:

从零开始创建GD32F4系列单片机工程模板&移植涂鸦MCU-SDK_第6张图片

  • 将GD32F4xx_Firmware_Library_V2.1.2\Firmware\CMSIS\GD\GD32F4xx\Source\ARM中的文件拷贝到Startup中:

从零开始创建GD32F4系列单片机工程模板&移植涂鸦MCU-SDK_第7张图片

  • 将GD32F4xx_Firmware_Library_V2.1.2\Template中的gd32f4xx_it.c、systick.c和它们对应的头文件都拷贝到User文件夹内,同时创建main.c文件:

从零开始创建GD32F4系列单片机工程模板&移植涂鸦MCU-SDK_第8张图片

  • 打开Keil5,创建新工程,位置在刚刚创建的MDK-ARM文件夹里,然后选择对应的MCU型号。

从零开始创建GD32F4系列单片机工程模板&移植涂鸦MCU-SDK_第9张图片

  • 打开Manage Project Items,添加如下Groups:

从零开始创建GD32F4系列单片机工程模板&移植涂鸦MCU-SDK_第10张图片

  • 在每个组内添加如下文件:

从零开始创建GD32F4系列单片机工程模板&移植涂鸦MCU-SDK_第11张图片

从零开始创建GD32F4系列单片机工程模板&移植涂鸦MCU-SDK_第12张图片

从零开始创建GD32F4系列单片机工程模板&移植涂鸦MCU-SDK_第13张图片

(Peripherals组内添加Soure文件夹下所有源文件)

从零开始创建GD32F4系列单片机工程模板&移植涂鸦MCU-SDK_第14张图片

mcu_sdk内暂时是空的,到后面移植SDK的时候再说。

  • 点击魔法棒,添加include paths:

从零开始创建GD32F4系列单片机工程模板&移植涂鸦MCU-SDK_第15张图片

  • 在main.c文件中添加:
#include "gd32f4xx.h"
#include "systick.h"

int main(void){

    while(1){

    }
}

点击编译,显示无报错,就完成了工程模板的创建。

从零开始创建GD32F4系列单片机工程模板&移植涂鸦MCU-SDK_第16张图片

MCU SDK移植

  进入涂鸦智能IoT平台,点击创建产品。这里不用纠结产品品类的选择,重点是为了拿到MCU-SDK文件,实际使用时可以根据具体的产品修改sdk内部的pid即可适配自己的产品。

  • 这里以普通的灯为例,选择照明->光源->自定义方案

  • 输入任意产品名称,通讯协议选择 WiFi+蓝牙,确认创建。

从零开始创建GD32F4系列单片机工程模板&移植涂鸦MCU-SDK_第17张图片

  • 跳出的功能添加页面直接点确定,点开硬件开发一栏,对接方式选择“涂鸦标准模组MCU SDK开发”,模组选择WB3S Wi-Fi&Bluetooth模组(在实际开发过程中可选择手上已有的涂鸦模组即可)

从零开始创建GD32F4系列单片机工程模板&移植涂鸦MCU-SDK_第18张图片

  • 拉到页面最下方,在下载资料一栏点击下载全部:

从零开始创建GD32F4系列单片机工程模板&移植涂鸦MCU-SDK_第19张图片

  • 在解压后的文件夹中找到mcu_sdk相关源文件和头文件,全部拷贝到我们创建好的GD32工程模板里的mcu_sdk文件夹里:

从零开始创建GD32F4系列单片机工程模板&移植涂鸦MCU-SDK_第20张图片

  • 打开GD32工程,将mcu_sdk的源文件添加进对应组里,同时添加include paths:

从零开始创建GD32F4系列单片机工程模板&移植涂鸦MCU-SDK_第21张图片

从零开始创建GD32F4系列单片机工程模板&移植涂鸦MCU-SDK_第22张图片

点击编译,会崩出几个error,接下来就需要按照出error的地方的注释提示一步步修改代码。

从零开始创建GD32F4系列单片机工程模板&移植涂鸦MCU-SDK_第23张图片

  • uart_receive_input()为串口接收数据处理接口,只需将它放进串口中断中即可,这里我们以串口0作为与通讯串口为例,首先在main函数中添加串口0初始化代码,并使能接收中断:
void system_init(void);
void uart_init(void);

int main(void)
{
    system_init();
    
    while(1){

    }
}

void system_init(void)
{
    /* configure systick */
    systick_config();
	
    /* USART interrupt configuration */
    nvic_irq_enable(USART0_IRQn, 0, 0);

    /* configure uart */
    uart_init();

    /* enable USART0 receive interrupt */
    usart_interrupt_enable(USART0, USART_INT_RBNE);

}

void uart_init(void)
{   
    /* enable USART clock */
    rcu_periph_clock_enable(RCU_USART0);
	
    /* connect port to USART0_Tx */
    gpio_af_set(GPIOA, GPIO_AF_7, GPIO_PIN_9);

    /* connect port to USART0_Rx */
    gpio_af_set(GPIOA, GPIO_AF_7, GPIO_PIN_10);
	
    /* configure USART Tx as alternate function push-pull */
    gpio_mode_set(GPIOA, GPIO_MODE_AF, GPIO_PUPD_PULLUP,GPIO_PIN_9);
    gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_9);

    /* configure USART Rx as alternate function push-pull */
    gpio_mode_set(GPIOA, GPIO_MODE_AF, GPIO_PUPD_PULLUP,GPIO_PIN_10);
    gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_10);

    /* USART configure */
    usart_deinit(USART0);
    usart_baudrate_set(USART0,115200U);
    usart_receive_config(USART0, USART_RECEIVE_ENABLE);
    usart_transmit_config(USART0, USART_TRANSMIT_ENABLE);
    usart_enable(USART0);
}
  • 然后在 gd32f4xx_it.c 文件中添加串口0中断处理函数,然后包含 wifi.h 文件并将uart_receive_input()接口添加进去,添加完成后,删除error注释即可:

从零开始创建GD32F4系列单片机工程模板&移植涂鸦MCU-SDK_第24张图片

/*!
    \brief      this function handles USART RBNE interrupt request and TBE interrupt request
    \param[in]  none
    \param[out] none
    \retval     none
*/
void USART0_IRQHandler(void)
{

    if((RESET != usart_interrupt_flag_get(USART0, USART_INT_FLAG_RBNE)) && 
       (RESET != usart_flag_get(USART0, USART_FLAG_RBNE))){

        uart_receive_input((uint8_t)usart_data_receive(USART0));		

    }
}

再来看下一个errror:

从零开始创建GD32F4系列单片机工程模板&移植涂鸦MCU-SDK_第25张图片

由于我们上一步已经通过中断接收的形式实现了串口数据接收处理了,这个多字节处理我们可以不用,直接把error注释删除即可。

下一个:

从零开始创建GD32F4系列单片机工程模板&移植涂鸦MCU-SDK_第26张图片

按照提示将该接口放在main函数的while循环内即可,别忘了在 main.c 中包含 wifi.h 头文件。

从零开始创建GD32F4系列单片机工程模板&移植涂鸦MCU-SDK_第27张图片

再来看下一个error:

从零开始创建GD32F4系列单片机工程模板&移植涂鸦MCU-SDK_第28张图片

同样的,按照提示将该函数放到main函数开头部分即可。

然后是串口发送相关:

从零开始创建GD32F4系列单片机工程模板&移植涂鸦MCU-SDK_第29张图片

这里只需实现串口0的数据发送函数然后放进去即可。使用GD32的串口单字节发送的库函数,同时对发送情况做一个判断,添加代码如下:

void usart_sendbyte(unsigned char data)
{
    usart_data_transmit(USART0, data);
	
    while(RESET == usart_flag_get(USART0, USART_FLAG_TBE)){
    }
}

然后是DP数据点上报相关的:

从零开始创建GD32F4系列单片机工程模板&移植涂鸦MCU-SDK_第30张图片

这里我们可以直接注释掉error提示,在实际开发过程中再实现该功能即可。


最后是产测相关的:

从零开始创建GD32F4系列单片机工程模板&移植涂鸦MCU-SDK_第31张图片

一般开发者不涉及生产测试的话直接删除注释不用管就行。

修改完上述几处地方后,再次编译,显示error全部消除,至此涂鸦MCU SDK就已移植完毕,后续可使用涂鸦模组调试助手进行测试。涂鸦模组调试助手的使用方法可参考调试助手文档。

你可能感兴趣的:(模块图鉴,嵌入式,单片机,gd32,物联网)