CH32V307的新手使用方法

简介: 一篇文章教你如何使用CH32V307来开发一个简单的功能

前言

之前在沁恒微电子官网上申请了块互连型的单片机,芯片的型号是CH32V307,之前在论坛上看到他们说这一块单片机和stm32系列的单片机差不多,正好今天板子到了我试了一下,发现真的和stm32差不多。

很多没有接触过stm32单片机但是白嫖到板子的朋友可能不会用这块板子,所以我就写了一篇文章来给大家介绍一下这块板子如何使用并且能点亮其中的一个LED灯。

一、芯片的介绍

这个板子使用的是CH32V307VCT6芯片,这个是基于青稞32位RISC-V(基于精简指令集计算压力建立的开放指令机构)指令集及架构设计的工业级通用增强型MCU。

其实这个可以去它官网看一下的,这里就不介绍这些内容了,反正你就把它当作一块stm32的单片机就可以了。

二、MounRiver集成开发IDE

这个软件是这个板子配套的,使用这个软件写代码难度低,而且这个文件配套了关于这个板子的WCH-Link一键下载,这样就不用再去下载烧录软件了。

下载的链接:MounRiver Studio

下载完成之后解压文件夹,然后双击里面的安装文件,选择安装目标文件夹,剩下的就随便了,然后会自动打开这个软件的,打开后会进入一个welcome,可以直接关闭,关闭后的样子如下:

img

当然你们没有左边和下面的内容,这个是我刚才测试的。

1.新建工程

打开这个集成开发环境后我们就可以来创建一下工程了,首先在任务栏中选择File选项,然后再选择New,在这里面选择MounRiver Project,选择之后会出现下面的页面:

img

首先是为你的工程取一个名字,在Project Name中现在你这个工程的名字:

img

然后就是项目的保存路径了,这里如果你直接点是没有办法的,因为它启用的是默认的,所以需要将这个默认选项改变为自定义的:

img

首先先取消一下Use solution location这个选项,这样才可以选择自定义的目录,选择的自定义目录一定要记住必要有中文。

然后就开始选择你芯片的型号了,这里要看准你芯片的型号,因为它会将启动文件和所包含的库文件都创建出来:

img

选择完后就可以点击Finish了,然后就开始自动创建,创建完成后在左边就会出现刚才你创建的项目了:

img

这就是创建工程的办法。

2.工程目录

上面创建好工程后大家可能都不知道这些文件是什么东西,这里就给大家一个个的介绍一下。

2.1 Include

首先是Includes文件夹

img

这个是列出你这个工程中导入了哪一些文件或者文件夹。

2.2 Core

这个文件夹中是存放这个单片机的外设文件的

img

2.3 Debug

这个文件夹中是来存放测试使用的一些函数和延迟的,我大概看了一下,在这里面存放了滴答定时器的初始化、毫秒延迟、微秒延迟和串口通讯的函数。

img

2.4 Ld

这个文件存放了一个文件,这个文件应该是有关于启动文件的说明等内容的,我也不清楚,反正必要动

img

2.5 Peripheral

这个文件就是库函数所放置的文件夹了

img

2.6 Startup

这个文件夹是用来存放启动文件的文件夹的。

img

这里面都是汇编语言。

2.7 User

这个是我们写代码的地方,大家在这里面写代码即可

img

在这里面有一个main.c文件,这个就是主函数和我们写代码的地方了,我们的代码都在这里面进行书写

3.书写代码

知道了上面的工程目录后,我们就可以来书写代码了,首先打开main.c文件

img

在这里面会发现,为什么会有这么多东西,其实我们都可以不用管,就嘎嘎写就完事了。

那我们该如何写呢?如果你学过STM32,那这里基本上难不住你,我们要点一个LED等,首先我们先确定一下要点的LED灯在哪个引脚接着的,然后就打开这个端口的时钟,配置GPIO,然后点亮即可。

是不是蛮简单的,那我们就开始来吧。

首先看一下原理图

img

然后再看看它连接的引脚,我找了半天,发现这个板子的LED1和LED2连接到公头上的,我靠,这个是真的恶心

img

也就是说这里需要结一个条线,还好我这有很多,大家没有的话可以在pdd或者淘宝上买一扎跳线,公头,母头都来点,这里我用条线将LED1和PC1相连

img

这里我们就知道了,我们用PC1来控制LED灯的亮灭。

知道了后就可以开始写一下代码了,首先定义一个函数,在函数中首先先定义一个变量,这个变量是:GPIO_InitTypeDef类型的,这个变量是用来初始化引脚的

GPIO_InitTypeDef GPIO_InitStruct = {
   
   0};

然后打开GPIOC的时钟,这里GPIOC的时钟和STM32一样,都是在APB2的,我们直接就可以用打开APB2的方式来打开GPIOC的时钟:

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);

然后就开始配置GPIOC_1,配置方法和STM32的配置方法一模一样,端口的输出模式也一样,这里不过多解释:

GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;  // 这里设置为推挽输出方式
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_1;   // 设置GPIOC1
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;   // 设置输出速度为50MHz

然后就可以调用端口初始化函数进行初始化了:

GPIO_Init(GPIOC, &GPIO_InitStruct);

完整代码如下:

void MX_LED_Init(void){
   
   
    GPIO_InitTypeDef GPIO_InitStruct = {
   
   0};
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_1;
    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOC, &GPIO_InitStruct);
}

然后在main函数中就可以调用这个函数来进行点灯了。

在main函数中首先需要先调用一下刚才创建的函数,然后在while循环中就可以开始点灯了:

int main(void)
{
   
   
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
    SystemCoreClockUpdate();
    Delay_Init();
    MX_LED_Init();    // 刚才创建的函数
    // 下面的串口通讯,不用管
    USART_Printf_Init(115200);    
    printf("SystemClk:%d\r\n",SystemCoreClock);
    printf( "ChipID:%08x\r\n", DBGMCU_GetCHIPID() );
    printf("This is printf example\r\n");
    // *****************************************
    while(1)
    {
   
   
        GPIO_WriteBit(GPIOC, GPIO_Pin_1, Bit_RESET);  // 点亮LED灯
    }
}

效果如下:

img

然后再灭了它:

int main(void)
{
   
   
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
    SystemCoreClockUpdate();
    Delay_Init();
    MX_LED_Init();    // 刚才创建的函数
    // 下面的串口通讯,不用管
    USART_Printf_Init(115200);    
    printf("SystemClk:%d\r\n",SystemCoreClock);
    printf( "ChipID:%08x\r\n", DBGMCU_GetCHIPID() );
    printf("This is printf example\r\n");
    // *****************************************
    while(1)
    {
   
   
        GPIO_WriteBit(GPIOC, GPIO_Pin_1, Bit_SET);  // 点亮LED灯
    }
}

img

感觉太单调了,给它来个闪烁吧:

int main(void)
{
   
   
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
    SystemCoreClockUpdate();
    Delay_Init();
    MX_LED_Init();
    USART_Printf_Init(115200);    
    printf("SystemClk:%d\r\n",SystemCoreClock);
    printf( "ChipID:%08x\r\n", DBGMCU_GetCHIPID() );
    printf("This is printf example\r\n");

    while(1)
    {
   
   
        GPIO_WriteBit(GPIOC, GPIO_Pin_1, Bit_RESET);
        Delay_Ms(500);
        GPIO_WriteBit(GPIOC, GPIO_Pin_1, Bit_SET);
        Delay_Ms(500);
    }
}

这个拍照拍不出效果,大家自己去搞一下就知道了。

4.烧录代码

写好代码后就需要将代码进行一下烧录进板子了,这里就需要知道一下如何将写好的代码烧录进板子中,首先需要将代码进行编译,编译按钮:

img

这三个按钮都是编译,但是编译的模式不一样,首先第一个按钮是编译修改过的文件,速度比较快。

第二个按钮是编译当前文件,就是当前你打开的文件,可以当调试当前文件中有没有问题。

第三个是将整个工程编译,我个人感觉太慢了,没必要。

编译完后我们就开始用单片机连接电脑,这里需要准备一条Type-C的通讯线,然后将这条线一端连接电脑,一端连接单片机

img

img

然后打开单片机,回到IDE,在IDE中找到这个按钮:

img

但是不能直接点,首先点击那个下箭头,点击Configuration,然后就到达这个页面了

img

在这个页面中有很多按钮,这里给大家一一介绍一下:

第一个大按钮

img

这个是查看你板子的读写是否被锁,如果没有被锁那会出现这样子的提示:

img

如果说你的板子是锁着的,那会出现下面的提示:

img

当你的板子被锁了,那就没有办法进行烧录程序,只能给它解锁。

第二个按钮

img

这个按钮就是将板子的读写给锁住。

第三个就是解锁板子:

img

然后到下面

img

这里是配置下载器的,一开始没有,你要确定你的板子进行开启,然后点击Query,这个就会搜索一下你的板子

img

然后其它的可以不用管了,点击Apply and Close就可以了,然后再点击那个东西即可,这样代码就会烧录就去。

img

出现这个就代表了烧录成功,如果你烧录出现这个情况:

img

这个情况就因为你的单片机锁着的没办法进行烧录。

总结

这块板子和STM32差不多,学会了STM32的标准库开发,基本上这个板子不会很难,只不过就是这个板子需要的外设比较多。

目录
相关文章
|
IDE Shell 开发工具
【沁恒WCH CH32V307V-R1在RT-Thread Studio上环境配置教程】
【沁恒WCH CH32V307V-R1在RT-Thread Studio上环境配置教程】
1065 0
|
存储 缓存 算法
Linux 的 workqueue 机制浅析
## Intro workqueue 是 Linux 中非常重要的一种异步执行的机制,本文对该机制的各种概念,以及 work 的并行度进行分析,以帮助我们更好地**使用**这一机制;对 workqueue 机制并不陌生的读者也可以直接跳到第四节,即 "Concurrency" 小节,了解 workqueue 机制中 work 的并行度 以 v2.6.36 为界,workqueue 存在两个不
2181 0
Linux 的 workqueue 机制浅析
关于 C#使用Console.WriteLine调试没有命令行输出 的解决方法
关于 C#使用Console.WriteLine调试没有命令行输出 的解决方法
关于 C#使用Console.WriteLine调试没有命令行输出 的解决方法
|
7月前
|
安全 Unix Linux
VMware Workstation 17.6.3 发布下载,现在完全免费无论个人还是商业用途
VMware Workstation 17.6.3 发布下载,现在完全免费无论个人还是商业用途
48434 65
|
11月前
|
机器学习/深度学习 自然语言处理 API
如何使用阿里云的语音合成服务(TTS)将文本转换为语音?本文详细介绍了从注册账号、获取密钥到编写Python代码调用TTS服务的全过程
如何使用阿里云的语音合成服务(TTS)将文本转换为语音?本文详细介绍了从注册账号、获取密钥到编写Python代码调用TTS服务的全过程。通过简单的代码示例,展示如何将文本转换为自然流畅的语音,适用于有声阅读、智能客服等场景。
3938 3
|
11月前
|
算法
客观评价模型与主观DMOS分数拟合的分享与实用性探讨
本文深入探讨了视频质量的主客观评价方法,指出客观评价方法旨在精确描述人眼的主观感受。文章介绍了微帧在日常训练中使用的拟合方法,通过映射函数将客观指标与主观评价DMOS分数进行非线性拟合,以提高评价的准确性、一致性、稳定性和单调性。具体讨论了SSIM、PSNR和VMAF等常见客观指标的拟合公式,并总结了拟合方法在分析质量差异、统一客观指标和指导参数设置方面的实用价值。
|
Linux iOS开发 开发者
跨平台开发不再难:.NET Core如何让你的应用在Windows、Linux、macOS上自如游走?
【8月更文挑战第28天】本文提供了一份详尽的.NET跨平台开发指南,涵盖.NET Core简介、环境配置、项目结构、代码编写、依赖管理、构建与测试、部署及容器化等多个方面,帮助开发者掌握关键技术与最佳实践,充分利用.NET Core实现高效、便捷的跨平台应用开发与部署。
1340 3
阿里云免费企业邮箱申请入口链接(2023新版申请流程)
阿里云免费企业邮箱申请入口链接(2023新版申请流程)阿里云免费企业邮箱没有了吗?免费企业邮箱在哪申请?每个阿里云账号可以申请一个免费企业邮箱。最近有同学反馈企业邮箱申请不了了,阿里云百科查看下,确实原免费版企业邮箱申请链接,打开后,会跳转到付费版企业邮箱页面。阿里云百科特意咨询了客服,得到回复是目前阿里云依旧提供免费版企业邮箱。阿里云百科分享阿里云免费版企业邮箱申请链接:
16238 4
阿里云免费企业邮箱申请入口链接(2023新版申请流程)
|
芯片
矩阵键盘原理及程序设计
本文详细介绍了矩阵键盘是什么,主要应用场景,替代品,矩阵键盘的优缺点以及矩阵键盘的按键检测方法。最后附上了以STM32F103系列芯片为例的C程序。
954 2
|
存储 Linux 虚拟化
虚拟机使用pc麦克风声卡
虚拟机使用pc麦克风声卡
686 0
虚拟机使用pc麦克风声卡