如何实现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单片机每次接上电源就进行一次重启动的思路,并给出相应的代码实现。

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

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

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

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

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

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

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

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

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

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