0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于CH32V103系列MCU点亮LED

CHANBAEK 来源:CSDN-借过风景 作者:CSDN-借过风景 2023-01-31 12:01 次阅读

简介

CH32V103系列是以青稞V3A处理器为核心的32位通用MCU,该处理器是基于RISC-V开源指令集设计。 片上集成了时钟安全机制、多级电源管理、通用DMA控制器。 此系列具有1路USB2.0主机/设备接口、多通道12位ADC转换模块、多通道TouchKey、多组定时器、多路IIC/USART/SPI接口等丰富的外设资源。

本章通过点亮LED作为CH32V103系列MCU应用开发的第一个教程,其LED灯控制使用到GPIO外设的基本输出功能,本章将通过点亮LED对CH32V103的GPIO进行基本的学习了解。

1、GPIO简介及其库函数介绍

GPIO,全称为通用输入输出端口,其可与外部设备连接实现MCU与外部设备的通讯、控制、信号采集等功能。 本教程即通过CH32V103的GPIO与LED连接,实现MCU对LED的输出控制。 关于CH32V103 GPIO的具体介绍,可参考CH32V103应用手册和数据手册。

进行LED点亮程序编写之前,需对GPIO固件库进行了解。 GPIO相关的函数和定义分布在固件库文件ch32v10x_gpio.c和头文件ch32v10x_gpio.h文件中,LED点亮程序需要调用GPIO固件库文件中某些函数,GPIO库函数相关函数如下:

pYYBAGPYkQWAFsB5AACRyIPKIbs216.png

1.1、无效GPIO_DeInit(GPIO_TypeDef* GPIOx)

功 能:将GPIOx外围寄存器初始化为其默认重置值。

参 数:GPIOx用来选择GPIO外设,取值可为GPIOA-GPIOG。

1.2、无效GPIO_AFIODeInit(无效)

功 能:将复用功能(重映射,事件控制与EXTI设置)重设为默认值。 通俗理解可认为此函数功能为初始化所有的复用功能。

参 数:无。

1.3、无效GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)

功 能: GPIO初始化函数,根据GPIO_InitStructure中的指定参数初始化GPIO外设寄存器。

参 数:GPIOx用来选择GPIO外设,取值可为GPIOA-GPIOG;GPIO_InitStructure为GPIO_InitTypedef类型结构体指针,指向包含GPIO外设配置信息的GPIO_InitTypedef结构体。

1.4、void GPIO_StructInit(GPIO_InitTypeDef* GPIO_InitStruct)

功 能:初始化结构体成员,即用其默认值填充每个GPIO_StructInit成员,包括GPIO_Pin、GPIO_Speed、GPIO_Mode等。

参 数:GPIO_StructInit为指向结构体GPIO_InitTypedef的指针,待初始化。

1.5、uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)

功 能:读取指定端口管脚的输入(0或1)。

参 数:GPIOx用来选择GPIO外设,取值可为GPIOA-GPIOG;GPIO_Pin用来选择待读取的端口位。

1.6、uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx)

功 能:读取指定的GPIO输入数据端口。

参 数:无。

1.7、uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)

功 能:读取指定端口管脚的输出(0或1)。

参 数:GPIOx用来选择GPIO外设,取值可为GPIOA-GPIOG;GPIO_Pin用来选择待读取的端口位。

1.8、uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx)

功 能:读取指定的GPIO输出数据端口。

参 数:无。

1.9、void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)

功 能:设置指定的数据端口位,可理解为将指定的引脚设置为高电平。

参 数:GPIOx用来选择GPIO外设,取值可为GPIOA-GPIOG;GPIO_Pin用来选择待设置的端口位。

1.10、void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)

功 能:清除指定的数据端口位,可理解为将指定的引脚设置为低电平。

参 数:GPIOx用来选择GPIO外设,取值可为GPIOA-GPIOG;GPIO_Pin用来选择待设置的端口位。

1.11、void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal)

功 能:设置或清除指定的数据端口位,可理解为将指定的引脚设置为高电平或低电平。

参 数:GPIOx用来选择GPIO外设,取值可为GPIOA-GPIOG;GPIO_Pin用来选择待设置的端口位;BitVal为指定待写入的值,该参数必须取枚举BitAction的其中一个值。

1.12、void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal)

功 能:向指定的GPIO端口写入数据

参 数:GPIOx用来选择GPIO外设,取值可为GPIOA-GPIOG;PortVal为待写入端口数据寄存器(ODR寄存器)的值。

1.13、void GPIO_PinLockConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)

功 能:锁定GPIO管脚配置寄存器。

参 数:GPIOx用来选择GPIO外设,取值可为GPIOA-GPIOG;,GPIO_Pin为待锁定的端口位。

1.14、void GPIO_EventOutputConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource)

功 能:选择GPIO管脚用作事件输出

参 数:GPIO_PortSource为选择用作事件输出的GPIO端口;GPIO_PinSource为事件输出的管脚。

1.15、无效GPIO_EventOutputCmd(功能状态新状态)

功 能:使能或失能事件输出

参 数:NewState为管脚重映射的新状态,该参数可以取ENABLE或DISABLE。

1.16、无效GPIO_PinRemapConfig(uint32_t GPIO_Remap,功能状态新状态)

功 能:更改指定管脚的映射。

参 数:GPIO_Remap为选择重映射的管脚; NewState为管脚重映射的新状态,该参数可以取ENABLE或DISABLE。

1.17、无效GPIO_EXTILineConfig(uint8_t GPIO_PortSource、uint8_t GPIO_PinSource)

功 能:选择GPIO管脚用作外部中断线路。

参 数:GPIO_PortSource为选择用作外部中断线源的GPIO端口; GPIO_PinSource为待设置的外部中断线路。

2、硬件设计

由于本次教程为点亮LED,需用到LED。 开发板上带有两个LED灯(LED1和LED2),用两根杜邦线分别将LED1和LED2与对应GPIO引脚连接起来,此处连接方式为:

LED1与PA0连接;

LED2与PA1连接。

3、软件设计

LED点亮程序通过控制CH32V103 GPIO引脚的电平高低实现LED闪烁,其实现步骤如下:

定义一个GPIO_InitTypeDef类型结构体,结构体成员包括GPIO_Pin、GPIO_Mode、GPIO_Speed;

使能GPIO时钟,否则GPIO引脚不工作,本次实验使能GPIOA时钟;

配置GPIO_InitTypeDef类型结构体成员参数,及配置GPIO引脚为对应引脚、GPIO模式为推挽输出、GPIO口输出速度为相应值;

调用库函数,初始化GPIO;

调用库函数,设置GPIO引脚输出电平。

LED点亮程序如下:

pYYBAGPYkQWAY5RNAAAaWBCas2Y354.png

pYYBAGPYkQWAOoegAAB7a2q2wLI961.png

完成led.c和led.h之后,对其进行编译保存,继续对main函数进行编写,main函数具体代码如下:

main.c文件

pYYBAGPYkZiANeieAADAmSHcqxU331.png

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 处理器
    +关注

    关注

    68

    文章

    19139

    浏览量

    228991
  • led
    led
    +关注

    关注

    240

    文章

    23113

    浏览量

    658076
  • mcu
    mcu
    +关注

    关注

    146

    文章

    16956

    浏览量

    350145
  • GPIO
    +关注

    关注

    16

    文章

    1191

    浏览量

    51884
  • RISC-V
    +关注

    关注

    44

    文章

    2222

    浏览量

    45986
  • ch32
    +关注

    关注

    0

    文章

    73

    浏览量

    625
收藏 人收藏

    评论

    相关推荐

    基于CH32V103系列MCU的ADC采样设计

    CH32V103系列是以青稞V3A处理器为核心的32位通用RISC-V MCU,该处理器是基于RISC-
    的头像 发表于 01-31 14:21 4037次阅读
    基于<b class='flag-5'>CH32V103</b><b class='flag-5'>系列</b><b class='flag-5'>MCU</b>的ADC采样设计

    【RTT大赛作品连载】CH32V103 USBHID键盘鼠标

    基于CH32V103实现了USB HID的键盘鼠标功能,提供写好的代码文件,欢迎fork。
    的头像 发表于 11-29 08:49 7846次阅读

    CH32V103数据手册

    教程基于沁恒32位通用增强型RISC-V架构MCU CH32V103,力争全面分析CH32V103的每个外设功能及使用方法,手把手教大家玩转RISC-
    发表于 07-19 07:55

    系列比如103系列CH32V103系列CH32F103有哪些区别?

    系列比如103系列CH32V103系列CH32F103有哪些区别?
    发表于 03-09 10:05

    CH32V103基础教程1-新建工程

    在进行CH32V103相关外设应用学习之前,我们首先使用MounRiver Studio新建一个工程,以GPIO教程(点亮LED)为例,具体操作步骤如下:第一步:创建LED工程。打开
    发表于 04-13 15:44

    CH32V103基础教程2-GPIO库函数介绍

    本章通过点亮LED作为CH32V103系列MCU应用开发的第一个教程,其LED灯控制使用到GPI
    发表于 04-13 15:52

    CH32V103基础教程77-USART-指令控制LED

    ,在此不再赘述。 2、硬件设计由CH32V103系列MCU的串口1在调试文件中被用于调试打印,因此本次教程使用串口2进行收发验证。由CH32V103数据手册可知,串口2对应引脚为PA2
    发表于 05-08 15:55

    CH32V103基础教程78-USART-空闲中断

    ,在此不再赘述。 2、硬件设计由于CH32V103系列MCU的串口1在debug文件中被用于调试打印,因此本次教程使用串口2进行收发验证。由CH32V103数据手册可知,串口2对应引脚
    发表于 05-08 15:57

    RISC-V MCU应用开发教程之CH32V103

    教程基于沁恒32位通用增强型RISC-V架构MCU CH32V103,力争全面分析CH32V103的每个外设功能及使用方法,手把手教大家玩转RISC-
    发表于 11-18 16:21 18次下载
    RISC-<b class='flag-5'>V</b> <b class='flag-5'>MCU</b>应用开发教程之<b class='flag-5'>CH32V103</b>

    通过CH32V103定时器中断控制LED灯闪烁

    CH32V103系列是以青稞V3A处理器为核心的32位通用MCU,该处理器是基于RISC-V开源指令集设计。 片上集成了时钟安全机制、多级电
    的头像 发表于 01-31 14:24 3186次阅读
    通过<b class='flag-5'>CH32V103</b>定时器中断控制<b class='flag-5'>LED</b>灯闪烁

    基于CH32V103系列MCU的触摸按键检测

    CH32V103系列是以青稞V3A处理器为核心的32位通用MCU,该处理器是基于RISC-V开源指令集设计。片上集成了时钟安全机制、多级电源
    的头像 发表于 01-31 14:53 4157次阅读
    基于<b class='flag-5'>CH32V103</b><b class='flag-5'>系列</b><b class='flag-5'>MCU</b>的触摸按键检测

    CH32V103系列MCU内部FLASH读写操作方式

    CH32V103系列是以青稞V3A处理器为核心的32位通用MCU,该处理器是基于RISC-V开源指令集设计。片上集成了时钟安全机制、多级电源
    的头像 发表于 01-31 15:02 4278次阅读
    <b class='flag-5'>CH32V103</b><b class='flag-5'>系列</b><b class='flag-5'>MCU</b>内部FLASH读写操作方式

    ch32v103应用教程 ch32v103c8t6兼容 ch32v103c8t6烧录器

    的应用教程以及烧录器、编程器的介绍。 一、CH32V103应用教程 1.硬件连接 首先,我们需要准备好CH32V103的开发板和一些外围设备,如LED灯、按键
    的头像 发表于 08-22 15:19 1783次阅读

    ch32v103和stm32的区别

    和stm32。虽然它们共同作为微处理器的代表,但是它们之间还是有很多不同的。下面就详细地对这两种芯片进行比较和解析。 1、基本介绍 CH32V103是一款以ARM结构为基础,具有射频控制功能,能提供所有常规的数字接口的单片机芯片。其中包含有多种与ARM控制器及AC55XX系列
    的头像 发表于 08-22 15:48 1396次阅读

    ch32v103与stm32f103的区别

    ch32v103与stm32f103的区别  Ch32v103与STM32f103是两种不同的芯片,虽然它们都是基于ARM Cortex-M3内核的32位微控制器,但它们在硬件配置、功
    的头像 发表于 08-22 15:49 2407次阅读