0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

工程师邓生 来源:未知 作者:刘芹 2023-09-14 14:22 次阅读

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

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

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

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 寄存器
    +关注

    关注

    31

    文章

    5357

    浏览量

    120580
  • 嵌入式系统
    +关注

    关注

    41

    文章

    3595

    浏览量

    129548
  • RCC
    RCC
    +关注

    关注

    0

    文章

    93

    浏览量

    26960
  • GPIO
    +关注

    关注

    16

    文章

    1205

    浏览量

    52162
  • STM32单片机
    +关注

    关注

    59

    文章

    549

    浏览量

    58736
收藏 人收藏

    评论

    相关推荐

    一次电源与二电源有什么不同

    在电力系统和电子设备的供电领域中,一次电源与二电源是两个至关重要的概念。它们各自承担着不同的功能和角色,共同确保电力供应的稳定性和可靠性。本文将对
    的头像 发表于 10-10 14:10 2095次阅读

    stm32单片机用什么软件编程

    STM32单片机种广泛应用于嵌入式系统领域的微控制器,具有高性能、低功耗、丰富的外设接口等特点。要对STM32单片机
    的头像 发表于 09-02 10:16 1511次阅读

    stm32单片机引脚介绍及功能

    STM32系列单片机是STMicroelectronics(意法半导体)推出的款基于ARM Cortex-M内核的32位微控制器。STM32单片机
    的头像 发表于 09-02 09:38 6109次阅读

    “AT+SAVETRANSLINK保存透传连接到Flash”函数,是否每次调用该命令时,都会对FLASH进行一次写操作?

    关于“AT+SAVETRANSLINK – 保存透传连接到Flash”这个函数,请问是否每次调用该命令时,都会对FLASH进行一次写操作,即使写之后的信息和写之前是样的? 比如,假
    发表于 07-15 08:00

    基于STM32单片机的智能温控风扇系统设计

    系统通过STM32单片机进行主控,系统内通过温度传感器进行温度检测,并通过显示屏进行显示。系统内分为手动和自动两种控制方式,在手动模式下通过
    的头像 发表于 06-27 10:23 4270次阅读
    基于<b class='flag-5'>STM32</b><b class='flag-5'>单片机</b>的智能温控风扇系统设计

    基于STM32单片机的简易波形发生器设计

    系统内使用STM32单片机进行主控,proteus内部集成示波器,使用按键可以调节波形的输出方式,在示波器上可以实时观察波形的变化。
    的头像 发表于 06-27 10:18 2037次阅读
    基于<b class='flag-5'>STM32</b><b class='flag-5'>单片机</b>的简易波形发生器设计

    基于STM32单片机的智能冰箱控制系统设计

    基于单片机设计的款智能冰箱控制系统,可以控制冰箱的制冷装置,可以采集冰箱的异味浓度,超过闽值之后控制紫外灯进行消毒工作单片机采用单片机采用
    的头像 发表于 06-25 09:21 1291次阅读
    基于<b class='flag-5'>STM32</b><b class='flag-5'>单片机</b>的智能冰箱控制系统设计

    STM320H750 USB通讯必须插拔一次才正常,为什么?

    我是两个ENDPOINT个 收 个发,最大64字节 我收上位发送个命令后,下位机上传数据 我用BusHound 调试,下发命令正常,但是
    发表于 05-27 06:54

    51、STM32单片机的编程方式样吗?

    STM32和51单片机是两种常见的单片机系列,它们在硬件架构、性能特点和编程方式等方面有所不同。但是从c语言编程的角度来说,我认为是大同小异的。我们来对比下它们的编程特点:51&am
    的头像 发表于 05-18 08:04 2280次阅读
    51、<b class='flag-5'>STM32</b><b class='flag-5'>单片机</b>的编程方式<b class='flag-5'>一</b>样吗?

    STM32单片机有哪几种常见的开发环境?

    STM32单片机款广泛应用于嵌入式系统开发的单片机,针对其开发,有以下几种常见的方式:STM32单片
    的头像 发表于 05-18 08:04 3145次阅读
    <b class='flag-5'>STM32</b><b class='flag-5'>单片机</b>有哪几种常见的开发环境?

    stm32使用emwin定时器每s读取一次时间,会出现跳秒的原因?

    使用emwin 定时器 每s 读取一次时间,发现会出现跳秒的情况,是怎么个情况? 时钟使用的是 stm32 单片机自带的 rtc
    发表于 04-28 07:34

    STM32单片机最小化系统设计原理

    STM32最小系统,就是能让STM32单片机能够正常工作所必须拥有的组成部分的集合,也是STM32单片机正常运行的必要环境。
    发表于 04-23 14:54 2885次阅读
    <b class='flag-5'>STM32</b><b class='flag-5'>单片机</b>最小化系统设计原理

    STM32L151RCT6单片机下载完程序不断电重启进不了低功耗怎么解决?

    最近遇到个很奇怪的问题,使用的是stm32L151RCT6单片机,固件库用的是STM32Cube_FW_L1_V1.8.1,程序中有低功耗的部分,当我下载完程序然后将设备彻底断电
    发表于 04-12 07:07

    STM32F205利用DMA实现多通道ADC采样,但是每启动一次转换才能更新一次结果是为什么?

    mode; 3、软件SWSTART启动AD转换后,每启动一次内存中只有一次转换结果更新,要完成12采样需要SWSTART
    发表于 03-27 06:37

    单片机怎么能够与手机实现远程通讯呢?

    单片机怎么能够与手机实现远程通讯呢? 随着物联网的快速发展,单片机作为物联网应用中最常见的控制器,与手机实现远程通讯已成为种趋势。通过
    的头像 发表于 01-15 14:59 3290次阅读