STM32F103MINI单片机学习笔记4

上次我说外部中断差点给我整不会了,所以这次我先带大家简单地看看外部中断的一些知识。

 

 中断函数本身具有优先级,就像C语言的那些运算符一样。当很多个中断在进行的时候,为了避免冲突,我们需要设定优先级,这样才能让中断的执行拥有先后顺序,避免程序混乱导致出错。

 

 我们可以对优先级进行设置,这样可以保证我们程序运行的效果与稳定性。

中断优先级的设置可以通过寄存器设置

 

 这里是串口的配置步骤,简单来看是这样配置的。

但是如果要完整地写完一个程序,需要调用多个函数,然后进行配置,还是略微麻烦一点的——不过外部中断确实就是这么个东西,不好写,但是很管用.

接下来咱们看看 看门狗 的知识

STM32 的独立看门狗由内部专门的 40Khz 低速时钟驱动,即使主时钟发生故障,它也仍然
有效。这里需要注意独立看门狗的时钟是一个内部 RC 时钟,所以并不是准确的 40Khz ,而是
30~60Khz 之间的一个可变化的时钟,只是我们在估算的时候,以 40Khz 的频率来计算,看
门狗对时间的要求不是很精确,所以,时钟有些偏差,都是可以接受的。

手册里是这样介绍的 

 这个是原理的讲解

代码部分我们这样来写

wdg.c 里面的代码如下:
#include "wdg.h"
//初始化独立看门狗
//prer:分频数:0~7(只有低 3 位有效!)
//分频因子=4*2^prer.但最大值只能是 256!
//rlr:重装载寄存器值:低 11 位有效.
//时间计算(大概):Tout=((4*2^prer)*rlr)/40 (ms).
void IWDG_Init(u8 prer,u16 rlr) 
{
IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable); 
//使能对寄存器 IWDG_PR 和 IWDG_RLR 的写操作
IWDG_SetPrescaler(prer); //设置 IWDG 预分频值:设置 IWDG 预分频值为64
IWDG_SetReload(rlr); //设置 IWDG 重装载值
IWDG_ReloadCounter(); //按照 IWDG 重装载寄存器的值重装载 IWDG 计数器
IWDG_Enable(); //使能 IWDG}
//喂独立看门狗
void IWDG_Feed(void)
{
IWDG->KR=0XAAAA;//reload 
}

接下来就是主函数里的内容了

int main(void)
{
delay_init(); //延时函数初始化
 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 设置中断优先级分组 2 
uart_init(9600); //串口初始化为 9600
LED_Init(); //初始化与 LED 连接的硬件接口
 KEY_Init(); //按键初始化
delay_ms(300); //让人看得到灭
IWDG_Init(4,625); //与分频数为 64,重载值为 625,溢出时间为 1s 
LED0=0; //点亮 LED0
while(1)
{
if(KEY_Scan(0)==WKUP_PRES)IWDG_Feed();//如果 WK_UP 按下,则喂狗
delay_ms(10);
};
}

接下来下载验证即可。

这次的学习就到这里

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值