嵌入式专题研究2:系统时钟和定时器和看门狗

发布时间 2023-10-09 20:24:11作者: zxkic

时钟系统:

构成:

1.振荡器——脉搏

  RC振荡器

  晶体振荡器

  四种:HSE,HSI,LSE,LSI

2.唤醒定时器

3.PLL倍频器

4.各种分频器

 可以通过stm32cubemx进行时钟配置,但是在SystemClock_Config()函数前,在启动文件中有默认的时钟配置。

  while (1)
  {
        HAL_GPIO_WritePin(GPIOC,LED1_Pin|LED2_Pin|LED3_Pin|LED4_Pin,GPIO_PIN_RESET);
        mydelay(1000);
        HAL_GPIO_WritePin(GPIOC,LED1_Pin|LED2_Pin|LED3_Pin|LED4_Pin,GPIO_PIN_SET);
        mydelay(1000);

定时器:能够实现定时和计数

 HAL_Delay()的实现:

使用hal库时,发现__weak修饰符:该修饰符的函数被称为弱函数,用户可以在用户文件中重新定义一个同名函数,最终编译器编译的时候,会选择用户定义的函数,如果用户没有重新定义这个函数,那么编译器就会执行__weak 声明的函数,并且编译器不会报错。

缺陷:在中断服务函数中使用HAL_Delay会引起混乱,因为HAL_Delay是通过中断方式实现的,而Systick的中断一般操作系统优先级最低,所以在中断中运行HAL_Delay会导致死锁的现象。

定时器:

 APB1和APB2上挂了很多不同的定时器,需要注意。

计时时间为1/(TIM * CLK/(PSC+1))*(ARR+1)

所以定时器需要配置PSC预分频器和自动重载寄存器ARR。

输入捕获和输出比较:输入捕获可以检测外部引脚电平的变化,输出比较用来控制一个输出波形。

实验:利用基础定时器实现定时1m中断,并在中断处理函数中打印输出字符。

stm32f103zet6的APB1和APB2都是72mhz。

使能定时器中断。

高级定时器:

定时器通道:

查看了手册,跟我用的pz6806l的led对应的是TIM3的ch1-ch2,复用的管脚为PC6-PC7。

 输入捕获:外部管脚,可用于测量频率或者电平持续时间。

实验:捕获按键按下后低电平持续的时间

看门狗:

独立看门狗IWDG:监控系统是否出现故障,将系统复位。

关键字寄存器IWDG_KR:喂狗,修改重装载寄存器,启动IWDG

采用LSI时钟,在低电压情况下也能工作。

实验:按下按钮就喂狗,不按下则复位

if(HAL_GPIO_ReadPin(KEY1_GPIO_Port,KEY1_Pin)==GPIO_PIN_RESET){
            HAL_IWDG_Refresh(&hiwdg);
}

窗口看门狗WWDG:检测软件故障。

可以配置时间窗,检测应用程序非预期中的运行流程。

复位条件:1.自减计数器小于0x40

      2. 喂狗时间大于上窗口的值

因此必须在时间窗口中喂狗,其余时间喂狗均会复位。