如何实现stm32单片机每次接上电源就进行一次重启动?

发布时间:2023-10-08  

如何实现stm32单片机每次接上电源就进行一次重启动?

嵌入式系统中,单片机的重启有时是十分必要的,它可以解决一些系统启动过程中的问题、恢复系统的正常运行、使系统更加稳定等。

然而,有时候我们需要每次接上电源就进行一次重启,也就是实现系统的自动重启。本文将给出一个思路,来实现stm32单片机每次接上电源就进行一次重启动。

一、背景知识

在嵌入式系统中,有两类重启,分别是软重启和硬重启。

1.1 软重启

软重启是指通过程序控制单片机重新开始执行,实现系统的重启。在stm32单片机中,一般采用如下代码进行软重启:

```c
NVIC_SystemReset(); //调用此函数进行软重启
```

1.2 硬重启

硬重启是指通过硬件控制单片机重新开始执行,实现系统的重启。在stm32单片机中,硬重启通常是通过复位按键进行操作的。复位按键的功能是将单片机的复位引脚拉低,在一定时间后再拉高,从而实现单片机的重启。

二、实现思路

了解了软重启和硬重启之后,我们来思考如何实现stm32单片机每次接上电源就进行一次重启动。下面是一种实现思路:

2.1 硬重启

由于我们需要每次接上电源就进行一次重启,所以需要采用硬重启的方式。同时,我们还需要在重启之前有一个短暂的延时,以确保系统已经稳定运行。

在stm32单片机中,硬重启通常是通过复位按键进行操作的。我们可以在单片机的复位引脚和复位按键之间串联一个带有一定延时的电容,使得单片机在接电源,电容充电过程中,复位引脚的电平保持低电平,从而实现单片机的重启。

2.2 延时

在实际应用中,需要根据系统的不同运行环境和实际需求来设置延时的时间。由于系统重启时,CPU还没有开始执行代码,也就是没有时钟信号产生,所以我们需要在复位电容电压升高之前就将系统时钟启动,以保证系统能够稳定运行。在stm32单片机中,我们可以通过设置RCC_CR寄存器中的HSEON位或HSION位来启动时钟。

三、代码实现

实现思路已经确定,下面给出相应的代码实现。

3.1 延时函数

为了实现正确的延时,我们需要在代码中实现一个延时函数。下面是一种简单的延时函数实现:

```c
void delay(uint32_t n) {
while(n--) {
asm("nop");
}
}
```

3.2 硬重启

在stm32单片机中,复位引脚的引脚号为NRST,一般被定义为GPIOA的第0号引脚(PA0)。同时,我们还需要在复位引脚和复位按键之间串联一个带有一定延时的电容。

```c
void Reset_System(void) {
//延时一段时间
delay(0xFFFFF);
//启动时钟
RCC_DeInit();
RCC_HSEConfig(RCC_HSE_ON); //启动外部高速晶振
RCC_WaitForHSEStartUp(); //等待外部高速晶振就绪
RCC_SYSCLKConfig(RCC_SYSCLKSource_HSE); //将外部高速晶振选为系统时钟
RCC_HCLKConfig(RCC_SYSCLK_Div1); //选择AHB时钟为HCLK
RCC_PCLK2Config(RCC_HCLK_Div1); //选择APB2时钟为HCLK
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
//复位引脚配置
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
//将NRST引脚拉低一段时间,模拟复位按键的按下操作
GPIO_ResetBits(GPIOA, GPIO_Pin_0);
delay(0x3FF);
//将NRST引脚拉高,完成重启操作
GPIO_SetBits(GPIOA, GPIO_Pin_0);
}
```

3.3 主函数

在主函数中,我们对函数进行调用即可。

```c
int main(void) {
Reset_System();
//其他代码
}
```

四、总结

本文介绍了实现stm32单片机每次接上电源就进行一次重启动的思路,并给出相应的代码实现。

在实际应用中,我们可以根据系统的不同运行环境和实际需求,来设置延时的时间和复位电容的大小。同时,我们还可以采用软重启的方式来满足不同的需求。

最后,需要注意的是,重启操作可能会对系统的稳定性产生影响,应根据实际需求来考虑是否需要进行系统的重启。

文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

相关文章

    STC89C52单片机为例; (6)选择好型号后,打开所需烧录的HEX文件; (7)然后点击“下载/编程”按钮; (8)由于STC89C52单片机烧录程序需要在上电后才能触发进入程序烧录流程,所以需要先对单片机进行断电......
    ,无法重新烧录程序。即使重新上电也不能识别到st-link。我在这个问题上栽了跟头,因为单片机重新上电后依然不能识别到st-link,所以以为是单片机坏了,重新换了单片机再烧录同样的程序,结果......
    存储器中的数据是固化在芯片中的,断电后数据不会丢失。 ROM被用于存储固化的程序和数据,例如BIOS、固件等。 常见的ROM有EPROM、EEPROM、Flash等。 在单片机的应用里,ROM一般......
    STM32CubeProgrammer 中下载 应用程序 App1(如图 3),并设置 RDP=1(如图 4);然后断开 STM32CubeProgrammer 的连接,板子断电后重新上电; (2) 根据 log......
    步骤 (1) 在 STM32CubeProgrammer 中下载 应用程序 App1(如图 3),并设置 RDP=1(如图 4);然后断开 STM32CubeProgrammer 的连接,板子断电后重新上电......
    ) 在 STM32CubeProgrammer 中下载 应用程序 App1(如图 3),并设置 RDP=1(如图 4);然后断开 STM32CubeProgrammer 的连接,板子断电后重新上电......
    ,如果用3.3V供电的话第4脚要连接到3.3V。由于STC51单片机在下载程序的时候要断电再重新上电,所以单片机部分的电源设计如下图所示: 为了实现单片机电源的断电再上电(注意:这里是指单片机......
    有效时,再靠跳转指令Jump到启动地址2,开始运行App。 方式四控制器刷死情况分析: 如图 2-a,运行Reboot更新CB途中断电重新上电后,如图2-b,由于启动地址1的内......
    的结构出问题的概率当然更小了! 值得一提的是在使用CH340时,有些问题得注意下,因为很多同学反映用CH340下程序失败,但其实一般都很容易解决的。经本人总结常见原因有三: 一:某些CH340的引脚给单片机供了电导致单片机断电......
    中函数递归的语句时,可以自动复位。这个我在实验时看到过这个现象,但具体原因不明,我没有使用看门狗。   5.有些单片机可以在程序控制下自动复位。   单片机复位电路不能复位的原因   STM32f0按键模块电路经常遇到上电......

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>