GD32 MCU常见问题
文章平均质量分 63
GD32 MCU相关问题解答
聚沃科技&GD32 MCU
聚沃科技官网:www.gd32bbs.com;GD32 MCU技术交流Q群:859440462;V群+13905102619 开发板购买:https://juwo.taobao.com/
展开
-
GD32 MCU是如何进入中断函数的
当有EXTI0中断发生,MCU会知道是22号中断来了,内部总线就会去查flash最开始地址中的中断向量表,找到第23个地址(0x08000058),并取得里面的数据也就是中断函数的入口,然后就跳转到中断函数中执行程序了。用过GD32 MCU的小伙伴们都知道,程序是顺序执行的,但当有中断来的时候程序会跳转到中断函数,执行完中断函数后程序又继续回到原来的位置继续执行,那么你们知道MCU是如何找到中断函数入口的吗?正常情况下,程序是不会跳转到这个地址去执行的,那为什么中断信号一来,程序就直接跳转过去了呢?原创 2024-07-17 09:44:07 · 233 阅读 · 0 评论 -
GD32 MCU上电跌落导致启动异常如何解决
2、修改NRST引脚对应的RC阻容,调整MCU启动时间,避开电源电压跌落的时刻,MCU的启动不仅仅看VDD高于PDR,还需要看NRST引脚电压高于0.7VDD,调整NRST对应的RC阻容,可以调整MCU的启动时间。GD32 MCU上下电复位波形如下图所示,上电过程中如果存在吃电的模块,比如wifi模块/4G模块/开启某块电路等,可能存在电源电压跌落的情况,此时若MCU在启动过程中可能会造成MCU加载代码异常,进而导致启动异常。大家是否碰到过MCU上电过程中存在电源波动或者电压跌落导致MCU启动异常的问题?原创 2024-07-16 09:46:35 · 147 阅读 · 0 评论 -
keil中GD32 MCU IAP中APP的存储地址如何设置?
如果你想要通过IAP烧录APP,也一定要烧录到0x08008000起始的flash区域哦,否则跳转到APP中执行程序就会出错的。这样通过keil烧录,程序就自动下载到从0x08008000起始的flash区域哦。前面和大家聊过什么是IAP,那么IAP中APP的存储地址该如何设置呢?原创 2024-07-15 13:23:41 · 207 阅读 · 0 评论 -
什么ISP?什么是IAP?
当MCU刚上电时,会执行用户BootLoader程序(需要注意:这里需要选择将BOOT0接低,也就是让从主flash中启动),工程师需要在用户BootLoader中实现接收数据并对非本程序所在地址flash区域编程的功能,这样用户将APP的bin文件发给用户BootLoader程序,BootLoader程序将APP的数据写到特定的地址中,比如0x08008000开始的地址,这样就实现了通过用户BootLoader烧录APP的功能。好了,现在小伙伴们知道什么是ISP,什么是IAP了吗?原创 2024-07-13 11:37:47 · 533 阅读 · 0 评论 -
GD32MCU最小系统构成条件
GD32的内部时钟采用RC震荡电路,而外部电路采用的是石英晶振起振获取外部时钟,石英起振比RC震荡电路的精度要高的多。3)第三种方式常用于调试,将程序写入SRAM可以直接进行调试,方便快捷,但是SRAM重新上电后数据会被清空,也就是说写入程序只能使用一次,掉电不保存。常用的方式是串口烧录,也就是ISP下载。需要确保供电的电压电流稳定,以东方红开发版为例,选用GD低压差大电流LDO作为电源转换芯片,保证后端电路的稳定。复位电路在特定条件下给复位引脚发送复位信号,以303为例,一般是拉低使能,运行时拉高。原创 2024-07-12 09:42:48 · 492 阅读 · 0 评论 -
不同型号的GD32 MCU如何区分?
大家是否碰到过以下应用场景:同一套软件代码希望跑在不同型号的GD32 MCU中,但有些地方需要根据MCU型号进行调整?或者上位机或其他MCU与GD32 MCU通信时需要知道对应的MCU型号是哪个?GD32 MCU的型号区分可以通过PID进行区分,PID定义如下图所示,该寄存器为只读寄存器,出厂被一次性编程,共4个字节,不同型号的MCU,PID是不同的。此时,我们就需要了解如何获取以及区分GD32 MCU的型号。原创 2024-07-11 11:01:34 · 758 阅读 · 0 评论 -
如何查看GD32 Keil和IAR工程的map文件
那么什么是map文件呢?map文件是编译器编译工程后生成的一个文件,文件会有很多信息,比如函数地址及所占空间大小、变量地址及所占用空间大小、栈顶指针、整个工程所占用的flash和RAM空间大小等等。在进行代码分析时,map文件是非常重要的。我们在设计调试程序时,往往需要知道一个函数或一个变量它在MCU中具体所在的地址以及所占用的空间大小,这时候就需要查看map文件。点击OK后,将文件进行重新编译,就可以在output文件夹下看到map文件了哦。IAR工程一般默认是不生成map文件的,我们需要进行一些设置。原创 2024-07-10 09:35:52 · 546 阅读 · 0 评论 -
如何通过Jlink查看GD32芯片跑飞后程序死在哪里?
首先,我们需要将目标板和Jlink进行连接,只需要接三根线:SWDIO(PA13)、SWCLK(PA14)和GND,切记,一定不能接NRST脚,否则连接的时候就可能把芯片复位了,当然,也一定要保证连接过程中芯片不要断电。红色方框内的PC值就代表了程序当前执行的位置,我们可以通过查看程序工程中的map文件,就可以找到程序正在运行哪个函数了,如小编这里的PC值是0x08000AAA,map文件中符合这个地址的是delay_1ms函数。,并回车,如果一致则直接回车。提示连接到Jlink,然后输入:s,并回车。原创 2024-07-09 09:47:15 · 738 阅读 · 0 评论 -
SPI全双工模式下数据接收异常的一个原因
除了有发送缓冲区和接受缓冲区外,还有一个移位寄存器,所以当使用SPI发送最后一个字节到发送缓冲区时,倒数第二个字节还在移位寄存器中没有发出,此时如果应用程序将从机CS拉高的话,就会导致从机失效,从而不会发出正确的数据。当该位为0时,就标志着SPI缓冲区和移位寄存器中都没有数据了,你就可以放心大胆的控制CS片选脚啦。这句的意思是等待SPI通讯空闲,对应读取的标志位是SPI_STAT 寄存器中的bit7位。我们知道,SPI是一主多从的总线结构,主机和哪个从机是通过CS片选来决定的。原创 2024-07-08 09:45:35 · 180 阅读 · 0 评论 -
GD32 MCU ADC采样率如何计算?
首先给大家介绍下ADC时钟如何配置,如下为RCU时钟树中有关ADC时钟的说明,通过ADCPSC控制位可以选择ADC时钟来自于AHB还是APB2分频,若ADCPSC配置为0,ADC时钟为APB2时钟2/4/6/8/12/16分频,若ADCPSC配置为1,ADC时钟为AHB时钟5/6/10/20分频。ADC时钟计算好后,根据不同的分辨率就可以计算采样率了,如下图所示,不同的分辨率对应的采样转换时间是不同的,比如12位分辨率,采样转换就需要14个ADCCLK。原创 2024-07-07 09:36:21 · 893 阅读 · 0 评论 -
GD32MCU如何实现掉电数据保存?
若系统供电只有VDD供电,VBAT外部未接电池或者需要保存的数据比较多的情况下,可以选择使用内部Flash作为存储介质,为了节省数据更新的时间,可以采用双备份的方式,在系统运行的过程中,先擦除一个备份,检测到掉电事件后,节省擦除时间,直接向备份区域写入更新数据;GD32 MCU基本都支持备份数据寄存器,GD32E103系列支持84字节数据寄存器,可以在VDD掉电,VBAT有电的情况下进行数据保存,备份数据寄存器不需要擦除可以直接写入,数据更新速度较快。原创 2024-07-06 09:31:08 · 1156 阅读 · 0 评论 -
GD32 Timer定时器周期时间计算公式
其一为prescaler,即Timer的分频系数,该分频系数将Timer频率进行分频后给到计数器时钟,计算公式为:计数器时钟频率 = CK_TIMER/(prescaler+1),故图中计数器时钟频率为120M/12000 = 10KHz,即每100us,计时器进行一次计数。我们来看下图方框中的提示,方框1中写到,如果APB1的分频系数为1的话,这些Timer的频率就等于CK_APB1,如果APB1的分配系数不为1,则Timer的频率等于CK_APB1*2。方框2中的内容和方框1中相同,就不再赘述。原创 2024-07-04 10:19:00 · 1014 阅读 · 0 评论 -
如何对GD32 MCU进行加密?
MCU代码的加密和解密是一个永恒的话题,对于一个成熟的产品芯片加密也是一个必须要考虑的问题,大家如果有其他好的MCU加密方法,也欢迎大家在评论区留言。GD32 MCU有哪些加密方法呢?大家在平时项目开发的过程中,最后都可能会面临如何对出厂产品的MCU代码进行加密,避免产品流向市场被别人读取复制。实际使用中,大家可以选择多种加密方式共用,以达到更好的加密效果。原创 2024-07-03 11:38:28 · 714 阅读 · 0 评论 -
GD32F303 使用PA8输出内部时钟频率
今天,我们以GD32F303为例来教大家如何通过PA8口输出内部时钟频率(有些GD32系列不一定是使用PA8口,小伙伴们需要自行查找资料确认)。另外在库文件gd32f30x_rcu.c中定义了时钟输出函数rcu_ckout0_config,在函数注释中已经将可调用的参数列出,但需要注意,红色方框以外的参数仅可用于GD32F305/307即互联型(CL)产品,小伙伴们可以自行查看GD32F30x系列HD和CL产品系列时钟树的不同哦。以上就是今天的内容,小伙伴们还想要了解什么,欢迎评论区留言哦。原创 2024-06-27 10:33:32 · 488 阅读 · 0 评论 -
MCU复位时GPIO是什么状态?
那么我们现在知道了,除去一些特殊IO和软件配置时序我们需要注意,在MCU IO口初始化前其他IO都是高阻状态,那么高阻状态是什么电压?大家一定遇到过上电或者复位时外部的MOS电路或者芯片使能信号意外开启,至此有经验的工程师就会经常关心一个问题,MCU复位时GPIO是什么状态?所以当MCU复位后,GPIO初始化前一些特殊GPIO是会有内部上下拉或者输出状态的,我们需要根据电路电平要求来合理选用GPIO,避免复位时IO口出现误输出。2、设置GPIO输出高还是低;这样就不会在初始化过程出现毛刺,需要严格遵守。原创 2024-06-26 10:33:53 · 605 阅读 · 0 评论 -
芯片烧坏时发生了什么?为什么总是VDD短路?甚至封装开裂冒烟?
如果电源能提供的电流足够大,那么通过芯片内部融化金属的连接流过几A(读“安”)电流产生更大温升,芯片物理介质会大面积碳化甚至气化,瞬间的高温可能让封装体燃烧冒烟,同时芯片内部严重分层产生的压力让封装体字节爆裂。那么当IO口内部流入电流时,芯片内部的集成电路金属线和器件因为有阻抗存在就一定会产生温升,所以当电流足够大时,芯片内部金属层或器件会出现熔断,融化的导电介质会扩散开,和周围电路粘连在一起。当然如果通过LDO等提供的最大电流较低,芯片不会出现明显的外观损坏,会让我们对芯片什么坏了更加摸不着头脑;原创 2024-06-25 10:28:52 · 583 阅读 · 0 评论 -
GD32 串口接受异常的几个原因
我们知道,串口每个byte的数据都有一个起始位,占一个bit时间,如果由于一些原因导致对方发过来的数据起始位过短的话,MCU就无法识别到这个起始位,从而这个byte的数据就不会被接收。GD32库中这个值默认是8M或25M,而有的小伙伴在用其他频率的晶振时,虽然根据实际频率修改了配置主频的函数,但没将HXTAL_VALUE这个值修改为实际值,就会导致配置出来的波特率和预想不符,从而导致波特率异常。以上,就是小编总结的几点串口接收异常的可能原因,小伙伴们有知道其他原因的,欢迎在评论区交流哦。原创 2024-06-24 13:07:16 · 1027 阅读 · 0 评论 -
如何降低MCU系统功耗?
大家在做MCU系统开发的时候,是否也碰到过降低MCU系统功耗的需求?原创 2024-06-23 12:01:34 · 722 阅读 · 0 评论 -
GD32 MCU的选项字节是什么?
USER为用户配置字节,可以配置芯片从BANK0还是BANK1启动,配置低功耗模式唤醒后继续进入低功耗模式还是复位,配置是否使能硬件独立看门狗(硬件看门狗使能后,芯片上电后会自动打开看门狗,如果读者有发现芯片看门狗复位,且软件上没有打开看门狗,就可以排查下看是否该控制位被打开,另外硬件看门狗对于ESD软件防护有帮助,在可以接受复位的ESD测试中,使能硬件看门狗上电后即作用,可以规避从上电到启动软件看门狗过程中死机的问题);读者朋友们是否会有以上的疑问,首先我们先为大家介绍选项字节是什么以及选项字节的功能。原创 2024-06-22 11:06:34 · 800 阅读 · 0 评论 -
GD32F303 低功耗模式要点
Sleep和Deepsleep模式:IO口保持进入低功耗前的状态,即本来是输出高的继续输出高,本来是输出低的继续输出低(一个重要提示:在进入Deepsleep前,要将不需要保持状态的IO口配置为模拟输入,这样可以达到最低功耗)Standby模式:只有特定几个唤醒源可以唤醒,分别是NRST引脚唤醒、WKUP(PA0)引脚唤醒、看门狗事件唤醒、RTC闹钟唤醒。Deepsleep模式:外部晶振停振,唤醒MCU后,MCU强制使用内部晶振且没有倍频,应用程序需要在唤醒后进行时钟重配。Standy模式:外部晶振停振。原创 2024-06-21 11:24:49 · 546 阅读 · 0 评论 -
GD32 485发送异常最常见原因
这是因为,串口是有数据寄存器和移位寄存器,当最后一次判断TBE不为“0”并调用usart_data_transmit函数后,实际上倒数第二个字节的数据正在发送移位寄存器中对外发送,最后一个字节在数据寄存器中,此时如果将485传输方向改为接收,那么最后两个字节的数据将不会发送到485总线上。这是采用轮训方式进行485发送的函数,首先将485传输方向设置为发送,然后进行长度为len的数据发送,发送完成后将485传输方向设置为接收。看似这段代码没有问题,但当放在MCU上运行后发现,从机会少收到两个字节的数据。原创 2024-06-20 13:25:34 · 374 阅读 · 0 评论 -
GD32如何设计晶振电路
反馈电阻可以使芯片内部反相器稳定工作在线性区间,虽然一般MCU内部是设计有反馈电阻的,但根据晶振频率不同,反馈电阻的范围会有区别,所以可以根据晶振频率来选择合适阻值的反馈电阻,典型的反馈电阻取值范围如下表,根据GD32F303的晶振范围,1MΩ基本可以全区间要求。负载电容对晶振稳定性至关重要,晶振的规格书中一般会给出推荐的负载电容值,但实际负载电容需要外部匹配电容和PCB走线杂散电容来综合计算。合适的阻尼电阻还可以降低EMI噪声,提高MCU内部模拟性能等,非常建议大家设计预留。3、外部匹配电容该用多大?原创 2024-06-19 13:29:34 · 353 阅读 · 0 评论 -
为什么MCU ADC采样时IO口有毛刺?
我们可以用程序配置的采样保持周期和ADC时钟计算出ADC采样开启的时间,如果从毛刺产生时刻开始经过采样开启时间后电压已经恢复到平稳,那么此时这个平稳的电压和ADC采样电容上的电压一致,接下来的ADC转换也就能得到正确的结果。是的,你没看错就是这么简单,mcu采样保持电路可以等效为一个开关、一个采样电阻和采样电容;那么为什么MCU ADC采样时IO口会出现毛刺,这个毛刺会影响采样结果吗,让我们来一起研究一下。这个时候大家一般会以为是信号源有问题,但仔细观察会发现这个毛刺的频率是和ADC触发频率一样的!原创 2024-06-18 10:33:36 · 606 阅读 · 0 评论 -
GD32 MCU启动后如何运行到main函数
MCU找到堆栈指针和复位中断入口地址之后,将会加载执行复位中断,复位中断函数定义在.s启动文件中,具体定义如下所示,进入到复位中断函数中之后,首先执行SystemInit系统初始化函数,该函数主要为系统时钟配置函数,之后跳转到main函数进行执行,也就是说在执行到main函数之前,已经进行了系统时钟配置。执行完复位中断函数之后,MCU将会进入到main函数进行执行。GD32 MCU启动后如何运行到main函数入口?在执行到main函数之前MCU干了哪些事情呢?GD32MCU技术交流群:859440462。原创 2024-06-17 13:11:33 · 557 阅读 · 0 评论 -
如何使用Keil打开GD32 FPU及使用ARM DSP库
我们知道,FPU在浮点运算速度上有很大的提升,并且只有带FPU才可以使用ARM的DSP库。下面我们来介绍下如何使用ARM的DSP库,首先,我们需要两个文件:arm_cortexM4lf_math.lib 和arm_math.h,GD官方库是不带这两个文件的,小伙伴们可以自行网上下载或者联系我们提供哦。好了,我们来验证下FPU是不是被打开了,我们编译工程并下载到MCU中,在Memory窗口看下0xE000ED88地址的数,如果为0x00F00000,就说明FPU被正确打开了。原创 2024-06-15 15:19:19 · 497 阅读 · 0 评论 -
你了解GD32 MCU的命名规则吗
下面为大家介绍GD32 MCU的通用命名规则,以GD32F303ZGT6为例,其中,GD32代表GD32 MCU,F代表通用系列产品类型,303代表303产品子系列,Z代表144引脚数,G代表1MB Flash容量,T代表LQFP封装,6代表-40-85°温度等级。F:SIP通用系列;E:eFlash嵌入式增强系列;VF:RISC-V系列;W:Wi-Fi无线系列;H:H7高性能系列;GD32 MCU目前推出近500款产品,在众多的产品中,你了解GD32 MCU的命名规则吗?6:-40度~85度;原创 2024-06-14 15:34:20 · 419 阅读 · 0 评论 -
GD32 MCU超频后无法再次下载程序的解决办法
原理其实也很简单,使用GD32 固件库时,一般在进入main函数之前都会进行系统时钟配置,配置函数中在开启外部晶振后会有等待晶振稳定的过程,如果在一定时间内无法稳定,则会进入while(1)循环(小伙伴们可以自行增加超时退出的操作哦),在这个过程中,MCU实际是使用内部高速晶振在跑的,没超频,当然就可以擦除程序啦,用镊子短接晶振,就是为了让晶振状态无法稳定,是不是很简单呢?我们知道,MCU的系统时钟主频就相当于人的心跳或脉搏,为所有的工作单元提供时间基数,所以一般在程序最开始的地方都需要进行主频配置。原创 2024-06-13 13:28:15 · 319 阅读 · 0 评论 -
GD32 MCU进入低功耗模式导致无法再进行程序下载怎么办?
如果将BOOT0拉高,再重新上电MCU,此时程序会从出厂引导装载程序(ISP)或者片上SRAM运行,这样就不会运行用户代码,也就不会再让MCU进入低功耗了,此时通过IDE的全片擦除功能将Flash中的程序擦除掉,再将BOOT0恢复为低并重新上电后,就可以重新下载程序啦。1、在调试低功耗模式时,可以在main函数之前增加几秒钟的延时,这样在复位MCU后,在MCU进入低功耗前,你可以有足够的时间进行新的程序下载;原创 2024-06-12 15:17:07 · 462 阅读 · 0 评论 -
MCU为什么上电不启动
NRST是MCU的复位引脚,如果复位引脚没有拉高,程序也不会启动,复位引脚一般和电源以及连接电路有关,电源上升到POR 2ms后NRST一般会拉高,如果没有拉高那还要进一步检查电源和电路。什么,如果还没找到问题,那就大胆的进入debug模式,千万不要对自己的程序太自信哦,真相甚至可能就是打错一个字母,关于软件debug的技巧,期待下次分享。如果mcu超频了,那么也会上电后跑飞导致不启动的现象,当我们晶振大小大于程序配置不一致时,就会出现我们以为主频正常,但芯片实际已经超频得离谱了。2、NRST拉高了吗?原创 2024-06-11 13:20:35 · 458 阅读 · 0 评论 -
KEIL5如何打开KEIL4的GD工程
GD官方提供的很多KEIL例程为KIEL4的版本,读者使用的时候可能会碰到使用KEIL5打开KEIL4的工程会报错以及无法找到芯片选型的问题,具体表现如下图所示。GD32MCU技术交流群:859440462。原创 2024-06-09 13:26:52 · 445 阅读 · 0 评论 -
SWD端口无法连接如何排查
排查之前烧录的代码是否有使用SLEEP/DEEPSLEEP/STANDBY模式,如果有,可以复位后再未进入低功耗的情况下进行连接,或者将BOOT0拉高进入ISP擦除代码后连接;排查芯片是否有读保护状态,可以使用LINK将芯片去除读保护,或者将BOOT0拉高进入ISP,使用ALL IN ONE上位机进行去除读保护;排查MCU VDD、SWD端口对地阻抗看是否正常,正常情况下,VDD和SWD端口对地阻抗应该会比较大,M欧级别;排查SWD线序是否正常,SWD线序一定要正常,不要接反了哦;降低SWD端口速率测试;原创 2024-06-08 13:22:20 · 561 阅读 · 0 评论 -
更改晶振后如何修改配置
GD32官方提供的固件库中使用的晶振配置一般为8M或25M,如果读者使用其他频率的晶振如何修改配置呢?以GD32F303为例,官方固件库中的晶振及时钟配置代码如下,改配置代码为使用外部8M晶振倍频到120M时钟。2、修改时钟倍频到120M.如下图红色底纹部分,配置15倍频,计算公式为16M/2*15=120M.PS:GD固件库中修改使用内部时钟非常方便,只要打开内部时钟的宏定义就可以啦。1、修改HXTAL_VALUE为16M,如下红色底纹部分。GD32MCU技术交流群:859440462。原创 2024-06-07 14:01:33 · 904 阅读 · 0 评论 -
GD32如何配置中断优先级分组以及中断优先级
中断优先级分组可采用以下函数接口,其中有4个bit可用于中断优先级分组,如果全用于抢占优先级,则可以配置0-15的优先级,如果2位用于抢占,2位用于次优先级,则抢占优先级可以配置0-3,此优先级可以配置0-3。注意:如果中断优先级配置为2位抢占和2位此优先级的话,抢占优先级配置为4(二进制为100b),优先级配置越界,实际配置进去的优先级为0,最高优先级,因而明确中断优先级分组非常重要。为此优先级配置,注意优先级配置要根据优先级分组进行配置,不要越界哦。中断优先级配置采用以下函数。原创 2024-06-07 13:53:29 · 404 阅读 · 0 评论 -
更改晶振后如何修改配置
GD32官方提供的固件库中使用的晶振配置一般为8M或25M,如果读者使用其他频率的晶振如何修改配置呢?以GD32F303为例,官方固件库中的晶振及时钟配置代码如下,改配置代码为使用外部8M晶振倍频到120M时钟。2、修改时钟倍频到120M.如下图红色底纹部分,配置15倍频,计算公式为16M/2*15=120M.PS:GD固件库中修改使用内部时钟非常方便,只要打开内部时钟的宏定义就可以啦。1、修改HXTAL_VALUE为16M,如下红色底纹部分。GD32MCU技术交流群:859440462。原创 2024-06-06 15:34:05 · 888 阅读 · 0 评论 -
变量位置不同会死机?郭天祥老师视频的遗留问题分析答案
其实这里有定义三个结构图,另外两个就是读写的时序结构体的实体,我们定义后先将这两个结构体变量赋值到exmc模式结构体成员的两个指针,此时指针才有了正确地址,调用结构图初始化后就可以把这两个结构体一起完成初始化。所以这里就是重点,此时这个结构体刚定义完成,因为是局部变量是定义在栈里的,所以初值都是随机值,这个随机值实际可以解释为栈空间上次释放的局部变量值。这段代码是定义和初始化exmc的结构体参数,我们来详细看下结构体中的定义,其中有一个关键是这里有两个。成员,分别是读和写的结构体参数指针。原创 2024-06-05 16:36:16 · 495 阅读 · 0 评论 -
GD32固件库里时钟配置时的神秘代码?高频切低频时芯片会发生什么
如果是程序复位启动后第一次执行这段代码,应该是没有什么意义的,但产品设计时一般都会有一个BootLoader和APP两段程序,当BootLoader跳转到APP时,MCU的时钟已经处于一个高频状态,直接执行RCU的复位意味着时钟会立刻切到内部8M运行。这样的内部电流瞬间变化一般会导致内部电源的波动,这种波动情况下执行的指令是不可靠的,如果硬件设计时MCU去耦电容设计不合理,很可能加剧这个波动,此时如果指令错误了那很可能会跑飞进入hardfault。这样就让电流变化有一个过渡,避免了内部电源波动过大。原创 2024-06-03 13:42:37 · 285 阅读 · 0 评论 -
为什么GD32F303代码运行在flash比sram更快?
通过查阅GD32F303用户手册系统架构章节我们可以知道,访问flash时可以直接通过ibus和sbus专用总线进行访问,而访问sram时通过AHB主机接口通过System BUS进行访问,AHB主机接口下更还有挂载有其他主机和外设总线,共享总线带宽。我们知道一般MCU的flash有等待周期,随主频提升需要插入flash读取的等待周期,以stm32f103为例,主频在72M时需要插入2个等待周期,故而代码效率无法达到最大时钟频率。GD32MCU技术交流群:859440462。原创 2024-06-02 13:28:09 · 312 阅读 · 1 评论 -
GD32F系列MCU片上Flash中Code区和Data区使用解密
导致该问题的原因是GD32F系列产品架构决定,其采用SIP的方式叠封了GD Flash,带来的优势是代码执行在code区相同主频下具有最高的代码执行效率,带来的问题是data区代码执行会慢一些,该问题是个双刃剑,具有两面性,我们需要在了解原理的情况下,更大限度的发挥优势。GD32F系列MCU产品片上Flash分Code区和Data区,以GD32F303系列为例,从GD32F303xx Datasheet中可以获取code区和data区大小,那Code区和Data区在代码执行上有什么差别呢?原创 2024-06-01 15:13:52 · 266 阅读 · 0 评论 -
聚沃科技SDK使用指南
写在前面:聚沃科技SDK使用GD固件库基础上开发了MCU外设驱动的中间层以及板级外设的驱动,相关例程调用驱动函数实现,用户在基于聚沃科技的SDK做产品开发时,可以很方便的适配新的硬件,直接调用相关驱动接口开发上层应用即可,类似STM32的hal库,弥补了原厂这一块的空缺,并且在驱动中做了很多容错性处理,总结了应用中常见一些问题,可靠性比原厂demo例程更好,可在裸机、RTOS等不同开发框架下稳定运行,能很好的缩短软件开发周期。该例程架构经过多层封装便于读者开发中直接使用。原创 2024-05-06 10:39:07 · 616 阅读 · 0 评论