【沁恒微CH32V307评估板试用体验】第一个应用程序编写-LED流水灯 - RISC-V MCU技术社区 - 电子技术william hill官网 - 广受欢迎的专业电子william hill官网 - 威廉希尔官方网站
分享 收藏 返回

Youzhiyu 关注 私信
[文章]

【沁恒微CH32V307评估板试用体验】第一个应用程序编写-LED流水灯

LED流水灯

本帖最后由 Youzhiyu 于 2022-5-22 09:46 编辑

(1)MRS开发环境的安装
CH32V307是基于RISC-V架构的微处理器,沁恒微电子WCH提供了MoubRiver Studio开发环境进行开发,MRS是对Eclipse GNU优化而来、以RISC-V内核为主的嵌入式集成开发环境。MRS官网下载地址:http://www.mounriver.com/。在进行程序开发之前需要下载安装MRS开发环境,其安装过程简单,采用默认安装即可,安装完成后即可启动应用程序开发。
(2)WCH-LINK驱动安装
安装MRS开发环境后,会自动安装WCH-LINK的驱动。若安装失败,可以手动打开MounriverStudio安装路径下LinkDrvLink文件夹,手动安装Link文件夹下的SETUP.EXE。
由于本人的笔记本有点老,系统是Win7 x64SP1,安装驱动过程中提示安装失败。如下图所示。

打开设备管理器查看,如下图所示,发现是数字签名问题。

通过查阅WCH-LINK驱动安装失败说明,是该Windows7系统未更新或缺乏安全补丁造成的。所以,需要下载并安装安全补丁即可:用于基于 x64 的系统的 Windows 7 安全更新程序 (KB3033929):https://www.microsoft.com/zh-cn/download/details.aspx?id=46148。安装补丁后重新驱动即可识别了,识别后的设备视图如下图所示。

(3)LED灯闪烁项目创建
MSR创建工程应用项目时,MSR会自动导入芯片相关的固件支持库,以降低应用程序的开发难度。启动MRS环境,进入File-New--New> MounRiverProject菜单,启动工程创建页面,如图1所示。

图1 工程创建
   随后,单击Finish按钮完成项目设置和芯片选择。MRS自动导入芯片支持固件库文件,并生成工程项目,如图所示。

图2工程文件视图
若对STM32F10X系列的固件库程序开发较熟悉的朋友,相信一眼就能明白MRS创建的工程项目文件的功能及其作用。从MRS自动创建的文件可以看出,CH32V307307应用程序文件几乎与STM32F10X系列的固件库开发程序文件及文件作用几乎一致,给从STM32转移到CH32V307的开发提供了便利。
(3)应用程序启动流程分析
与STM32F10X系列启动类似,CH32V307上电启动流程配置应该是在启动配置汇编文件startup_ch32v30x_D8C.s确定的。进入startup_ch32v30x_D8C.s文件可以看到:

上图表明上电启动后进入中断向量表_vector_base执行,_vector_base第一个单元是option norvc,是设置向量表。第2个单元是 _start ,而_start处设置的是跳转到handle_reset执行。handle_reset应该是复位中断服务程序。
  


1)     在handle_reset程序中,先对相关寄存器配置,随后执行“jal SystemInit”语句,即跳转到SysTemInit()函数执行。通过查收可知SysTemInit()函数是对系统时钟进行配置的函数,具体实现在system_ch32v30x.c中。
2)     随后执行“lat0, main”语句,即跳转到main()函数中执行用户功能程序。
从上面分析可以看出,CH32V307利用MRS创建工程时,其应用程序启动后,首先进入复位中断服务程序执行,并在复位中断中调用SysTemInit()函数进行系统时钟初始化,初始化完成后直接进入main()函数。因此针对具体应用时我们可以直接在main()函数中进行代码编写即可,简化了启动底层代码的配置与编写。
注意:(1)默认SysTemInit()函数采用外部8MHz晶振作为系统时钟源,并进内部PLL倍频到72MHz作为系统时钟。若要使用其他时钟源及系统时钟,可以手动修改SysTemInit()函数进行配置。
     (2) 在handle_reset应该是复位中断服务程序开始之前,将handle_reset声明为“.weak”属性,如下图所示,表明handle_reset可以重载。若在其他文件中重新定义名称同为handle_reset的函数,在程序链接时将链接自己编写的handle_reset函数,而忽略汇编语言中的handle_reset,为我们重写复位中断服务程序提供了便利。

综上,CH32V307应用程序上电启动流程为:

(4)User项目下文件说明
    在利用MRS创建工程时,在User子项目下自动生成了6个文件,其作用如下:
Ø  ch32v30x_conf.h : 芯片片上资源配置,默认是启用了所有片上资源的包含文件。默认情况下编译时将会编译所有资源文件,编译速度较慢。具体应用开发时,可以根据需要启用需要的文件,而不用资源文件可以不包含,这个将提高编译速度。
Ø  ch32v30x_it.h/ch32v30x_it.c : 中断服务程序的什么与实现文件。若项目中涉及到中断服务程序的编写,可以放到此文件中进行声明与实现。
Ø  system_ch32v30x.h/system_ch32v30x.c: 系统时钟配置文件,其中的SysTemInit()函数就是在启动汇编程序Handle_reset中被调用的,用于配置芯片的系统时钟,用户可以更加实际情况进行修改。
Ø  main.c : MRS生成的主函数文件,用于应用功能程序编写。并在该文件中包含了#include "debug.h"头文件和int main(void)函数的实现框架,应用程序可直接在main()函数中进行编写。
注意: debug.h 文件中包含了stdio.h和ch32v30x.h两个资源头文件。stdio.h主要用于实现printf打印输出到串口功能,ch32v30x.h是与芯片寄存器定义相关的头文件。若应用程序中不希望使用debug.h提供的调试功能及延时函数,可以将main.c文件开始处的包含语句改为“ #include "ch32v30x.h" ” 语句。即只包含芯片寄存器定义文件即可。类似51单片机开发时,首先要包含reg51.h文件一样。
(5)LED流水灯硬件连接说明
  CH3V307评估板板载LED1和LED2,分别与J3排针的J3-19和J3-21连接的,另外以太网接口上有两个LED灯也可以当作普通LED灯使用,他们分别连接到J3排针的J3-11和J3-13上。在进行LED控制程序编写前,需要先用杜邦线将LED灯连接MCU对应的GPIO管脚上。本介绍将4个LED等分别通过杜邦线连接到GPIOA端口的PA0、PA1、PA2、PA3上。连接示意图如下图所示。

(6)编写LED端口的初始化功能函数
   在main.c文件中,利用MRS提供的固件库ch32v30x_rcc.h/ch32v30x_rcc.c、ch32v30x_gpio.h/ch32v30x_gpio.c编写一个LED_Init()函数,具体代码如下:
(7)编写LED流水灯应用程序
   在main()函数中调用LED_Init()函数进行初始化,并在while循环体中实现流水灯控制。由于此处使用不到中断,因此屏蔽掉中断优先级设置语句,此处也不使用串口调试功能,也可以屏蔽掉,具体代码如下:

    编译,下载程序到CH32V307307评估板,可以看到ELED1、ELED2、LED1、LED2依次点亮,形成间隔为500ms的流水灯。
     通过第一个应用程序LED流水灯的编写过程看,CH32V307提供的固件库函数接口及其使用方法与STM32F10x固件库函数接口及其使用方法几乎相同,为从STM32F1XX系列迁移到CH32V307应用开发提供了便利,并且开发过程毫无障碍。

更多回帖

×
发帖