本帖最后由 王小琪 于 2020-11-9 22:16 编辑
目的:搭建运行环境(MounRiver Studio的安装),原理图简单分析,点亮led
1.集成环境安装这款开发板主控芯片是沁恒32位通用增强型RISC-V架构MCU,重点来了,架构是RISC-V,而不是我们见得比较多的的ARM架构,这意味着我们用的比较多的keil不能作为这款芯片的IDE工具。所以要对这款单片机进行开发,需要用新的IDE工具,工欲善其事必先利其器,可以通过这个网站进行下载,http://mounriver.com/。下载安装过程如下图。
2.学习思路
至于这个IDE怎么使用,大家可以在这个帖子里面自己学习,https://bbs.21ic.com/icview-3037286-1-1.html?_dsign=f44376cc,我就直接从点亮led开始和大家分享,因为玩过单片机的人都知道,学习单片机一般先从GPIO口开始,而学习GPIO口从点亮led是最容易理解的,而且看到自己将led点亮会得到很强烈的反馈,从而有一股成就感,这样也可以让自己更加有学习下去的动力,接下来就硬件和软件两个方面对点亮led进行分享。
3.硬件电路分析。
这个开发板的硬件电路图我放在附件了,感兴趣的可以自行下载,当然,我也是在官方链接下载的,就是上面分享的网址。我们可以看到这个开发板上有两个led,分别是D2和D3,阳极通过1K的电阻连到3.3V,阴极连到了一个2pin的排针,所以只需要用杜邦线一端连接到排针,一端连接到IO口,将IO口设置为高电平,led即熄灭;将IO口设置为低电平,led即点亮。那么问题来了,开发板上除了这两个led,还有一个D1,那么我们可以通过改动程序实现D1的亮灭吗?答案是不可以,因为D1是一个3.3V电源指示灯,通过一个电阻,一端连到3.3V,一端连到GND,这个灯是纯硬件的电路,所以不能通过编码来实现亮灭。
4.硬件环境搭建。
上面说了,需要通过杜邦线将IO口和led的阴极连接起来,我们就选择PA0和PA1连接到2pin的排针,当然用其它IO口也可以,这个看个人喜好。然后用和开发板一起寄过来的WCH-Link仿真调试器,将开发板和电脑连接起来,连接方式如下。这样硬件就连接好了,只需要编写代码,就可以观察到现象了。
5.代码分析
附件有这个led实验的代码,感兴趣的可以自行下载,当然,这个代码也是出自论坛官方的帖子,链接为https://bbs.21ic.com/icview-3037774-1-1.html?_dsign=949aa118。当然首先要搭建运行环境(MounRiver Studio),然后编译,没有错误也没有警告,然后烧录到单片机,即可以观察到现象如下,因为我不会做动图,所以只能发照片,有什么方便快捷的制作动图的方法,也希望大家可以分享一下~
因为是要点亮led,而led是连接在PA0,PA1上的,所以只需要设置IO口高低电平即可,下面主要介绍下led.c,led.h,main.c三个文件,这样即可实现led的循环闪烁。可以看到,配置方法和STM32的特别类似。
#ifndef __LED_H
#define __LED_H
#include "ch32v10x_conf.h"
void LED_Init(void); //初始化
#endif
#include "led.h"
void LED_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure; //定义一个GPIO_InitTypeDef类型的结构体
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//使能与LED相关的GPIO端口时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1; //配置GPIO引脚
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //设置GPIO模式为推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //设置GPIO口输出速度
GPIO_Init(GPIOA, &GPIO_InitStructure); //调用库函数,初始化GPIOA
GPIO_SetBits(GPIOA,GPIO_Pin_0|GPIO_Pin_1); //设置引脚输出高电平
}
/********************************** (C) COPYRIGHT *******************************
* File Name : main.c
* Author : WCH
* Version : V1.0.0
* Date : 2020/09/29
* Description : Main program body.
*******************************************************************************/
#include "debug.h"
#include "led.h"
int main(void)
{
u8 i=0;
u8 j=0;
Delay_Init(); //延时函数初始化
LED_Init(); //LED初始化
while(1)
{
Delay_Ms(250); //延时250ms
GPIO_WriteBit(GPIOA, GPIO_Pin_0, (i==0) ? (i=Bit_SET):(i=Bit_RESET)); //设置PA0引脚状态为低电平
Delay_Ms(250); //延时250ms
GPIO_WriteBit(GPIOA, GPIO_Pin_1, (j==0) ? (j=Bit_SET):(j=Bit_RESET)); //设置PA1引脚状态为低电平
}
}
PS:至于集成开发环境里面的其他文件夹里面的文件感兴趣的可以去研究下,我觉得初学没必要研究过深,把它当作一个模板来调用即可,譬如我要实现点亮led,我只需要修改led.c,led.h,main.c三个文件即可,其他文件夹里面的文件基本都是头文件,库函数,启动文件等等,可以等后续有了整体性的理解再会过来体会,初学者不用过于深究,个人看法,仅供参考,附上一个开发软件文件夹截图做参考~
以上就是我用开发板做的第一个功能探索,说一下我的心得体会吧
1.首先架构是RISC-V,因为用的是新架构,所以需要用新的IDE工具,一方面对于新手而言是一个挑战,因为学习新的东西会让人感到生疏,没有熟悉感;另一方面,也可以说是机会,技多不压身嘛,而且这个IDE其实也不复杂,可能需要将它各个设置都弄懂,很难,但是掌握基本的开发,很简单。就好像EXCEL想要处理基本数据,很简单,小学生都会用,要成为大神,很难,但小学生的技能就足够解决大多数问题了。这也是我的一贯想法,工具是为我所用的,我们不应该被工具反过来束缚,扯远了。
2.如果你有STM32的开发经验,那么做这个板子的开发就会比较顺利了。虽然我还没有做到后面的功能,但就第一个GPIO设置的实验来看,我有一种似曾相识的熟悉感,各种结构体的定义,时钟,使能,IO的设置等等都和STM32标准库的开发如出一辙,所以如果你有过STM32的开发,我相信对于这个芯片,你的开发难度起码降低了50%。
3.从芯片的架构来看,现在有三足鼎立的趋势,即X86、ARM和RISC-V。X86统治了PC端,ARM统治了手机端,那么RISC-V会不会是未来的机会呢,我觉得是有很大机会的,所以现在有这个机会学习到RISC-V架构,而且是白**,我觉得是蛮幸运的。
|