首页 > 其他分享 >沁恒单片机开发板开发

沁恒单片机开发板开发

时间:2023-07-21 18:33:50浏览次数:41  
标签:这个 板子 单片机 Init 沁恒 printf GPIO 开发板

目录

前言

之前在沁恒微电子官网上申请了块互连型的单片机,芯片的型号是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的标准库开发,基本上这个板子不会很难,只不过就是这个板子需要的外设比较多。

标签:这个,板子,单片机,Init,沁恒,printf,GPIO,开发板
From: https://www.cnblogs.com/Lavender-edgar/p/17572166.html

相关文章

  • 嵌入式单片机片上系统Soc有哪些知识?
    一、片上系统简介:从狭义角度讲,它是信息系统核心的芯片集成,是将系统关键部件集成在一块芯片上;从广义角度讲,SoC是一个微小型系统,如果说中央处理器(CPU)是大脑,那么SoC就是包括大脑、心脏、眼睛和手的系统。国内外学术界一般倾向将SoC定义为将微处理器、模拟IP(IntellectualPropert......
  • 51单片机-利用定时器控制LED灯轮闪
    #include"reg52.h"//#include"delay.h"#include"intrins.h"#include<stdio.h>typedefunsignedintu16;typedefunsignedcharu8;typedefunsignedintuint;typedefunsignedcharuchar;#defineLED_PORTP2#defineSM......
  • 51单片机-定制器控制LED灯
    #include"reg52.h"#include"delay.h"#include"intrins.h"#include<stdio.h>typedefunsignedintu16;typedefunsignedcharu8;typedefunsignedintuint;typedefunsignedcharuchar;#defineLED_PORTP2#defineSMG_A......
  • 8051单片机实现呼吸灯
    电路连接:灯由P2口控制,引脚输出高电平则熄灭,输出低电平则点亮;MCU时钟6兆赫兹。占空比从0%,10%,20%,……到100%共11级。定时器设置为固定间隔,例如一毫秒触发一次中断,那么输出一个占空比40%的10毫秒方波的逻辑可以是:Timer0_ISR:1、重装计数器;2、计数值加一,若大于等于10说明一个周......
  • 什么是AVR单片机,AVR单片机的特点优势有哪些
    一、AVR单片机简介1.1、AVR的诞生AVR单片机是ATMEL公司在1997年研发的增强型内置Flash的RISC精简指令集高速单片机。可以广泛应用于计算机外部设备、工业实时控制、仪器仪表、通讯设备、家用电器等各个领域。1.2、AVR的特点采用RISC精简指令系统RISC(精简指令系统计算机)是......
  • 迅为RK3568|RK3588开发板车牌识别|RKNPU2人工智能视频重磅更新!
     ......
  • 51单片机入门
    1.软件安装:Keil5C51和Keil5MDK区别:前者用来开发51单片机,后者用来开发ARM系列,比如STM32。2.单片机介绍(MCU)2.1为什么叫51单片机?因为内核是Intel开发的8051内核 课程使用STC89C52单片机。 RAM和ROM是两种存储器,RAM是randomaccessmemory(随机存储器),ROM是readonlymem......
  • 51单片机数码管
      二进制与十六进制互转-在线工具(toolhelper.cn)0x3f--00111111110x06-000001100x5b-010110110x4f-010110110x66-011001100x6d-011011010x7d-011111010x07-000001110x7f-011111110x6f-011011110x77-011101110x7c-01111100比如5,0x6d-01101101a是最低位,所以是......
  • 51单片机-跑马灯例子
    #include"reg52.h"#include"intrins.h"#include<stdio.h>typedefunsignedintu16;typedefunsignedcharu8;typedefunsignedintuint;typedefunsignedcharuchar;#defineLED_PORTP2#defineSMG_A_DP_PORTP0u8gsmg_code[17]......
  • 单片机扫描矩阵键盘
    采用分时复用的方法,定时置位行,检测列,确定按下的按键,输出不同的按键值。voidKbScanProcess(void){//uint8_tRow=0;//按键所在行//uint8_tCol=0;//按键所在列//uint8_tRowCount=0;//按键触发行的个数,用于判断多个按键按下uint8_tColCount=0;//按键触发列的个数,用......