目录
〇、目的、GD32、ML302相关简介
0.目的:
使用手上的开发板(mcu为gd32f407+4G模组中移物联ML302),连接阿里云物联网平台,实现数据的上行和下行。
使用4G模组支持的mqtt协议AT指令。
其实就是测试一些这个开发板和模组,顺便学习一下......
1.ML302:

ML302 是中国移动最新推出的 LTE Cat.1 模块。ML302 支持 LTE- TDD/LTE- FDD/GSM,同时支持 GNSS/BT/
Wi- Fi Scan。采用 LCC+LGA 封装方式。ML302丰富的 Internet 协议、行业标准接口和功能,支持 Windows、Linux 和 Android 驱动。ML302 可广泛应用到 M2M多个领域中,如共享、金融支付、POC、工业控制等。
这个4G模组真的是太好用了,丰富的AT指令,想比之前的8266可以少些很多代码。
2.LTE Cat.1:
简单说,就是“低配版”的4G终端!

3.GD32F407
兆易创新为国内存储的龙头企业,主营业务包括存储器,微处理器以及传感器等。
据说芯片和ST的是pin_to_pin兼容,但是因版权还是有一些小差别,这里我使用的GD官方的开发库。(本来打算用STM32CubeMX直接生成工程,但这样还要改动底层的一些东西....)
下载GD固件库(去官网):http://www.gd32mcu.com/cn/download?kw=GD32F4
【GD32相关芯片资料】 有需要请参考 这份资料很全,GD所有芯片系列固件库、datasheet、用户手册...
链接:百度网盘-官网公开资料 (全)
提取码:20fc

一、GD芯片创建工程写驱动:LED、串口4、4G模块
1.创建工程
创建工程有两种方式:1是按照固件库中的模板直接打开直接换文件直接用,2是自己创建一个空工程,再一个一个文件添加到工程中,这里我选择的方法2。
创建工程,选择芯片型号(提前下载DFP芯片安装包),添加文件组,设置魔术棒中的选项(宏、路径...),编译....

2.LED的GPIO驱动
查看开发板原理图,找到LED的电路图和芯片的GPIO

按照GD固件库中的示例对GPIO进行编程。
led.h
#ifndef LED_H
#define LED_H
#ifdef __cplusplus
extern "C" {
#endif
#include "gd32f4xx.h"
#include "systick.h"
/* exported types */
typedef enum
{
LED1 = 0,
LED2 = 1,
LED3 = 2
} led_typedef_enum;
/*
PD10 --> LED1
PD11 --> LED2
*/
/* eval board low layer led */
#define LEDn 2U
#define LED1_PIN GPIO_PIN_10
#define LED1_GPIO_PORT GPIOD
#define LED1_GPIO_CLK RCU_GPIOD
#define LED2_PIN GPIO_PIN_11
#define LED2_GPIO_PORT GPIOD
#define LED2_GPIO_CLK RCU_GPIOD
/* function declarations */
/* configures led GPIO */
void gd_eval_led_init(led_typedef_enum lednum);
/* turn on selected led */
void gd_eval_led_on(led_typedef_enum lednum);
/* turn off selected led */
void gd_eval_led_off(led_typedef_enum lednum);
/* toggle the selected led */
void gd_eval_led_toggle(led_typedef_enum lednum);
void zdw_led_loop(void);
void zdw_led1_on(void);
void zdw_led2_on(void);
void zdw_led1_off(void);
void zdw_led2_off(void);
void zdw_bsp_led_init(void);
#ifdef __cplusplus
}
#endif
#endif
led.c
#include "led.h"
/* private variables */
static uint32_t GPIO_PORT[LEDn] = {LED1_GPIO_PORT, LED2_GPIO_PORT};
static uint32_t GPIO_PIN[LEDn] = {LED1_PIN, LED2_PIN};
static rcu_periph_enum GPIO_CLK[LEDn] = {LED1_GPIO_CLK, LED2_GPIO_CLK};
/*!
\brief configure led GPIO
\param[in] lednum: specify the Led to be configured
\arg LED1
\arg LED2
\arg LED3
\param[out] none
\retval none
*/
void gd_eval_led_init (led_typedef_enum lednum)
{
/* enable the led clock */
rcu_periph_clock_enable(GPIO_CLK[lednum]);
/* configure led GPIO port */
gpio_mode_set(GPIO_PORT[lednum], GPIO_MODE_OUTPUT, GPIO_PUPD_NONE,GPIO_PIN[lednum]);
gpio_output_options_set(GPIO_PORT[lednum], GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,GPIO_PIN[lednum]);
GPIO_BC(GPIO_PORT[lednum]) = GPIO_PIN[lednum];
}
/*!
\brief turn on selected led
\param[in] lednum: specify the Led to be turned on
\arg LED1
\arg LED2
\param[out] none
\retval none
*/
void gd_eval_led_on(led_typedef_enum lednum)
{
GPIO_BOP(GPIO_PORT[lednum]) = GPIO_PIN[lednum];
}
/*!
\brief

本文档详细记录了使用GD32F407微控制器和ML302 4G模块连接阿里云物联网平台的过程。首先介绍了ML302模块的特性,然后通过GD32F407创建工程,编写LED、串口4和4G模块的驱动。接着,利用MQTT协议发送AT指令测试ML302的TCP连接,并成功连接到阿里云物联网平台,实现了数据的上行和下行。最后展示了设备在线及消息收发的成果。
最低0.47元/天 解锁文章
298

被折叠的 条评论
为什么被折叠?



