兆易创新的GD32单片机在中国MCU厂商市场中一直有着不算太小的份额。最近由于ST系列单片机的大幅度涨价,国产MCU凭借价格优势逐渐扩大了在开发群体中的影响力和接受度。
本文将教大家如何从0开始上手GD32系列单片机,并移植涂鸦MCU-SDK来对接涂鸦WB3S wifi模块,快速接入涂鸦云。
本文选用的MCU型号为GD32F450,按照以下流程操作即可创建一个Keil5环境的工程模板:
(Peripherals组内添加Soure文件夹下所有源文件)
mcu_sdk内暂时是空的,到后面移植SDK的时候再说。
#include "gd32f4xx.h"
#include "systick.h"
int main(void){
while(1){
}
}
点击编译,显示无报错,就完成了工程模板的创建。
进入涂鸦智能IoT平台,点击创建产品。这里不用纠结产品品类的选择,重点是为了拿到MCU-SDK文件,实际使用时可以根据具体的产品修改sdk内部的pid即可适配自己的产品。
点击编译,会崩出几个error,接下来就需要按照出error的地方的注释提示一步步修改代码。
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);
}
uart_receive_input()
接口添加进去,添加完成后,删除error注释即可:/*!
\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:
由于我们上一步已经通过中断接收的形式实现了串口数据接收处理了,这个多字节处理我们可以不用,直接把error注释删除即可。
下一个:
按照提示将该接口放在main函数的while循环内即可,别忘了在 main.c 中包含 wifi.h 头文件。
再来看下一个error:
同样的,按照提示将该函数放到main函数开头部分即可。
然后是串口发送相关:
这里只需实现串口0的数据发送函数然后放进去即可。使用GD32的串口单字节发送的库函数,同时对发送情况做一个判断,添加代码如下:
void usart_sendbyte(unsigned char data)
{
usart_data_transmit(USART0, data);
while(RESET == usart_flag_get(USART0, USART_FLAG_TBE)){
}
}
然后是DP数据点上报相关的:
这里我们可以直接注释掉error提示,在实际开发过程中再实现该功能即可。
最后是产测相关的:
一般开发者不涉及生产测试的话直接删除注释不用管就行。
修改完上述几处地方后,再次编译,显示error全部消除,至此涂鸦MCU SDK就已移植完毕,后续可使用涂鸦模组调试助手进行测试。涂鸦模组调试助手的使用方法可参考调试助手文档。