stm32

STM32独立看门狗(IWDG)和窗口看门狗(WWDG)的区别

淺唱寂寞╮ 提交于 2020-02-21 22:53:36
1.看门狗介绍 看门狗这东西虽然简单,但我相信绝大多程序员没有足够重视它。使用看门狗保证系统正常地运行是非常有必要的。我们在设计产品时,代码以及硬件设计缺陷或是外界电磁干扰都有可能使系统死机,如果不能正常对其进行复位,系统的可靠性将大打折扣。看门狗分为软件看门狗和硬件看门狗两类,其原理都是使用一个独立定时器来计时,超出时间就会产生复位信号,主要区别看是否具有独立的硬件结构,如果有,就是硬件看门狗,如果是一个普通定时器实现的那么就是软件看门狗。STM32片内有两个看门狗:独立看门狗IWDG以及窗口看门狗WWDG。 2.两个狗的区别 独立看门狗没有中断,窗口看门狗有中断 独立看门狗有硬件软件之分,窗口看门狗只能软件控制 独立看门狗只有下限,窗口看门狗有下限和上限 独立看门狗是12位递减的。窗口看门狗是7位递减的 独立看门狗是用的内部的大约40KHZ RC振荡器,窗口看门狗是用的系统时钟APB1ENR 独立看门狗(IWDG)没有中断功能,只要在计数器减到0(下限)之前,重新装载计数器的值,就不会产生复位,独立看门够有硬件和软件之分,硬件是通过烧写器的“设定选项几节等”配置,一旦开启了硬件看门狗,那么就停不下来了,只能在重新配置“设定选项几节等”才能关掉硬件看门狗,软件看门狗只需要设置IWDG->KR=0XCCCC;就可以启动看门狗了,软件狗可以在系统复位时关掉

stm32学习笔记-外部中断

让人想犯罪 __ 提交于 2020-02-21 07:27:31
文章目录 1、stm32f103外部中断控制器EXTI。 1.1外部中断的映像 1.2 外部中断/事件的框图 1.3 外部中断的编程。 外部中断配置思路 相关寄存器 相关库函数 1.4 按键中断实例。 1、stm32f103外部中断控制器EXTI。 1.1外部中断的映像 外部中断只有0~18共19个,那如何给每一个GPIO口配置上中断,通过一个映像把所有具有相同下标的GPIO口映像成相应下标的外部中断。 参考手册: 1.2 外部中断/事件的框图 中断大致过程如下: 通过配置 上升沿/下降沿触发选择寄存器 选择 边沿检测电路 所要检测的边沿跳变。 边沿检测电路 根据 输入线 是否有相应的边沿跳变,检测到则输出信号1,否则输出信号0。 通过一个 或门 ,或门 以 边沿检测电路 、 软件中断事件寄存器 (中断事件可以通过软件产生) 作为输入。两者之一有一个产生信号1,或门就输出信号1。 或门输出的信号1。输出的信号1发至 请求挂起寄存器 。 请求挂起寄存器对应寄存器的位置1,然后请求挂起寄存器会产生一个信号1。(不懂,这里暂略) 请求挂起寄存器、中断屏蔽寄存器同时输出信号1,则发生信号1到NVIC中断控制器。(注意:这里可以看出中断屏蔽也就是一个与操作。) 事件大致过程如下: 通过配置 上升沿/下降沿触发选择寄存器 选择 边沿检测电路 所要检测的边沿跳变。 边沿检测电路 根据 输入线

STM32链接脚本详解

徘徊边缘 提交于 2020-02-18 19:31:38
程序的编译分为四个步骤:预处理、汇编、编译、链接。在开发STM32时,我们只要在IDE中点击编译就能一次性完成这4个步骤,实际上IDE也是要经过这些步骤的,只不过IDE为我们屏蔽了很多细节。 首先我们需要了解一个image文件的构成。image即编译的产物,我们编译STM32生成的bin文件此处称之为image。一个image文件由RO段和RW段组成,RO段包含只读的代码段和常量,RW段包含可读可写的全局变量和静态变量。因为程序刚运行时,RW段还在FLASH中,需要一段程序将这些变量复制到RAM中,STM32的启动文件的__main函数帮我们完成了这一动作。RW段中初始值为0的段为ZI段,image文件无需包含ZI段,因为ZI段包含的是全局或静态初始值为0的变量,只要在程序运行后,将对应的RAM区域清零即可。 这里又涉及到另一个概念:加载地址和运行地址。加载地址是指读取程序的地址,运行地址是指程序运行的入口地址。STM32因为有XIP(executed in place)技术,加载地址和运行地址是一样的,都是0x08000000。简而言之,如果程序在FLASH中运行,加载地址和运行地址是相同的,例如STM32等单片机;如果程序存放在FLASH里,而运行是在RAM里,那么加载地址指向FLASH,运行地址指向RAM,例如跑Linux系统的一些芯片。上面的RW段,其加载地址指向FLASH

stm32大小端模式

人盡茶涼 提交于 2020-02-17 19:56:08
stm32存储方式为小端模式 大端模式:数据高字节保存在内存低地址中,数据低字节保存在内存高地址中 小端模式:数据高字节保存在内存高地址中,数据低字节保存在内存低地址中 0x12345678 来源: CSDN 作者: 一个人的团队 链接: https://blog.csdn.net/weixin_43527214/article/details/104361171

STM32学习笔记5(TIM通用模块定时功能)

吃可爱长大的小学妹 提交于 2020-02-17 11:41:33
原文地址: http://blog.sina.com.cn/s/blog_49cb42490100s6ud.html 1. STM32 的 Timer 简介 STM32中一共有 11个定时器,其中 2个高级控制定时器, 4个普通定时器和 2个基本定时器,以及 2个看门狗定时器和 1个系统嘀嗒定时器。其中系统嘀嗒定时器是前文中所描述的 SysTick,看门狗定时器以后再详细研究。今天主要是研究剩下的 8个定时器。 定时器 计数器分辨率 计数器类型 预分频系数 产生 DMA请求 捕获 /比较通道 互补输出 TIM1 TIM8 16位 向上,向下,向上 /向下 1-65536之间的任意数 可以 4 有 TIM2 TIM3 TIM4 TIM5 16位 向上,向下,向上 /向下 1-65536之间的任意数 可以 4 没有 TIM6 TIM7 16位 向上 1-65536之间的任意数 可以 0 没有 其中 TIM1和 TIM8是能够产生 3对 PWM互补输出的高级登时其,常用于三相电机的驱动,时钟由 APB2的输出产生。 TIM2-TIM5是普通定时器, TIM6和 TIM7是基本定时器,其时钟由 APB1输出产生。由于 STM32的 TIMER功能太复杂了,所以只能一点一点的学习。因此今天就从最简单的开始学习起,也就是 TIM2-TIM5普通定时器的定时功能。 2. 普通定时器 TIM2

最简单的STM32入门教程----闪烁LED

流过昼夜 提交于 2020-02-17 10:22:11
本文讲述的是如何从零开始,使用keil建立一个简单的STM32的工程,并闪烁LED灯,给小白看。 第零步 ,当然首先你得有一个STM32的板子,其IO口上接了一个LED。。。 第一步 ,建立一个文件夹0.0 第二步 ,打开keil,建立工程 在弹出来的对话框中选择你所用的STM32的芯片。 在接下来弹出来的对话框中选择是,这样keil就帮我们建立好了启动文件。 第三步 ,新建一个main.c文件,并添加到工程中。 点击New按钮,建立一个文本文件。 在建立的文本文件中输入C中的main函数 点击保存 保存后,将文件添加到工程中 第四步 ,点击编译 可以看到keil有报错 错误信息为: 没有定义的符号SystemInit ,这是因为在启动文件中有调用SystemInit函数,但是我们没有定义它,如下图: 暂时不用理会上述启动文件中汇编的含义,只需在main.c中添加该函数即可消除该错误。 修改后再编译,程序没有报错了。至此,一个STM32的工程就建立完成了。 第五步 ,将下面的代码复制粘贴 #define PERIPH_BASE ((unsigned int)0x40000000) #define APB2PERIPH_BASE (PERIPH_BASE + 0x10000) #define GPIOA_BASE (APB2PERIPH_BASE + 0x0800) #define

stm32学习笔记05中断和事件

心不动则不痛 提交于 2020-02-16 21:23:31
1、中断和事件的区别: https://www.cnblogs.com/smartjourneys/articles/7363114.html 向量中断和非向量中断还是有点不懂 https://www.cnblogs.com/yanglin1228/archive/2011/02/14/4812067.html 2、中断和异常:   中断与异常有什么区别:   1、中断:系统停止当前正在运行的程序而转向其他服务,可能是因为优先级高的请求   服务了,或者是因为人为安排中断。中断是属于正常现象。   异常:是由于软件错误而引起的   2、中断是 CPU所具备的功能 -- 硬件   异常是软件运行过程中的一种开发过程中没有考虑到的程序错误 -- 软件   3、   1)中断的概念   所谓中断是指 CPU对系统发生的某个事件作出的一种反应: CPU暂停正在执行的程序,保留现场后自动地转去执行相应的处理程序,处理完该事件后再返回断点继续执行被“打断”的程序。    引起中断的事件称为中断源,中断源向 CPU提出进行处理的请求称为中断请求。   2)中断类型   按中断事件来源进行分类,主要有两类:   ( 1)中断。由 CPU以外的事件引起的中断,如 I/O中断、时钟中断、控制台中断等。   ( 2)异常( exception)。来自 CPU的内部事件或程序执行中的事件引起的过程。如由于

stm32学习之路定时器的使用

流过昼夜 提交于 2020-02-16 13:08:13
上次讲了滴答定时器,这个我们来说下stm32 的其他定时器,分别有三种, 基本定时器,通用定时器和 高级定时器,在STM32F1 的定时器中分别由2 个基本定时器(TIM6、 TIM7) 、 4 个通用定时器(TIM2-TIM5) 和 2 个高级定时器(TIM1、 TIM8) 组成(这些资料也有),这接进入主题吧,这次我们讲的是stm32 的通用定时器(从简单的入门). 通用定时器包含一个 16 位自动重载计数器(CNT) ,就是可以计数2^16次,还有其计数的频率可以由分频系数 PSC 来控制,PSC的取值范围为1~65535,定时器的能实现什么功能就不说了,也找的到,这次通过定时器来控制led亮和灭。 开始之前我们要添加stm32f10x_tim.c 库文件,定时器器的所需要的配置函数都在这个库里面。 在stm中很多操作都是要先时钟使能,以通用定时器TIM3为例子,首先是通用定时器是挂载在APB1总线上,所以可以使用 APB1 总线时钟使能函数来使能 TIM3, 调用的库函数如下: RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);//使能 TIM3钟 其次就是初始化时钟(配置时钟)调用的函数是 void TIM_TimeBaseInit(TIM_TypeDef *TIMx,TIM_TimeBaseInitTypeDef *

基于STM32之UART串口通信协议(一)详解

99封情书 提交于 2020-02-12 02:04:44
UART —— Universal Asynchronous Receiver/Transmitter —— 通用异步收发器。 一、UART简介 UART是异步串口通信协议, 工作原理是将传输数据的每个字符一位接一位地传输,它能将要传输的资料在串行通信与并行通信之间加以转换,能够灵活地与外部设备进行全双工数据交换。 USART是UART的升级版,其支持同步模式,用法与UART相同 二、概念辨析 ------------------------------------UART COM口 串口 USB口 RS - 232 TTL--------------------------------------------- UART,在硬件上表现为串口收发的逻辑电路,可被集成为独立地模块化芯片 COM口,串行通信端口,有时也称为串口,是一种连接器的结构,这里区别于USB的“通用串行总线”和硬盘的“SATA”,串口的接口标准规范和总线标准规范是 RS-232    常见的有两种物理标准,D型9针插头,和4针杜邦头, USB口:通用串行总线,和串口完全是两个概念。虽然也是串行方式通信,但由于USB的通信时序和信号电平都和串口完全不同,因此和串口没有任何关系。USB是高速的通信接口,用于PC连接各种外设,U盘、键鼠、移动硬盘、当然也包括“USB转串口”的模块。(USB转串口模块