摘要: 具体方法如下: 1、新建一个.c文件,如banben.c 2、新建文件中加入以下信息,如下图 #define VERINFO_ADDR_BASE (0x0800F000) //存放FLASH的地址 const char Software_Ver[] __attribute__((at(VERINFO 阅读全文
posted @ 2023-10-24 19:24 ZaiLi 阅读(112) 评论(0) 推荐(0) 编辑
摘要: 当程序中需要打印浮点数时,按照下图配置任意勾选一个即可打印浮点数: 当勾选第一个时,float打印会输出正确数值,具体如下: 当勾选第二个时,float打印输出数值如下(5.20会输出5.19),具体如下。 此时若需要输出正确数值5.20,将float类型改为double类型即可 产生该现象的原因: 阅读全文
posted @ 2023-10-24 16:43 ZaiLi 阅读(306) 评论(0) 推荐(1) 编辑
摘要: 通常编译器都是支持预定义标识符的,MounRiver也是支持的。通过预定义标识符,可以获取当前编译的源文件名、函数名、日期时间等。 常见的预定义标识符有以下几种: //以下这些比较常见,主要用于日志分析、版本记录,便于调试。 printf("file: %s\n", __FILE__); //表示编 阅读全文
posted @ 2023-10-24 16:33 ZaiLi 阅读(59) 评论(0) 推荐(0) 编辑
摘要: 在程序设计以及硬件电路设计中,通常使用GPIO连接按键,通过检测外部按键按下的高低电平实现按键的检测。当我们需要多个按键且GPIO资源不够的时候,我们可以利用MCU的ADC功能,实现对按键的检测。 ADC按键检测电路如下: 当没有按键按下时,ADC检测IO口电压为3.3V。 当第1个按键按下时,AD 阅读全文
posted @ 2023-10-24 15:19 ZaiLi 阅读(479) 评论(0) 推荐(1) 编辑
摘要: 1、关于RTC唤醒失败解决方法 问题原因:若使用RTC进行唤醒唤醒不成功,闹钟中断标志没有被置位。原因可能是唤醒信号有毛刺,EXTI系统唤醒,但RTC来不及产生中断标志。 解决方法:RTC闹钟中断中判断的标志由RTC_IT_ALR,更改为EXTI_Line17中断标志,需要在中断函数中清17中断线标 阅读全文
posted @ 2023-10-24 13:28 ZaiLi 阅读(687) 评论(0) 推荐(0) 编辑
摘要: 关于noinit定义:noinit段指的是芯片SRAM的一块内存区域(注意是RAM区而非Flash),在该段定义的变量、或者函数,在除了掉电之外的任何芯片复位的情况下都不会被重新初始化。 关于noinit作用:no_init段常用来保存一些敏感信息,特殊应用场合下的不能被复位的数据或者做复位判断标志 阅读全文
posted @ 2023-10-24 13:09 ZaiLi 阅读(360) 评论(0) 推荐(0) 编辑
摘要: 关于在MRS开发环境下,针对CH32V系列MCU FLASH分配,具体方法如下: 比如开辟一段空间,存放数组等数据,首先在ld文件中修改FLASH分配,如下图: .consumer_flash1 : { . = ALIGN(4); }AT>FLASH1 .consumer_flash2 : { . 阅读全文
posted @ 2023-10-24 11:00 ZaiLi 阅读(78) 评论(0) 推荐(0) 编辑
摘要: 若要在程序中插入二进制文件,需要将插入的二进制文件与启动文件放在同一路径下,然后在启动文件中调用 .incbin "TEST.BIN" 指令即可,如下图: 编译后结果如下: 此外, .incbin "TEST.BIN" 指令要注意放在启动文件的位置,若放的不对可能会导致程序不运行,可按照下图位置放: 阅读全文
posted @ 2023-10-24 10:46 ZaiLi 阅读(110) 评论(0) 推荐(0) 编辑
摘要: 在CH32X035的GPIO模式配置选项中,并没有开漏输出的配置模式,如下图。在使用GPIO模拟IIC时,可在初始化时将其配置成推挽输出模式,在需要时切换对应的输入输出模式,以下是CH32X035 GPIO模拟IIC的实现例程。 具体程序代码如下: iic.h文件: #ifndef __IIC_H 阅读全文
posted @ 2023-10-24 09:42 ZaiLi 阅读(235) 评论(0) 推荐(0) 编辑