GD32连接onenet,上传数据并控制LED(全网首发)

之前都是copy网上的代码来实现接入onenet的,这次就突破一下自己,自己从0到1写出来(因为网上暂时还没有【哭泣】)

持续更新.....

已经连上了,等我优化代码再更新文章!

目录

步骤:

1.实现串口助手通讯

1.1  gd32f103c8t6的串口配置

1.2 gd32的串口接收

 2.移植onenet提供的代码

3.上传数据

4.微信小程序控制gd32板载LED 亮灭


所需材料:

gd32f103c8t6

esp-01s

步骤:

1.实现串口助手通讯

1.1  gd32f103c8t6的串口配置

gd32的串口和stm32的串口还是有一定的区别,但是gd32变的更简单了,下面我们一起来分析代码

uart.c代码

#include "uart.h"


void GD_USART_Config()
{
	  // GPIO时钟使能
    rcu_periph_clock_enable(RCU_GPIOA);
	
//		rcu_periph_clock_enable(RCU_AF); //打开重映射时钟
//	
//		/* USART0 串口重映射使能 */
//		gpio_pin_remap_config(GPIO_USART0_REMAP, ENABLE);
	
    // USART时钟使能
    rcu_periph_clock_enable(RCU_USART0);
    
    // 配置TX为推挽复用模式
    gpio_init(GPIOA, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_9);
    // 配置RX为浮空输入模式
    gpio_init(GPIOA, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_10);
    
    // 配置串口的工作参数
    usart_deinit(USART0);
    usart_baudrate_set(USART0, 115200U);                        // 波特率
    usart_word_length_set(USART0, USART_WL_8BIT);               // 帧数据字长
    usart_stop_bit_set(USART0, USART_STB_1BIT);                 // 停止位
    usart_parity_config(USART0, USART_PM_NONE);                 // 奇偶校验位
    usart_hardware_flow_rts_config(USART0, USART_RTS_DISABLE);  // 硬件流控制RTS
    usart_hardware_flow_cts_config(USART0, USART_CTS_DISABLE);  // 硬件流控制CTS
    usart_receive_config(USART0, USART_RECEIVE_ENABLE);         // 使能接收
    usart_transmit_config(USART0, USART_TRANSMIT_ENABLE);       // 使能发送
    usart_enable(USART0);                                       // 使能串口    
    
    // 使能USART中断
    nvic_irq_enable(USART0_IRQn, 0, 0);
    // 使能串口接收中断
    usart_interrupt_enable(USART0, USART_INT_RBNE);
}


/**
 @brief 串口写入数据
 @param pData -[in] 写入数据
 @param dataLen -[in] 写入数据长度
 @return 无
*/

void UART_Write(uint8_t *pData, uint32_t dataLen)
{
    uint8_t i;	
    for(i = 0; i < dataLen; i++)
    {
        usart_data_transmit(USART0, pData[i]);                  // 发送一个字节数据
        while(RESET == usart_flag_get(USART0, USART_FLAG_TBE)); // 发送完成判断
    }
}



/**
  * @brief 重定向c库函数printf到USARTx
  * @retval None
  */
int fputc(int ch, FILE *f)
{
    usart_data_transmit(USART0, (uint8_t)ch);
    while(RESET == usart_flag_get(USART0, USART_FLAG_TBE));
    return ch;
}

/**
  * @brief 重定向c库函数getchar,scanf到USARTx
  * @retval None
  */
int fgetc(FILE *f)
{
    uint8_t ch = 0;
    ch = usart_data_receive(USART0);
    return ch;
}

这里实现的串口的配置,重定向c库函数getchar,scanf, 重定向c库函数printf。这样串口就能实现发数据。

 

 

 那么串口这里就实现了发送,那我们接下来就实现接收,因为8266模块收到AT指令后,回返回一个参数,我们判断这个参数是否和我们预期的一样,所以就需要用到中断接收。

1.2 gd32的串口接收

因为我们需要知道AT指令返回了什么,与我们预期的结果是否一致,所以需要用到串口接收,然后把所有收到的数据存到一个数组里面,就是常说的bueffer,总体的框架如下图。

 代码解析:

1.首先串口接收到数据,USART1数据寄存器的USART_INT_FLAG_RBNE会自动置一。所以我们第一件事情就是将标志位清零,为了确保下次有数据传过来

2.esp8266_buf[esp8266_cnt++] = usart_data_receive(USART1);这里就是将串口接收到的数据一位一位的存进一个buffer数组里面,里面串口是1个bit,1个bit 的发,还是从低位开始发的,所以我们这样写是最完美的。

 2.移植onenet提供的代码

接下来我们就移植onenet提供的代码onenet论坛

打开网址里面的百度网盘链接,并下载里面的文件。

解压后的文件如下图, 

然后我们打开第8个,如图

看到里面有这4个,除了main,其他都移植到你工程项目里面(前提是你的工程项目没有),如果你工程项目有的话,你就把没有的移植进去,然后main里面的,你缺什么就移什么,然后就去改wifi热点,和onenet 的产品ID和设备号,需要改哪些东西,文件夹里面有说明,打开看就完事,简简单单

注:虽然是stm32的例程,但是并不影响我们操作

 移植完后就变成了像我这样

 编译之后都是  0 error  0,waring ,编译唯一的区别就是,把stm32的串口,中断服务函数改为gd32的串口,服务函数,其他东西理都不用理,是的,理都不用理,这个很重要,画起来!

 

 最后在这个文件里面修改这些东西,这些东西不用我教了吧。不懂的可以看我stm32连接onenet 的内容部分, 再修改一下wifi密码就完事了

 然后接烧录代码,就可以了!

可以看到自己的产品是在线的就说明成功了,后面就可以上传数据和下发命令了!

3.上传数据

4.微信小程序控制gd32板载LED 亮灭

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

盒马玩家

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值