10 2023 档案
摘要:正常情况下,FLASH都是从0地址开始运行,但某些情况下,需要配置从FLASH某一地址开始运行,如0x08004000地址开始,具体配置方法如下: 1、在ld文件中将FLASH进行分区,分成两个区域,如下图 2、修改.init段,改为FLASH1 修改之后,直接下载,读取FLASH内容,如下: 代码
阅读全文
摘要:参考链接:https://mp.weixin.qq.com/s/vgYzCcxmsfn7BGWERHfITQ 通常,32位MCU的GPIO有多种配置方式,如STM32、CH32 MCU的GPIO引脚都有八种配置方式,总体可分为两类:输入和输出。其中: 输入可分为: 浮空输入 上拉输入 下拉输入 模拟
阅读全文
摘要:具体方法如下: 1、新建一个.c文件,如banben.c 2、新建文件中加入以下信息,如下图 #define VERINFO_ADDR_BASE (0x0800F000) //存放FLASH的地址 const char Software_Ver[] __attribute__((at(VERINFO
阅读全文
摘要:当程序中需要打印浮点数时,按照下图配置任意勾选一个即可打印浮点数: 当勾选第一个时,float打印会输出正确数值,具体如下: 当勾选第二个时,float打印输出数值如下(5.20会输出5.19),具体如下。 此时若需要输出正确数值5.20,将float类型改为double类型即可 产生该现象的原因:
阅读全文
摘要:通常编译器都是支持预定义标识符的,MounRiver也是支持的。通过预定义标识符,可以获取当前编译的源文件名、函数名、日期时间等。 常见的预定义标识符有以下几种: //以下这些比较常见,主要用于日志分析、版本记录,便于调试。 printf("file: %s\n", __FILE__); //表示编
阅读全文
摘要:在程序设计以及硬件电路设计中,通常使用GPIO连接按键,通过检测外部按键按下的高低电平实现按键的检测。当我们需要多个按键且GPIO资源不够的时候,我们可以利用MCU的ADC功能,实现对按键的检测。 ADC按键检测电路如下: 当没有按键按下时,ADC检测IO口电压为3.3V。 当第1个按键按下时,AD
阅读全文
摘要:1、关于RTC唤醒失败解决方法 问题原因:若使用RTC进行唤醒唤醒不成功,闹钟中断标志没有被置位。原因可能是唤醒信号有毛刺,EXTI系统唤醒,但RTC来不及产生中断标志。 解决方法:RTC闹钟中断中判断的标志由RTC_IT_ALR,更改为EXTI_Line17中断标志,需要在中断函数中清17中断线标
阅读全文
摘要:关于noinit定义:noinit段指的是芯片SRAM的一块内存区域(注意是RAM区而非Flash),在该段定义的变量、或者函数,在除了掉电之外的任何芯片复位的情况下都不会被重新初始化。 关于noinit作用:no_init段常用来保存一些敏感信息,特殊应用场合下的不能被复位的数据或者做复位判断标志
阅读全文
摘要:关于在MRS开发环境下,针对CH32V系列MCU FLASH分配,具体方法如下: 比如开辟一段空间,存放数组等数据,首先在ld文件中修改FLASH分配,如下图: .consumer_flash1 : { . = ALIGN(4); }AT>FLASH1 .consumer_flash2 : { .
阅读全文
摘要:若要在程序中插入二进制文件,需要将插入的二进制文件与启动文件放在同一路径下,然后在启动文件中调用 .incbin "TEST.BIN" 指令即可,如下图: 编译后结果如下: 此外, .incbin "TEST.BIN" 指令要注意放在启动文件的位置,若放的不对可能会导致程序不运行,可按照下图位置放:
阅读全文
摘要:在CH32X035的GPIO模式配置选项中,并没有开漏输出的配置模式,如下图。在使用GPIO模拟IIC时,可在初始化时将其配置成推挽输出模式,在需要时切换对应的输入输出模式,以下是CH32X035 GPIO模拟IIC的实现例程。 具体程序代码如下: iic.h文件: #ifndef __IIC_H
阅读全文
摘要:1、关于MRS环境下nop指令的用法 关于nop指令的用法,使用之前可按照下图进行宏定义,具体如下图: #define nop() asm volatile ("nop") 2、于MRS环境下将数据放在RAM指定位置报错问题 程序编译报错:cannot move location counter b
阅读全文
摘要:在使用高级定时器进行初始化的时候,相较于通用定时器,在初始化的时候会有一个重复计数的配置,如下图: 该位主要是对重复计数值寄存器进行配置,如下图: 关于该配置的使用说明,具体如下: 以定时器中断为例: 1、一般默认情况下,将重复计数值设置为0。配置为向上计数时,当从0计数到arr值的时候进入一次中断
阅读全文
摘要:1、使用MounRiver仿真时仅擦除程序代码部分flash空间配置(页擦) 关于MounRiver仿真时仅擦除程序代码部分flash空间配置 2、使用MounRiver调试时如何配置不下载程序 关于MounRiver调试时如何配置不下载程序 3、使用MounRiver下载时如何选择配置部分擦除不全
阅读全文
摘要:第一种: 使用Keil仿真的方式。因SRAM启动与FLASH无关,在SRAM中运行,断电后数据丢失,故在keil下仅用于仿真。有四个注意事项: 1)、BOOT0、BOOT1都需要接高电平,从RAM启动;2)、在Debug选项中,Initialization File选项加载SRAM.INI文件;3)
阅读全文
摘要:1、使用MounRiver编译出现not found报错 若遇到下图编译问题 可检查下路径是否有问题: 看下图配置下路径 ${eclipse_home}\toolchain\arm-none-eabi-gcc\bin 2、使用MounRiver编译编译之后如何查看.test、.data、.bss各段
阅读全文
摘要:1、使用MounRiver进行仿真时注意事项 当使用MounRiver进行仿真的时候,需要注意 注意代码中不要包含有FLASH的操作 注意代码中不要有开启看门狗或低功耗模式操作 这些操作都会对仿真产生影响。 2、使用MounRiver进行编译遇到未使用函数被编译导致FLASH超出问题 关于在MRS编
阅读全文
摘要:1、关于CAN工作模式的切换 CH32的CAN有3种工作模式:初始化模式、睡眠模式和正常模式3种模式。只能在初始化模式下修改CAN_BTIMR 的 SILM 和 LBKM位配置来选择一种测试模式,测试模式有3种:静默模式,环回模式,静默环回模式。若要切换工作模式,需要对寄存器CAN_CTLR 中的
阅读全文
摘要:从下图可以看出,第二列与第三列分别为优先级与优先级类型,优先级类型又分为两种,其一是固定优先级,其二是可编程的优先级。以RTC为例,优先级为5,优先级类型为可编程,代表着在不配置RTC的优先级时默认为5,如果需要,也可以将其配置为更高的优先级进行响应。 下图关于中断优先级配置,针对CH32V20x系
阅读全文
摘要:可编程快速中断控制器(PFIC)提供四个免表(Vector Table Free)中断通道,可不经过中断向量表的查表过程,直达中断函数入口。 个人简单测试过,当开启VTF后,中断延迟时间大概可缩短2个时钟周期左右。关于VTF的具体介绍,可参考对应青稞微处理器手册3.5小节。 QingKeV3手册:
阅读全文
摘要:1、复用为串口1配置方法 关于PA6和PA7,重映射串口1时,最后下标为3,如下图。 换算成二进制为11,重映射对应的就是PA6、PA7,如下图。 由于库中没有直接定义该位,因此将PA6、PA7复用为USART1时,需要进行如下操作,如下图。可直接调用GPIO_PinRemapConfig函数,先调
阅读全文