stm32之HAL库开发(二)

HAL 库

看门狗

  • 独立看门狗

    由专用的低速时钟(LSI)驱动(40kHz),即使主时钟发生故障它仍有效。
    独立看门狗适合应用于需要看门狗作为一个在主程序之外 能够完全独立工作,并且对时间精度要求低的场合。

  • 窗口看门狗

    由从 APB1 时钟(36MHz)分频后得到时钟驱动。通过可配置的时间窗口来检测应用程序非正常的过迟或过早操作。
    窗口看门狗最适合那些要求看门狗在精确计时窗口起作用的程序。

独立看门狗

  • 使用范畴:

    出现程序跑飞

    出现死循环

    睡眠,休眠不合理

    外部主晶振坏掉

工程建立

  • 设置 RCC:

    设置 HSE 为外部时钟

    1

    2

  • 配置 IWDG:

    IWDG 时钟预分频系数 4 分频
    计数器重装载值 4095 RLR

    3

  • 超出(溢出)时间计算:

    Tout=((4×2^PRER) ×RLR)/LSI 时钟频率

  • 对应不同预分频系数的 PRER 值:

    4

HAL 库 独立看门狗 函数库

HAL_IWDG_Init(IWDG_HandleTypeDef *hiwdg) 看门狗初始化函数

HAL_IWDG_Refresh(IWDG_HandleTypeDef *hiwdg) 喂狗函数

举例:HAL_IWDG_Refresh(&hiwdg);

WWDG - 窗口看门狗

窗口看门狗跟独立看门狗一样,也是一个递减计数器不断的往下递减计数,
当减到一个固定值 0x3F 时还不喂狗的话,产生复位,
这个值叫窗口的下限,是固定的值,不能改变。

其喂狗时间是在一个有上下限的范围内(计数器减到某个值~计数器减到 0x3F),
在这个范围内才可以喂狗,可以通过设定相关寄存器,设定其上限时间(但是下限是固定的 0x3F)

5

1 计数器的初始值
2 是我们设置的上窗口(W[6:0]值)
3 是下窗口值(0x3F)

计数器的值只有在 2 和 3 之间(上窗口和下窗口之间)才可以喂狗

  • 窗口看门狗中断

    窗口看门狗可以使能中断,如果使能了提前唤醒中断,喂狗函数没有生效,
    那么在计数器由减到 “0x40 (0x3f+1)“ 的时候,会先进入中断,之后才会复位,

    可以在中断里面喂狗

  • 使用范畴:

    软件逻辑出现错误

    死机,死循环

    软件不按预期代码执行

    软件复位需要数据恢复

工程配置

使能窗口看门狗中断

6

7

其余配置和独立看门狗相同

HAL 库 窗口看门狗 函数库

HAL_WWDG_Init(WWDG_HandleTypeDef *hwwdg) 看门狗初始化

HAL_WWDG_Refresh(WWDG_HandleTypeDef *hwwdg) 喂狗

HAL_WWDG_IRQHandler(WWDG_HandleTypeDef *hwwdg) 看门狗中断处理函数

__weak HAL_WWDG_EarlyWakeupCallback(hwwdg); 看门狗中断回调函数

定时器

定时器基本概念

  • SMT32F1 系列共有 8 个定时器:

    高级定时器:TIM1、TIM8 (APB2) (可同时产生 7 路输出)

    通用定时器:TIM2 - TIM5 (APB1)

    基本定时器:TIM6、TIM7 (不可以产生 PWM 输出)

1

  • 向上计数模式:

    计数器从 0 计数到自动加载值(TIMx_ARR),然后重新从 0 开始计数并且产生一个计数器溢出事件。

  • 向下计数模式:

    计数器从自动装入的值(TIMx_ARR)开始向下计数到 0,然后从自动装入的值重新开始,
    并产生一个计数器向下溢出事件。

  • 中央对齐模式(向上/向下计数):

    计数器从 0 开始计数到自动装入的值-1,产生一个计数器溢出事件,然后向下计数到 1 ,
    并且产生一个计数器溢出事件;然后再从 0 开始重新计数。

2

工程创建

待写

ADC

ADC 基本概念

指模/数转换器或者模拟/数字转换器。是指将连续变量的模拟信号转换为离散的数字信号的器件。

典型的模拟数字转换器将模拟信号转换为表示一定比例电压值的数字信号。

简单地说就是将模拟电压值转换成对应的肉眼可读数值

ADC 的转换模式

  • 单次转换模式:
    ADC 只执行一次转换

  • 连续转换模式:
    转换结束之后马上开始新的转换

  • 扫描模式:
    ADC 扫描被规则通道和注入通道选中的所有通道,在每个组的每个通道上执行单次转换。

    在每个转换结束时,这一组的下一个通道被自动转换。
    如果设置了 CONT 位(开启了连续转换模式),转换不会在选择组的最后一个通道上停止,而是再次从选择组的第一个通道继续转换。

  • 间断模式:
    触发一次,转换一个通道,再触发,再转换。

    在所选转换通道循环,由触发信号启动新一轮的转换,直到转换完成为止。

工程创建

  • 设置高速外部时钟 HSE 选择外部时钟源, 详细见之前的工程创建

  • 设置 ADC 引脚, 只有设置了 ADC 的引脚,才能够设置 ADC 的时钟分频