【GD32F427开发板试用】基于蓝牙模块的远程点灯演示

news2024/11/19 11:28:05

本篇文章来自极术社区与兆易创新组织的GD32F427开发板评测活动,更多开发板试用活动请关注极术社区网站。作者:寒冰1988

一. 前言

感谢极术社区联合兆易创新组织的本次活动,很荣幸能够中签本次的试用机会,结合手里的外围模块,本次试用打算分两次进行,先打通蓝牙模块,通过一个简单的点灯来验证蓝牙通路的连通性,然后调通步进电机,最后将蓝牙和步进电机结合起来实现远程电机的控制。本文即使第一步,利用蓝牙实现远程点灯。

二. 硬件环境

2.1 主控板介绍

本次实验采用的主控板为GD32F427V-START,其引脚已经全部引出,焊接插针以后就可以直接试用,可以充分的利用板子的各种外设控制器资源,遗憾的是板子上仅提供一路3.3V的输出,不利于外围的扩展,而且没有集成USB2UART模块,需要单独的USB2TTL模块才能实现调试信息的输出。

2.2 蓝牙模块

蓝牙模块选用的是DX-BT04-E,支持BLE4.2+SPP3.0,电源电压支持3.3/5V,可以直接由主控板供电,完全兼容串口操作,仅需4根线即可工作。

蓝牙模组提供的使用范例如下,通过手机端蓝牙APP即可实现跟MCU的相互通讯,从而实现远程的控制。

2.3 设备连接

由GD32F427V-START板的原理图可知,USART0的PA9和PA10两个管脚已被占用,通过查阅GD32F427xxDatasheet可知PB6和PB7也可以用来配置为USART0的数据管脚。

查清楚各管脚的分配后,MCU主控板和BT模组的连接如下所示。

三. 软件实现

3.1 串口驱动

采用USART0来驱动蓝牙模块,配置PB6和PB7的功能为AF_7(将TX和RX路由到PB6和PB7),看了几篇串口文章的实现,代码中遗漏了要使能对应管脚的时钟,如下代码开启相应时钟:

/* enable USART clock */
rcu_periph_clock_enable(RCU_GPIOB);
rcu_periph_clock_enable(RCU_USART0);

3.2 蓝牙控制规则

当前串口的实现单次只能获得一个字符,简化起见,发送“0”字符(对应ASII码0x30)关闭LED灯,发送“1”字符(对应ASII码0x31)开启LED灯。上位机采用蓝牙厂家的蓝牙调试工具,或者自己安装串口蓝牙调试APP也可以。

3.3 LED控制逻辑

GD32F427V-START板提供了一个LED供用户测试使用,通过控制GPIOC_6就可以实现LED的亮灭,代码如下:

/* turn off LED2 */
gpio_bit_reset(GPIOC, GPIO_PIN_6);
/* turn on LED2 */
gpio_bit_set(GPIOC, GPIO_PIN_6);

3.4 代码

整体代码实现如下,主要步骤已添加注释。

#include "gd32f4xx.h"
#include "gd32f427v_start.h"
#include "systick.h"
#include <stdio.h>

void UART0_Transmit(unsigned char *Data,unsigned int Lenth)
{
    int i=0;
    for(i=0;i<Lenth;i++)
    {
        usart_data_transmit(USART0,Data[i]);
        while(RESET == usart_flag_get(USART0, USART_FLAG_TC));
    }
}

/*!
    \brief      main function
    \param[in]  none
    \param[out] none
    \retval     none
*/
int main(void)
{
    unsigned char ch = 0;

    /* configure systick */
    systick_config();

    /* enable the LEDs GPIO clock */
    rcu_periph_clock_enable(RCU_GPIOC);
    
    /* enable USART clock */
    rcu_periph_clock_enable(RCU_GPIOB);
    rcu_periph_clock_enable(RCU_USART0);

    /* configure LED2 GPIO port */
    gpio_mode_set(GPIOC, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_6);
    gpio_output_options_set(GPIOC, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_6);
    /* reset LED2 GPIO pin */
    gpio_bit_reset(GPIOC, GPIO_PIN_6);
    
    /* configure the USART0 TX pin and USART0 RX pin */
    gpio_af_set(GPIOB, GPIO_AF_7, GPIO_PIN_6);
    gpio_af_set(GPIOB, GPIO_AF_7, GPIO_PIN_7);
    
    /* configure USART0 TX as alternate function push-pull */
    gpio_mode_set(GPIOB, GPIO_MODE_AF, GPIO_PUPD_PULLUP, GPIO_PIN_6);
    gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_6);

    /* configure USART0 RX as alternate function push-pull */
    gpio_mode_set(GPIOB, GPIO_MODE_AF, GPIO_PUPD_PULLUP, GPIO_PIN_7);
    gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_7);

    /* USART configure */
    usart_deinit(USART0);
    usart_baudrate_set(USART0, 9600U);
    usart_receive_config(USART0, USART_RECEIVE_ENABLE);
    usart_transmit_config(USART0, USART_TRANSMIT_ENABLE);
    usart_enable(USART0);
    
    while(1) {
        while (RESET == usart_flag_get(USART0, USART_FLAG_RBNE));
        ch = usart_data_receive(USART0);
        if (ch == 0x30) {
            /* turn off LED2 */
            gpio_bit_reset(GPIOC, GPIO_PIN_6);
        }
        if (ch == 0x31) {
            /* turn on LED2 */
           gpio_bit_set(GPIOC, GPIO_PIN_6);
        }
    }
}

四. 效果展示

如视频所示,当手机端发送“0”时,LED灯灭,发送“1”时,LED灯亮。

https://www.bilibili.com/video/BV1CP4y1B7yA​www.bilibili.com/video/BV1CP4y1B7yA

五. 后记

因为快递(重新购置了一些外围模组)和阳的缘故,本次相关实验和试用报告晚了一点,希望相关经验能够打开大家的思路。疫情的阴霾终究会过去,未来充满了希望,祝社区越来越好。

参考资料

  1. GD32F427V-START-V1.0.pdf
  2. GD32F4xx_gujiankushiyongzhinan_V1.0.pdf
  3. GD32F4xx_User_Manual_Rev2.7_CN.pdf
  4. GD32F427xx_Datasheet_Rev1.2.pdf
  5. GD32427V_START_Demo_Suites\Projects\01_GPIO_Running_LED
  6. DX-BT04-E 蓝牙模块技术手册2022.01.07.pdf

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/183618.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

代码随想录算法训练营第31天 回溯算法 93.复原IP地址 78.子集 90.子集II

文章目录LeetCode 93.复原IP地址题目讲解思路LeetCode 78.子集题目讲解思路LeetCode 90.子集II题目讲解难点总结LeetCode 93.复原IP地址 题目讲解 思路 递归参数 startIndex一定是需要的&#xff0c;因为不能重复分割&#xff0c;记录下一层递归分割的起始位置。 本题我们还…

ubuntu1804搭建svo2.0环境并跑euroc数据集

0说明 整个SVO2.0环境搭建过程按照官网的说明进行(链接&#xff1a;https://github.com/uzh-rpg/rpg_svo_pro_open) 开发环境是ubuntu18.04ROS-Melodic 1工具安装 Install catkin tools and vcstools if you haven’t done so before. Depending on your operating system …

使用这个插件,fiddler抓包直接生成httprunner脚本

har2case可以将.har文件转化成yaml格式或者json格式的httprunner的脚本文件&#xff0c;生成.har格式文件可以借助 fiddler 或 Charles 抓包工具 友情提示&#xff1a; 录制脚本&#xff0c;只是一个过渡&#xff0c;从0到1的一个过渡&#xff0c;如果让你直接写脚本&#xff…

微信app hook修改剪刀石头布以及骰子思路

0x01 前言 该方法很简单&#xff0c;本次记录是为了加深对安卓hook技术的学习&#xff0c;以及进一步熟悉frida和objection的使用&#xff0c;如果只是想需要这个功能&#xff0c;推荐手机root后装微x模块 技术仅供分享&#xff0c;请勿用于非法用途 0x02 环境准备 首先需要准…

linux下更新tomcat版本

进入tomcat目录下查看当前版本号./version.sh2.切忌升级之前一定要备份老版本mkdir tomcat-backup3.拷贝老版本到你创建的文件夹中cp -rf apache-tomcat-9.0.45-stunew/ tomcat-backup/4.下载tomcat安装包&#xff0c;随便你下载什么版本&#xff0c;我这里以68为例官网&#x…

ssm二手废旧塑料回收交易系统的设计与实现

内容是设计并且实现一个废旧塑料交易系统的设计与实现。它是在Windows下&#xff0c;以MYSQL为数据库开发平台&#xff0c;Tomcat网络信息服务作为应用服务器。废旧塑料交易系统的设计与实现的功能已基本实现&#xff0c;主要包括用户、回收站、加工厂、预约信息、收购信息、交…

ARP协议与ARP地址欺骗防护

ARP协议 什么是MAC地址 MAC地址是固化在网卡上的网络标识&#xff0c;由Ieee802标准规定。 什么是广播 向同一个网段内的设备&#xff0c;发送数据包&#xff0c;广播IP地址是同网段最后一个IP地址。 认识ARP协议 ARP的全称是地址解析协议&#xff0c;我们通过ARP协议获取…

Webpack 运行时代码分析 - 动态加载

文章内容&#xff1a;用 webpack 打包含有动态加载的模块&#xff0c;分析打包后的代码&#xff0c;也就是 webpack 运行时代码。 先思考如下一些问题&#xff1a; 1.什么叫做动态加载 2.如果不使用 webpack 打包&#xff0c;能做到动态加载吗 3.webpack 是如何实现动态加载的…

安装mysql的保姆级教程

安装mysql的保姆级教程&#xff1a; 1.准备的条件 已下载mysql应用软件 my.ini文件&#xff08;见2&#xff09; 2.设置my.ini文件 &#xff08;1&#xff09;my.ini文件内容&#xff1a; [mysqld] # 设置3306端口 port3306 # 设置mysql的安装目录 ----------是你的文件路径…

TCP/IP网络编程——基于 UDP 的服务端/客户端

完整版文章请参考&#xff1a; TCP/IP网络编程完整版文章 文章目录第 6 章 基于 UDP 的服务端/客户端6.1 理解 UDP6.1.1 UDP 套接字的特点6.1.2 UDP 的工作原理6.1.3 UDP 的高效使用6.2 实现基于 UDP 的服务端/客户端6.2.1 UDP 中的服务端和客户端没有连接6.2.2 UDP 服务器和客…

业务流程软件的优点和对企业的好处

我们都知道&#xff0c;CRM客户管理软件可以为企业识别意向客户&#xff0c;带来更多业绩。那么在处理业务的过程中&#xff0c;一套自带业务流程管理的CRM软件是否重要&#xff1f;下面我们来说说企业使用业务流程管理软件的好处&#xff0c;您就清楚问题的答案了。 1、减少错…

【项目精选】基于 Spring Boot + Mybatis Plus + MySQL 的社区居民联系方式管理系统

项目简介 此系统使用 Spring Boot Mybatis Plus Spring Security React Ant Design Pro 架构编写。数据库采用 MySQL&#xff0c;提供强大的、安全的和完整的管理社区居民的信息的功能。 安全性 此系统在系统层面提供了众多的安全特性&#xff0c;产品安全无忧。这些特性…

【高并发】- 生产级系统搭建 - 2

前言 本章讲解高并发系统中常见概念及相关设计的方案&#xff0c;目的是让小伙伴都了解高并发系统中&#xff0c;每个环节所涉及到的相关概念。帮助大家更好地理解和掌握高并发系统中的场景及设计思想。 1. 常见高并发系统架构图&#xff08;这里以秒杀系统为例&#xff09; 上…

国电投-光伏电站人工智能运维大数据处理分析比赛(记录)

前言 1-1 简介 DataFountain平台举办的比赛&#xff0c;赛题&#xff1a;光伏电站人工智能运维大数据处理分析。以下是比赛链接&#xff1a;光伏电站人工智能运维大数据处理分析 Competitions - DataFountain 1-2 任务背景 在分析光伏发电原理的基础上&#xff0c;论证了辐照…

虹科分享 | 2022年传感器事业部文章精选

2022年 文章精选 精选案例文章 虹科案例 | HK-Micronor光纤传感器应用领域介绍&#xff08;上&#xff09; 虹科案例 | HK-Micronor光纤传感器应用领域介绍&#xff08;下&#xff09; 虹科案例 | 如何更加准确的表征罐箱内燃油的质量规格&#xff1f; 虹科案例 | 监测各种…

java Vue+Springboot读书学习笔记共享平台

读书笔记共享平台的设计基于现有的网络平台&#xff0c;可以实现用户管理及数据信息管理&#xff0c;方便管理员对后台进行管理有详细的了解及统计分析&#xff0c;随时查看信息状态。 系统功能设计是在系统开发和设计思想的总体任务的基础上完成的。该系统的主要任务是实现读书…

CnOpenData中国保险机构网点全集数据

一、数据简介 改革开放以来&#xff0c;中国保险行业飞速增长&#xff0c;在补偿灾害损失、维护社会安定、支持中国的经济建设等方面发挥了重要作用。整个行业的突飞猛进体现在三个方面&#xff1a; 一是保险机构数量增长迅速。中国保险公司的数量从1980年的1家迅速增加至200多…

【云原生】Prometheus之图形化界面grafana与服务发现部署

内容预知 前言 1. 部署 Grafana 1.1 grafana的下载与安装 (1)安装grafana &#xff08;2&#xff09;配置数据源 &#xff08;3&#xff09;导入 grafana 监控面板 &#xff08;4&#xff09;删除模板操作 4.2 grafana的中文插件安装 2. 部署 Prometheus 服务发现 2.1…

C语言中二维数组的基本使用 定义 赋值读写指定元素的值 作为函数参数传递的注意点

文章目录问题依次解决C语言中二维数组如何定义、如何一次性赋值&#xff1f;如何使用 sizeof() 计算二维数组的行数、列数&#xff1f;【与定义数组的地方&#xff0c;在同一作用域内可用】如何读写指定位置的元素&#xff1f;【不同作用域&#xff0c;有两种方式】不同作用域内…

Git(见资源)

Git的概念【1】Git技术&#xff1a;公司必备&#xff0c;一定要会 【2】Git概念&#xff1a; Git是一个免费的、开源的分布式版本控制系统&#xff0c;可以快速高效地处理从小型到大型的项目。【3】什么是版本控制&#xff1f; 版本控制是一种记录一个或若干文件内容变化&#…