在32应用中,我们复位一般有两种方式:
1.按复位按键复位程序
2.拔动单片机上的跳冒完成32的
以上两种复位方式中,对芯片而言,其实都是引脚接收到一个跳变延信号后触发的程序而已。在keil自带的固件库中,我们可以看到一下程序:
这里是从库中截出的复位程序代码段。EXPORT定义了一个全局变量 Reset_Handler 。IMPORT表示引用了一个函数,这里引进的_main函数的作用是把我们平时写的主函数中的main函数起作用,将C程序与底层汇编程序连接起来,使程序发挥作用。而我们在刚开始学习的时候,经常会发现别人写的环境中,总有一个函数不知道什么意思:SystemInit()。我们看会图片中150行中引入了SystemInit这个函数,在下一行并调用了该函数,然而却没有申明,因此如果我们在写主程序时如果没有在main外面声明一个新的SystemInit函数,编译时程序将报错。
由图所示写一个空的函数出来即可,目的就是为了骗过编译器不报错。注意此处的函数名不要打错,要和固件库里的函数名一样。
如果你在Keil中遇到这种错误:
..\OBJ\Template.axf: Error: L6218E: Undefined symbol assert_param (referred from misc.o).
就是说明你没有对SystemInit()函数定义,因此在任意的.c函数中对SystemInit()定义即可解决该问题,函数里可以为空。
关键字:复位 SystemInit函数
引用地址:
深度讨论32复位及SystemInit函数在程序中的作用
推荐阅读最新更新时间:2024-03-16 16:20
关于单片机的软复位
一、数组定位 main() { unsigned char code rst ={0xe4,0xc0,0xe0,0xc0,0xe0,0x32}; // 复位代码 (*((void (*)())(rst)))(); // 执行上一行代码,将rst数组当函数调用 } 本来我告诉他嵌入如下代码: clr a push acc push acc reti 结果他却玩了前面哪一段,而数组rst 中的内容恰恰是上面的汇编机器码,他的做法是将 rst数组的数据当作代码保存,然后采用绝对地址方式指向该数组,将该数组中的代码当作 函数来运行。居然通过了! l 单片机复位的更好方法 帖子中汇编语言解释如下: clr a /
[单片机]
关于STM32复位的那些事
1. 硬件复位 硬件复位电路如下图,直接将RESET引脚拉低即可,如下: 2. 软件复位 软件复位库函数: NVIC_SystemReset(); STM32F1XX系列中,复位函数在core_cm3.h文件中: /** * @brief Initiate a system reset request. * * Initiate a system reset request to reset the MCU */static __INLINE void NVIC_SystemReset(void){ SCB- AIRCR = ((0x5FA SCB_AIRCR_VECTKEY_Po
[单片机]
STM32 Bootloader异常复位如何解决
问题描述 客户反馈通过PC软件Flashloader不能够跟STM32 MCU自带Bootloader连接。并且系统运行一段时间后异常复位。 系统分析 检测原理图 延续之前的项目,进行的一些软硬件简单修改。 上电、放电的时序也是正常。 BOOT0 拉高,BOOT1 拉低, 测量工作时的电压正常(2.5v)。 检测所有相关的硬件软件都是没有问题,他们的BOOT脚,以及之前的PDR_ON是通过外围的FPGA单元控制,我们一开始怀疑这些上电时序,以及PDR逻辑出错。尝试让他们全部断开逻辑,测试整个上电,掉电过程都是没有什么问题。 测量波形 检测他们的串口工具 能正常在PC上发现他们的串口工具,数据的发送正常。 但是串口的到PCB
[单片机]
ATtiny13 看门狗复位
ATtiny13看门狗定时器溢出时将产生持续时间为1 个CK 周期的复位脉冲。在脉冲的下降沿,延时定时器开始对tTOUT 记数。请参见P40 以了解看门狗定时器的具体操作过程。
[单片机]
解决51单片机复位触发的4种方法
51内核的单片机有个比较恼人的特性就是复位期间,IO口呈高电平状态,万一IO口控制的设备是使用高电平触发的话,在复位的瞬间会造成设备触发。 总结一下接触过的解决方法: 1、把MCU换成别的体系的,譬如AVR、PIC等,这些单片机复位时IO口呈浮空高阻状态,不会造成触发。 2、使用反相驱动,MCU输出低电平反相成高电平再去控制设备。复位时的高电平反相后变成低电平,不会触发。这是比较常用的方法,稳定,但布线复杂了不少。 3、使用光耦隔离。光耦隔离后MCU也是输出低电平打开光耦再驱动被控设备,复位时的高电平不会打开光耦,不会造成误触发。 4、使用多余的IO口锁定,这种方法比较奇怪,在没用的IO口里挑一个出来接到NPN管的基极,
[单片机]
stm32启动文件详解及SystemInit函数分析
;先在RAM中分配系统使用的栈,RAM的起始地址为0x2000_0000 ;然后在RAM中分配变量使用的堆 ;然后在CODE区(flash)分配中断向量表,flash的起始地址为0x0800_0000,该中断向量表就从这个起始地址开始分配 ;分配完成后,再定义和实现相应的中断函数, ;所有的中断函数全部带有 特性,即弱定义,如果编译器发现在别处文件中定义了同名函数,在链接时用别处的地址进行链接。 ;中断函数仅仅实现了Reset_Handler,其他要么是死循环,要么仅仅定义了函数名称 ;STM32被设置为从内部FLASH启动时(这也是最常见的一种情况),当STM32遇到复位信号后, ;从0x0800_0000处取出栈顶地址存放于M
[单片机]
ATmega32 看门狗复位
ATmega32 看门狗定时器溢出时将产生持续时间为1 个CK 周期的复位脉冲。在脉冲的下降沿,延时定时器开始对tTOUT 记数。请参见P40 以了解看门狗定时器的具体操作过程。
[单片机]
复位电路确保有效的电源电压-Reset Circuit En
It is often necessary to prevent a power supply's voltage from being applied to a load until the voltage has reached a certain minimum value. The circuit of Figure 1, consisting of two compact SOT23 packages, protects the load by blocking the supply voltage (nominally 5V) when it is below a pre-set threshold. IC1's thr
[电源管理]