一、问题思考
直接用官方提供的例程,为何下载程序后没有什么响应,难道自己设计的电路有什么不妥?
于是,对于电路进行具体分析,结果发现:
第一、官方的BOOT0采用杜邦线连接,在芯片手册好像找不到关于BOOT0的叙述,仅仅在《CH32V20x评估板说明书》中看到:
也就是说,这芯片要烧录时BOOT0必须接VCC,运行程序时BOOT0必须接GND。
因此可以确定,个人设计的线路欠佳,于是只能将原来的轻触SW1改为单刀开关:
目前线路板只能改成这样了
烧录方式也改成二线调试模式,使用WCH-LINK下载。
第二、官方设计的开发板采用外部晶振,而个人设计的线路没有外接晶振,所以必须启用内部晶振才能使芯片正常工作!
二、程序测试
1、修改失败
现在最紧要的是进行程序测试,将官方的程序CH32V20xEVT\EXAM\GPIO\GPIO_Toggle从程序库提取出来,编译结果总是提示debug.h等头文件链接出现问题,查看项目属性,觉得也没有发现什么不妥。
2、重建工程
于是只能自己新建项目,幸好这MRS新建项目比起Keil方便得多多。
方法也简单,即点击“文件”--“工程”,选择对应的芯片型号和设置工程存放的路径,点击“完成”,随即完成工程的创建!
3、修改代码
因为个人设计的线路没有外接晶振,所以需要启用芯片内部晶振,方法也没有简单,只须把system_ch32v20x.c中的
#define SYSCLK_FREQ_96MHz_HSE 96000000
改成
#define SYSCLK_FREQ_96MHz_HSI 96000000
为测试引脚功能,需要在主程序中复制官方代码中的引脚初始化代码到主程序:
void GPIO_Toggle_INIT(void) { GPIO_InitTypeDef GPIO_InitStructure = {0}; RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); GPIO_PinRemapConfig(GPIO_Remap_PD01,ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOD, &GPIO_InitStructure); }
int main(void)要添加变量定义
u8 i=0;
和在
printf("This is printf example\r\n");
之后调用
GPIO_Toggle_INIT();
大循环中添加引脚翻转代码:
Delay_Ms(1000); GPIO_WriteBit(GPIOD, GPIO_Pin_0, (i == 0) ? (i = Bit_SET) : (i = Bit_RESET));
三、点灯成功
上述代码修改完成后,点击编译和下载,板子上的LED灯亮起来了
https://www.bilibili.com/video/BV1c66XYZEDD/
欢迎关注本人公众号,了解更多。