南京沁恒出品的CH32V103系列单片机,采用完全开源的RISC-V架构,对标STM32F103系列单片机。本人出于对纯国产32位单片机的好奇,开始学习这款单片机。
学习单片机的最好方法就是边干边学。经过仔细阅读沁恒公司网站的信息,选择沁恒厂家出品的CH32V103R8T6核心板和WCH-Link下载器套餐作为硬件平台,以及MounRiver作为集成开发环境,开始了学习旅程。
学习软件编程都是以”Hello World !”开始,学习单片机则都是从“点亮LED”开始,本人也不能免俗。将核心板与WCH-Link用杜邦线连接,再插入笔记本电脑的USB口。打开MounRiver,在自己习惯的位置新建一个P-001工程项目,参考厂家提供的GPIO例程,按照以下代码修改User子目录下的main.c文件,
/*
*@Note
使用沁恒CH32V103R8T6核心板,板上排针连接为PA0接LED1或LED2
通用MUC第一个实例,“点亮LED”
*/
#include "debug.h"
int main(void)
{
u8 i=0; //端口变量,0-低电位,1-高电位。调用GPIO_WriteBit()函数时才能作用于PA0端口
Delay_Init(); //初始化延时函数
GPIO_InitTypeDef GPIO_InitStructure = {0}; //声明GPIO结构体定义
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //使能PA端口时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1; //配置PA0、PA1端口
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度
GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化PA端口,PA0、PA1上电后自动为低电位,LED点亮
while(1)
{
Delay_Ms(500); //延时0.5秒
(i == 0) ? (i = Bit_SET) : (i = Bit_RESET); //取反语句,即将变量i的布尔值取反
GPIO_WriteBit(GPIOA, GPIO_Pin_0, i); //LED间隔0.5秒闪烁
}
}
保存好修改结果,选择项目菜单下全部构建,顺利通过后选择闪存菜单下的下载,即可将编译好的P-001.hex文件下载到核心板。
将核心板上的PA0排针与LED1排针用杜邦线连接,即可看到板载的LED1闪烁。结合裴晓芳主编的《RISC-V架构嵌入式原理与应用——CH32V103单片机编程与项目实践》一书,可以了解GIPO的设置和简单应用。
在上述代码中,多设置了IO口PA1,主要目的是展示设置多个IO口的方法,实际运行结果是LED1接PA1时会长亮而不闪烁。如果没有设置PA1,连接LED时不会亮,说明PA1未被激活生效。
在实际应用项目中使用GPIO时需要注意以下问题,
1、在推挽输出模式下,每个IO口最大拉电流和灌电流不应超过20mA,直接驱动LED或光耦时,通常控制在1.5~3mA左右。如果需要控制大功率外设,可以通过IO口控制MOS管的栅极电压,再控制外设。
2、单片机芯片的最大工作电流不应超过50mA,多个IO口控制外设时,一定要注意芯片的最大工作电流。
程序代码都在附件中,就不注水了。
MounRiver Studio代码51hei附件下载:
P-001.rar
(553.75 KB, 下载次数: 17)
|