CH573-01-GPIO-LED——RISC-V内核BLE MCU快速开发教程

news2024/10/7 17:23:45

在这里插入图片描述

1. 新建工程

  1) NEW Project

    点击“File->New->MounRiver Project”:


  2) finish

    选择CH573F的裸机开发工程模板,如下图,然后点击“finish”


  3) 编译检查


  4) 精简代码

    打开工程目录下的./src/main.c文件,修改删掉生成的串口测试相关代码,仅保留最简代码,如下图:
在这里插入图片描述

2. GPIO输出相关API

  1) GPIO引脚配置API

void GPIO{x}_ModeCfg(uint32_t pin, GPIOModeTypeDef mode);

    打开目录“.\StdPeriphDriver\”下的“CH573_gipio.c”文件:
在这里插入图片描述

    在上述文件中可以找到“GPIO{x}_ModeCfg”函数,GPIO{x}_ModeCfg 函数用于完成GPIO{x}端口引脚模式配置,其中:
  {x}为端口选择,如A\B\C等;
  pin为引脚编号,如GPIO_Pin_0、GPIO_Pin_1等
  mode为引脚模式,包括:


    文件中还有引脚中断模式配置等API,不在此处讲解,后续中断实验中会进行具体描述。

  2) GPIO输出高低电平API

    a) 打开目录“.\StdPeriphDriver\”下的“CH573_gipio.h”文件

在这里插入图片描述

    b) GPIO{x}_SetBits(pin)/ GPIO{x}_ResetBits(pin)

    示例:

GPIOA_SetBits(GPIO_Pin_0);

   宏定义封装了GPIO的高低电平控制的API:GPIO{x}_ResetBits(pin);和GPIO{x}_SetBits(pin);

//设置高电平:
GPIOA_SetBits(LED_PIN);
//设置低电平
GPIOA_ResetBits(LED_PIN);

    c) GPIO{x}_InverseBits(pin);翻转电平信号输出

GPIOA_InverseBits(LED_PIN);

    d) 使用方法

   控制GPIO的高低电平的输出,只要初始化端口然后直接控制输出高低电平即可,如:

GPIOA_ModeCfg(GPIO_Pin_8, GPIO_ModeOut_PP_5mA);//推挽输出最大5mA
GPIOA_SetBits(GPIO_Pin_8);//设置高电平

3. 查看LED引脚

  打开目录“.\开发板资料\WeActStudio.WCH-BLE-Core\HDK”下的开发板原理图:
在这里插入图片描述
在这里插入图片描述


  可知LED接在PA8引脚上,且低电平点亮。

4. 闪烁LED代码

/********************************** (C) COPYRIGHT *******************************
 * File Name          : Main.c
 * Author             : FUNIOT.XYZ
 * Version            : V1.0
 * Date               : 2020/08/06
 * Description        : 实验01-LED闪烁
 * Copyright          : WeChat official accounts "IOT趣制作"
 * SPDX-License-Identifier: Apache-2.0
 *******************************************************************************/

#include "CH57x_common.h"

/*********************************************************************
 * @fn      main
 *
 * @brief   主函数
 *
 * @return  none
 */
int main()
{
	//时钟初始化
    SetSysClock(CLK_SOURCE_PLL_60MHz);
    //LED初始化
    GPIOA_ModeCfg(GPIO_Pin_8, GPIO_ModeOut_PP_5mA);//推挽输出最大5mA
    while(1)
    {
        GPIOA_ResetBits(GPIO_Pin_8); //LED点亮
        DelayMs(500);					//持续0.5s
        GPIOA_SetBits(GPIO_Pin_8); 	//LED熄灭
        DelayMs(500);					//持续0.5s
		//也可以使用下面的翻转达到闪烁的目的
//GPIOA_InverseBits(LED_PIN);//翻转电平信号,使LED状态与原状态相反
//DelayMs(500);				//持续0.5s
    }
}

5. 编译烧录运行

  1) 打开下载工具

点击Tools->WCH In-System Programmer:


  在自动打开的窗口中的MCU系列选择中选择“32位低功耗蓝牙系列 CH57x-CH58x”:


##   2) 进入烧录模式     重复步骤1:开发板连接type-c数据线,然后按下BOOT0/B22键后接入电脑完成上电,依旧保持长按,等待几秒后松开,进入烧录模式:

  3) 下载程序文件

    a) 查看程序文件位置

    进入路径“.\ MounRiver_Studio\workspace\CH573F_00_template\obj”可以看到hex文件:


    b) 选择文件

    点击目标程序文件的浏览按钮,选中上述的HEX文件路径:


    c) 进入下载模式后点击下载


  3) 运行

        烧录后按下复位,现象:LED交替闪烁


6. 修改为驱动库C和H文件模式

  在上文中我们已经实现了LED的基本使用,为了便于以后驱动的管理和移植,我们将LED的驱动配置为C和H文件模式

  1) 新建个人驱动文件夹MyDriver


  2) 新建led.h

在这里插入图片描述

  3) 新建led.c


  4) 添加驱动库路径

    a) 工程右键,单击“Properties”


    b) 在打开的窗口中按下图添加驱动库文件夹的路径

在这里插入图片描述

  5) 补充代码

    a) led.h

/*
 * led.h
 *
 *  Created on: Mar 7, 2023
 *      Author: funiot.xyz
 */

#ifndef MYDRIVER_LED_H_
#define MYDRIVER_LED_H_

//头文件包含区

/***************************************************/
//宏定义区
#define LED_PIN     GPIO_Pin_8
//端口修改请去LED_init()实体区进行调整

/***************************************************/
//变量声明区

/***************************************************/
//函数声明区
void LED_init(void);
void LED_turnon(void);
void LED_turnoff(void);
void LED_Toggle(void);
/***************************************************/

#endif /* MYDRIVER_LED_H_ */

    b) led.c

/* led.c
 *  Created on: Mar 7, 2023
 *      Author: funiot.xyz*/
//头文件包含区
#include "led.h"
#include "CH57x_common.h"
/***************************************************/
//宏定义区
/***************************************************/
//变量声明区
/***************************************************/
//函数声明区
/***************************************************/
//函数实体区
/*
 * 函数名:LED_init
 * 参数:无
 * 返回值:无
 * 功能说明:LED初始化
 */
void LED_init(void)
{
    GPIOA_ModeCfg(LED_PIN, GPIO_ModeOut_PP_5mA);//推挽输出最大5mA
}
/*
 * 函数名:LED_turnon
 * 参数:无
 * 返回值:无
 * 功能说明:点亮LED(低电平)
 */
void LED_turnon(void)
{
    GPIOA_ResetBits(LED_PIN);
}
/*
 * 函数名:LED_turnff
 * 参数:无
 * 返回值:无
 * 功能说明:关闭LED(高电平)
 */
void LED_turnoff(void)
{
    GPIOA_SetBits(LED_PIN);
}
/*
 * 函数名:LED_Toggle
 * 参数:无
 * 返回值:无
 * 功能说明:翻转LED电平
 */
void LED_Toggle(void)
{
    GPIOA_InverseBits(LED_PIN);
}

/***************************************************/

    c) main.c

/********************************** (C) COPYRIGHT *******************************
 * File Name          : Main.c
 * Author             : FUNIOT.XYZ
 * Version            : V1.0
 * Date               : 2020/08/06
 * Description        : 实验01-LED闪烁
 * Copyright          : WeChat official accounts "IOT趣制作"
 * SPDX-License-Identifier: Apache-2.0
 *******************************************************************************/
#include "CH57x_common.h"
#include "led.h"
/*********************************************************************
 * @fn      main
 *
 * @brief   主函数
 * @return  none
 */
int main()
{
    SetSysClock(CLK_SOURCE_PLL_60MHz);
    LED_init();//LED初始化
    while(1)
    {
        LED_turnon();	//LED初始化
        DelayMs(500); //持续500ms
        LED_turnoff();//LED初始化
        DelayMs(500); //持续500ms
		//或者直接使用LED_Toggle();
// LED_Toggle();//翻转LED电平
// DelayMs(500); //持续500ms

    }
}
 

  6) 编译烧录运行

    a) 编译


    b) 烧录

在这里插入图片描述

    c) 运行

    现象:LED交替闪烁,与未使用驱动库时的现象一致:


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

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

相关文章

动态规划III (买股票-121、122、123、188)

CP121 买股票的最佳时机 题目描述: 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利…

Vue 中的几种动画效果

Vue 中的动画效果 在 Vue 中,动画效果是非常常见的交互方式。它可以为用户提供更加生动的交互体验,增强用户的参与感和满意度。在本文中,我们将探讨 Vue 中的动画效果的基本原理和用法,并给出一些实例代码来帮助读者更好地理解。…

『手撕 Mybatis 源码』06 - Mapper 代理方式初始化

Mapper 代理方式初始化 首先修改一下 SqlSession 获取代理对象方式&#xff0c;即通过 getMapper() 来拿到动态代理对象 public class MybatisTest {/*** 问题1&#xff1a;<package name"com.itheima.mapper"/> 是如何进行解析的&#xff1f;* 解答&#xf…

算法刷题-数组-有序数组的平方

977.有序数组的平方 力扣题目链接 给你一个按 非递减顺序 排序的整数数组 nums&#xff0c;返回 每个数字的平方 组成的新数组&#xff0c;要求也按 非递减顺序 排序。 示例 1&#xff1a; 输入&#xff1a;nums [-4,-1,0,3,10] 输出&#xff1a;[0,1,9,16,100] 解释&#…

clang到底是什么?gcc和clang到底有什么区别?

最近发现自己对 GNU GCC 和 Clang 的区别不太清楚&#xff0c;影响到一些实现和学习&#xff0c;所以趁这两天有空好好研究了一下。 在这个研究过程中&#xff0c;我发现很多问题其实源自于语言&#xff08;不是指编程语言&#xff0c;而是中文和英文翻译的失真&#xff09;和…

前端前端学习不断

卷吧卷吧...&#xff0c;这东西什么时候是个头啊……

智能指针(2)

智能指针&#xff08;2&#xff09; shared_ptr(共享型智能指针)基础知识特点引用计数器共享型智能指针结构理解 shared_ptr仿写删除器类计数器类shared_ptr类使用以及仿写代码的理解 循环引用_Weaks 初始化智能指针的方法 shared_ptr(共享型智能指针) 基础知识 在java中有一…

chatgpt赋能python:Python如何判断输入的字符——基础教程与实例

Python如何判断输入的字符——基础教程与实例 时至今日&#xff0c;互联网已经成为人们获取信息的重要途径&#xff0c;而搜索引擎优化&#xff08;SEO&#xff09;则是网站重要的推广手段之一。而Python作为一种高级编程语言&#xff0c;在实现SEO时也有很大的优势&#xff0…

chatgpt赋能python:Python如何进行升序和降序排列

Python如何进行升序和降序排列 Python是一种非常流行的编程语言&#xff0c;由于其在数据科学、机器学习和人工智能等领域的强大表现&#xff0c;越来越多的人开始学习和使用Python。在Python中&#xff0c;排序是一项非常常见的操作。在这篇文章中&#xff0c;我将向您介绍如…

stable diffusion webui 登录接口(login)api接口调用(使用C#)

唠嗑 本次将跟读者讲一下如何通过C#请求sd webui api【login】接口&#xff0c;如果读者觉得文章有用&#xff0c;请给【点个赞】吧&#xff0c;有问题可以评论区提问。 实战 1.配置api启用参数 启动webui时&#xff0c;需加上【–api】 、【–api-auth 账号:密码】 和【–…

chatgpt赋能python:Python字符类型判断:如何判断字符是字母或数字

Python字符类型判断&#xff1a;如何判断字符是字母或数字 在Python编程中&#xff0c;经常需要判断一个字符是字母还是数字。本文将介绍如何在Python中判断字符类型&#xff0c;并给出几个示例。 判断字符类型的方法 在Python中&#xff0c;可以使用以下方法来判断字符类型…

chatgpt赋能python:Python中如何删除变量中的字符

Python中如何删除变量中的字符 在Python编程中&#xff0c;我们有时需要清除变量中的字符。删除字符可以是去掉字符串中的某些字符&#xff0c;也可以是从列表或元组中删除某些元素。本文将介绍Python中如何删除变量中的字符。 删除字符串中的字符 Python使用字符串的切片操…

网络安全入门学习第十五课——PHP基础

文章目录 一、WEB技术1、什么是web2、B/S架构3、C/S架构 二、PHP概述1、PHP是什么2、PHP受欢迎的原因3、基于MVC模式的PHP框架4、常用编译工具5、PHP环境搭建6、开发工具 三、PHP基本语法格式1、标记2、输出语句3、注释4、标识符 四、数据与运算1、常量1.1、常量定义1.2、预定义…

前端vue实现页面加水印文字 单个页面所有页面加水印 水印颜色

前端vue实现页面加水印文字, 可以实现系统所有页面加水印,也可以单个页面加水印, 可更改水印颜色, 下载完整代码请访问uni-app插件市场地址: https://ext.dcloud.net.cn/plugin?id12889 效果图如下: #### 使用方法 使用方法 /* 给系统所有页面加水印*/ // 第一个参数:水印…

Shell脚本函数简介及运用

目录 一、函数的作用 二、定义函数 三、调用函数 1.在脚本中调用函数 2.在函数中调用函数 四、函数传参 五、函数的返回值 六、函数的递归 七、函数及其变量的作用范围 八、外部脚本调用函数 一、函数的作用 语句块定义成函数约等于别名&#xff0c;定义函数&#xf…

【云原生网关】Apache ShenYu 使用详解

目录 一、前言 二、Apache ShenYu 介绍 2.1 为什么叫ShenYu 2.2 ShenYu特点 2.3 ShenYu架构图 2.4 shenyu数据同步原理 2.4.1 Zookeeper数据同步原理 三、Apache ShenYu 安装部署 3.1 部署流程 3.1.1 创建 Docker Network 3.1.2 拉取Apache ShenYu Admin镜像 3.1.3…

C语言之函数栈帧的创建与销毁(2)

上一篇博客我们讲到了函数栈帧的创建与销毁&#xff08;1&#xff09;今天我们来讲解Add函数的函数栈帧相关知识 在开始本章博客之前&#xff0c;大家可以把上一篇博客的主要内容仔细复习一下 看图 第一个mov&#xff1a;把b的值放到eax里面去 第二个mov&#xff1a;把a的…

【python】【excel】用excel中指定单元格的内容去替换一个文本中指定的字符

1 使用背景 理正的.spw文件是文本格式&#xff0c;类似于该软件的前处理&#xff0c;相关参数字段可通过文本替换&#xff0c;快速修改参数。 后续用途可用在&#xff1a;用EXCEL整理数据&#xff0c;通过修改文本批量获取多个截面参数的spw文件 2 ExcelSheet-shift-textstr…

macOS中解决matplotlib中文乱码

现象 图表上中文变方框&#xff0c;日志中报错如下&#xff1a; findfont: Generic family sans-serif not found because none of the following families were found: 解决办法 下载字体 http://xiazaiziti.com/210356.html 查询字体保存路径 查看配置文件路径 import…

01- 数据类型(C语言)

一 变量和常量 1.1 标识符 1、在我们所写的“第一个C程序”中出现了很多的标识符&#xff0c;例如include、main、printf、return。标识符是⽤来标识变量、函数&#xff0c;或任何其他⽤户⾃定义项⽬的名称。 2、标识符的约束规范&#xff1a; 只能包含数字、字母和下划线不…