stm32f407VET6 系统学习 day05 复位, 时钟,看门狗, 滴答定时器

news2025/1/22 18:07:31

1. 复位

1.三种类型的复位,系统复位,电源复位,备份复位;

2.复位作用:让程序从头开始运行,恢复到一开始运行的状态



2.stm32 时钟源

1. 5个是时钟源

1.HSI高速内部时钟:RC振荡器,频率为16MHz,精度不高。可以作为系统钟或PLL时钟输入

2.HSE高速外部时钟:可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~26MHz
3.LSI低速内部时钟,RC振荡器(电阻+电容),频率32kHz,提供低功耗时钟。主要供独立看门狗。4.LSE是低速外部时钟,接频率为32.768kHz的石英晶体。可以作为RTC时钟源
5.PLL为锁相环倍频输出。


2.系统时钟


3.ppL


4.

5.

6.代码:

#include "myrcc.h"
#include "stm32f4xx_rcc.h"

void Myrccconfig(void)
{
	//第一步:复位RCC时钟树
	RCC_DeInit();
	
	//第二步:使能HSE时钟作为STM32输入时钟源
	RCC_HSEConfig(RCC_HSE_ON);

	//第三步:等待HSE就绪,未就绪一直等待,就绪跳出循环
    while(RCC_GetFlagStatus(RCC_FLAG_HSERDY) != SET);
	
	//第四步:设置flash,所有程序中必须的用法.位置:RCC初始化子函数里面,时钟起振之后
	FLASH_PrefetchBufferCmd(ENABLE);//开启FLASH预读缓冲功能
	FLASH_InstructionCacheCmd(ENABLE); //使能指令缓冲
	FLASH_DataCacheCmd(ENABLE);  //使能数据缓冲
	FLASH_SetLatency(FLASH_Latency_5);	//延时5个时钟
    
	//第五步:配置生成HCLK时钟的分频系数(1)、配置生成PCLK1和PCLK2的分频系数(4和2)
	RCC_HCLKConfig(RCC_SYSCLK_Div2); // AHB
    RCC_PCLK1Config(RCC_HCLK_Div4);
    RCC_PCLK2Config(RCC_HCLK_Div2);
		
	//第六步:配置PLL的输入时钟源为HSE,以及PLLM、PLLN、PLLP、PLLQ等分频系数
	RCC_PLLConfig(RCC_PLLSource_HSE,8,336,2,7);
    RCC_PLLCmd(ENABLE);//pll使能;
    while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) != SET);
    
    RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
    while(RCC_GetSYSCLKSource() != 0x08);
}

 



3.stm32  滴答 定时器

1.定时器工作模式
定时模式:对内部周期性脉冲进行计数

计数模式∶对外部脉冲进行计数
计数方式分为︰递增计数和递减计数2种


2. 定时器分类

按核内、核外分类
核内定时器:   systick
外设定时器:   常规定时器(基本、通用和高级定时器)            特定应用定时器(低功耗定时器、看门狗、实时时钟)


按计数器位宽分
16位定时器:     通用定时器(GPTIM)、   高级定时器(ATIM)

24位定时器:   systick
32位定时器:    STM32的TIM2和TIM5


3.systick滴答定时器概念
系统节拍时钟(SysTick)是一个简单的系统时钟节拍计数器。通常用作嵌入式操作系统的系统节拍定时。当单片机程序设计中不需要操作系统时,SysTick通常作为普通定时器,或延时函数来使用。


Systick定时器,是一个简单的定时器,对于CM4内核芯片,都有Systick定时器。

SysTick定时器被捆绑在NVIC(中断)中,用于产生SYSTICK异常(异常号:15)。
使用AHB总线时钟作为输入时钟源 

—般使用sYSTICK系统定时器实现系统延时函数


4.系统定时器工作方式
Systick是24位的系统定时器,是递减计数模式,计数初始值由STK_LOAD寄存器设置。
换言之∶系统定时器Systick从 STK_LOAD寄存器设置的计数初始值开始递减计数,每经过1个systick工作时钟周期就递减1,直到递减到0,产生系统定时器中断,同时将STK_LOAD寄
存器的值重新装载,继续递减计数。

注意:systick工作时钟周期的生成;
SYSTICK定时器与TIMx定时器的不同点是:TIMx定时器处于M4核外部,使用APBx总线时钟作为输入时钟源;

而SYSTICK系统定时器在M4核内部,使用AHB总线时钟作为输入时钟源。
 


5.systick滴答定时器---寄存器(参考内核文件)


6.控制和状态寄存器CTRL


7. 控制和状态寄存器CTRL
1.ENABLE位被置1,表示SYSTICK计数使能或计数开始。此时STK_LOAD寄存器中的值将被加载到STK_VAL寄存器(即: SYSTICK定时器的计数寄存器),然后开始递减计数。


2.TICKINT位被置1,表示SYSTICK计数到0后,将产生SYTICK中断。

3.CLKSOURCE位设置SYSTICK的输入时钟源。
如果该位被置0,表示HCLK/8作为SYSTICK的输入时钟源;

如果该位被置1,表示HCLK作为SYSTICK的输入时钟源。

4.COUNTFLAG位。
当SYSTICK定时器计数到0时,COUNTFLAG位被硬件置1;当向STK_VAL寄存器写入任何值时,该位被自动清0。


8.编码流程

1、确定时钟源

2、重装数值

3、清空计数器

4、启动计时器

5、查询是否时间到

6、关闭计时器
(系统定时器使用有查询法和中断法,前者只可以用寄存器)


9.代码:

头文件:

#ifndef  __MYSYSTICK_H__
#define  __MYSYSTICK_H__
#include "stm32f4xx_rcc.h"
void delay_us(u8 us);
void delay_ms(u8 ms);
void sys_init(u8 syst);
    
#endif


.cpp 文件

#include "mysystick.h"
/*
1、确定时钟源
2、重装数值
3、清空计数器
4、启动计时器
5、查询是否时间到
6、关闭计时器
*/

int firstVal = 0;
void sys_init(u8 syst)
{
    //第三位设置成0  HCLK    
    SysTick->CTRL &=  ~(1<<2);    //设置时钟源
    firstVal = syst/8;      //设置1us延时的起始值。
}

// 初始值的计算方式:从初始值开始减1,减到0则溢出,时间到了。  
// 延时时间 =(每次滴答的时间*次数);
// 如果需要延时1us ,请问需要设置多少的起始值呢: 
void delay_ms(u8 ms)
{
    int count = 0;
    //1. 关闭定时器 (CTRL 最后一位设置成0)
    SysTick->CTRL &= ~(1<<0) ;
    //2、重装数值    (load = ms?)
    SysTick->LOAD = ms*firstVal*1000;
   // 3、清空计数器    (val)
    SysTick->VAL = 0X00;
    //4、启动计时器
     SysTick->CTRL |= 1 ;
    //5、查询是否时间到    (ctrl寄存器最高位是1)没到时间一直查(while)
     do
     {
        count = SysTick->CTRL;
     }while(!(count & (1<<16))&&(count&&(1<<0)));
    //6、关闭计时器
     SysTick->CTRL &= ~(1<<0) ;
     SysTick->VAL = 0X00;
    //
  
}


void delay_us(u8 us)
{
    int count = 0;
    //1. 关闭定时器 (CTRL 最后一位设置成0)
    SysTick->CTRL &= ~(1<<0) ;
    //2、重装数值    (load = ms?)
    SysTick->LOAD = us*firstVal;
   // 3、清空计数器    (val)
    SysTick->VAL = 0X00;
    //4、启动计时器
     SysTick->CTRL |= 1 ;
    //5、查询是否时间到    (ctrl寄存器最高位是1)没到时间一直查(while)
     do
     {
        count = SysTick->CTRL;
      }while(!(count & (1<<16))&&(count&&(1<<0)));
    //6、关闭计时器
     SysTick->CTRL &= ~(1<<0) ;
     SysTick->VAL = 0X00;
  
}


 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/116001.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

npm中dependencies与devDependencies的区别

这个问题的出现是我下载npm包中的依赖文件安装错地方了&#xff0c;导致上线项目有问题&#xff0c;顺便一起来看看它们的区别。 一、前言 说白了就是当初学的时候太菜&#xff0c;没注意到它们的区别&#xff0c;也没去查明白。哈哈哈 二、dependencies与devDependencies的区别…

【人工智能与机器学习】——深度学习(学习笔记)

&#x1f4d6; 前言&#xff1a;长期以来&#xff0c;图像识别技术一直是人工智能研究领域的难题。近年来&#xff0c;随着算力的提升、物联网与大数据的出现、机器学习算法的快速发展&#xff0c;科学家们终于找到了有效的方法来实现图像识别&#xff0c;这就是基于人工神经网…

【OpenCV-Python】教程:8-2 图像修复 Image Inpainting

OpenCV Python 图像修复 【目标】 去除小噪声和笔画等&#xff1b; 【理论】 大多数人家里都会有一些旧照片&#xff0c;上面有一些黑点&#xff0c;一些笔画等。你想过把它修复回来吗?我们不能简单地在油漆工具中删除它们&#xff0c;因为它只会用白色结构取代黑色结构&a…

代码随想录拓展day4 143.重排链表;141. 环形链表;面试题 02.07. 链表相交

代码随想录拓展day4 143.重排链表&#xff1b;141. 环形链表&#xff1b;面试题 02.07. 链表相交 关于链表的一些应用&#xff0c;基本都用到了快慢指针的思路。对于单链表来说&#xff0c;确定边界&#xff0c;也就是遍历时的终止条件非常重要。 143.重排链表 143. 重排链表…

Web前端105天-day65-ToolChain

ToolChain01 目录 前言 一、Webpack 二、指南 总结 前言 ToolChain01学习开始 一、Webpack 官网&#xff1a;webpack 浏览器仅支持: html css 和 js 三种语言实际开发中: 会使用到其他的一些语言, 例如 TS, sass, scss 等.... 这些语言开发起来更加方便快捷, 但是浏览器不…

pinia 笔记

1、安装 npm i pinia -S2、创建store基本结构 1、在src下创建store文件夹并创建app.js文件&#xff0c;同时编写基本代码结构 // 引入实例化store的函数 import { defineStore } from "pinia";// 实例出一个名为app的store,那appStore是什么&#xff1f;它代表当前…

【SpringMVC】SpringMVC实现文件上传

1.一般的文件上传 1.1 文件上传的必要前提 form 表单的 enctype 取值必须是&#xff1a;multipart/form-data(默认值是:application/x-www-form-urlencoded) enctype:是表单请求正文的类型 method 属性取值必须是 Post 提供一个文件选择域<input type"file" /&…

代码随想录二刷day2

代码随想录复习 文章目录代码随想录复习209.长度最小的子数组&#xff08;滑动窗口&#xff09;76.最小覆盖子串904.水果成篮59.螺旋矩阵2螺旋矩阵1209.长度最小的子数组&#xff08;滑动窗口&#xff09; 209.长度最小的子数组 复习一下滑动窗口&#xff0c;滑窗的复杂度还是…

MySQL时间查询讲解+实战教学(查询本月、上个月、下个月等等的数据)

MySql时间查询 MySql查询当前时间 查询 年-月-日 时:分:秒 select now() 查询 年-月-日 select DATE(CURDATE()) 查询 年-月 select date_format(NOW(),%Y-%m) 查询当前年 select YEAR(CURDATE()) 查询当前月 select MONTH(CURDATE()) 查询当前日 select DAYOFMONTH(NOW()) 查…

【论文简述】Efficient Multi-view Stereo by Iterative Dynamic Cost Volume(CVPR 2022)

一、论文简述 1. 第一作者&#xff1a;Shaoqian Wang、Bo Li 2. 发表年份&#xff1a;2022 3. 发表期刊&#xff1a;CVPR 4. 关键词&#xff1a;MVS、深度学习、动态代价体、GRU、迭代优化 5. 探索动机&#xff1a;由于正则化步骤需要较多的GPU内存和处理时间&#xff0c…

大话JMeter4|不同的并发数可以自动化做压测吗?

1080709 23.5 KB 上节课爱画漫画的小哥哥用漫画形式向大家展示了JMeter的进阶用法&#xff1a;如何搭建InfluxDB&#xff0c;使用更炫酷的Grafana。 看到很多小伙伴觉得看的不过瘾&#xff0c;在强烈的催促下&#xff0c;小哥哥的新文章又出来了。这次小哥哥又给我们带来怎样的…

vue + nodejs + npm

node.js下载 1、如图所示&#xff1a; 2、建立node_cache、node_global文件夹&#xff1a; 然后运行以下2条命令 npm config set prefix “D:\node-v14.15.0-win-x64\node_global” npm config set cache “D:\node-v14.15.0-win-x64\node_cache” 执行npm list -global查看&…

编译原理——求短语、直接短语(简单短语)、素短语、句柄

先介绍一下短语、直接短语&#xff08;简单短语&#xff09;、素短语、句柄怎么求&#xff1a;这个图是核心 然后通过一些例题&#xff0c;实战一下&#xff1b; 根据上面介绍的概念、求法&#xff0c;应用一下即可&#xff1b; 例题1 短语&#xff1a;注意对于每一个子树&a…

数字孪生技术助力高炉数字化建设的可行性

随着数字孪生等新一代信息技术的快速发展&#xff0c;数字化转型已成为企业重塑竞争优势的关键举措。依托数字孪生技术&#xff0c;对炼铁高炉进行物联网、数字化信息系统建设&#xff0c;实现了高炉运行状态的数字化监测与预警&#xff0c;数字孪生系统凭借在数字化、模型化、…

利用WordPress搭建属于自己的网站

怎么用WordPress给自己搭建了一个网站&#xff1f;可能很多人都想拥有属于自己的网站&#xff0c;这篇文章就找你怎么利用WordPress搭建属于自己的网站。如果你也正好有搭建个人网站的想法&#xff0c;那么本文会给你一个参考&#xff0c;我尽量写的比较详细&#xff0c;给自己…

【Ctfer训练计划】——(五)

作者名&#xff1a;Demo不是emo 主页面链接&#xff1a;主页传送门创作初心&#xff1a;舞台再大&#xff0c;你不上台&#xff0c;永远是观众&#xff0c;没人会关心你努不努力&#xff0c;摔的痛不痛&#xff0c;他们只会看你最后站在什么位置&#xff0c;然后羡慕或鄙夷座右…

Java on VS Code 11月更新|VS Code Java 开发者超200万!

作者&#xff1a;Nick Zhu - Senior Program Manager, Developer Division at Microsoft 排版&#xff1a;Alan Wang 大家好&#xff0c;我们很高兴与大家分享一个好消息&#xff0c;现在 Visual Studio Code 上已有超过 200 万 Java 开发者&#xff0c;这离不开长期以来社区以…

JavaSE笔记——异常、断言

文章目录前言一、处 理 错 误1.异常分类2.声明受查异常3.如何抛出异常4.创建异常类二、捕获异常1.捕获异常2.捕获多个异常3.再次抛出异常与异常链4.finally 子句5.带资源的 try 语句三、使用断言1.断言的概念2.启用和禁用断言3.使用断言完成参数检查总结前言 在现实世界中却充…

由浅入深学安全-1

由浅入深学安全 常用术语解析 肉鸡 肉鸡也称傀儡机&#xff0c;是指可以被黑客远程控制的机器。 比如用灰鸽子等诱导客户点击或者电脑被黑客攻破或用户电脑有漏洞被种植了木马&#xff0c;黑客可以随意操纵它并利用它做任何事情。 一句话木马 一句话木马主要用来配合菜刀…

【Java系列】还在为Java运算符而烦恼吗?一篇文章带你解答心中烦恼

返回主篇章         &#x1f447; 【Java】才疏学浅小石Java问道之路 Java基本运算符1. 算数运算符分类运算法则2. 关系运算符分类注意项3. 逻辑运算符分类运算法则4. 短路逻辑运算符分类运算法则5. 赋值运算符拓展6. 三元运算符格式运算法则7. 自增自减运算符分类使用…