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

news/2024/11/24 2:19:57/

在这里插入图片描述

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);//推挽输出最大5mAwhile(1){GPIOA_ResetBits(GPIO_Pin_8); //LED点亮DelayMs(500);					//持续0.5sGPIOA_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); //持续500msLED_turnoff();//LED初始化DelayMs(500); //持续500ms//或者直接使用LED_Toggle();
// LED_Toggle();//翻转LED电平
// DelayMs(500); //持续500ms}
}

  6) 编译烧录运行

    a) 编译


    b) 烧录

在这里插入图片描述

    c) 运行

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



http://www.ppmy.cn/news/323268.html

相关文章

Android --- 拍照上传图片之后,发现图片是全黑色,什么内容也没有

在写拍照图片上传的时候发现这样一个问题,上传的图片是黑色的,经过查阅资料发现是图片格式的问题 解决方法 将你保存图片的格式改为 jpeg

MATLAB 保存图片变黑色

今天用MATLAB作图,碰到一个问题:想把结果保存成为图片,结果,失望,保存之后打开一片黑色。之后再试了几下,不论是jpg,bmp还是png都不行 只好Google,最后,总算找到答案&…

canvas.toDataURL下载的图片是黑色

jpeg和png 又忘了jpeg和png的区别 PNG格式可以保存为透明背景的图片 canvas.toDataURL(image/png);

html如何加黑色蒙板,Photoshop中怎么添加黑色蒙版?

图层蒙版,就像在当前图层上面覆盖一层玻璃片,这种玻璃片有:透明的、半透明的、完全不透明的。用各种绘图工具在蒙版上(即玻璃片上)涂色(只能涂黑白灰色),涂黑色的地方蒙版变为完全不透明的,看不见当前图层的图像&#…

Java使用Imageio拆分gif图片时保存的图片变为黑色

在拆分GIF图片时,遇到最后保存的图片变为黑色问题。代码如下: public static void splitGif(String filename,String path){try{GifDecoder decoder new GifDecoder();decoder.read(filename);int n decoder.getFrameCount();System.out.println(&quo…

为什么语义分割出来的图片是黑色的

原因分析: 1、语义分割是针对图像像素级别的操作,其本质可以理解为将图像的每个像素分配给不同的缺陷类【包含背景】 2、在针对缺陷进行标注的时候,其缺陷类型的序号,即表示为以当前标记序号为灰度值,标记此缺陷类型 …

openCV保存图片之后是一张黑色图片解决办法

保存是用的imwrite函数,我用dtype打印了一下保存前后的图片的数据类型,保存之前是float64,而保存之后则是uint8,打印图片一看像素点都是小数,所以是黑色图片。 想要正常显示,只需要将图片类型用.astype转换…

将黑色图片变成白色

黑白图片变色 有时候我们有一张黑色图片,但是在背景改变为深色的时候,图片就看不清,那这个时候又想让他变为白色。例如轮播到深色图片的时候变成白色。 有一张黑色图片,背景颜色为白色,变化为白色图片,背景…