STM32 | Systick定时器(第四天源码解析)

STM32 | Systick定时器(第四天)
STM32 | STM32F407ZE中断、按键、灯(续第三天)

1、参考delay_us代码,完成delay_ms的程序

定时器频率换算单位:1GHZ=1000MHZ=1000 000KHZ = 1000 000 000HZ

定时器定时时间:计数个数/f(频率) 或者 (1/f(频率))*计数的个数

500/1MHZ = 500/1000 000 = 0.0005s = 0.5ms = 500us

在1MHZ下,1us计1个数;在100MHZ下,1us计100个数;


01 delay延时项目

# led.h

#ifndef __LED_H#define __LED_H#include "stm32f4xx.h"#define LED0_ON    GPIO_ResetBits(GPIOF, GPIO_Pin_9)#define LED0_OFF  GPIO_SetBits(GPIOF, GPIO_Pin_9)void Led_Init(void);#endif

# led.c

#include "led.h"/*********************************引脚说明:LED0 -- PF9LED1 -- PF10LED2 -- PE13LED3 -- PE14**********************************/void Led_Init(void){  GPIO_InitTypeDef  GPIO_InitStruct;  //使能GPIOE组时钟  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE);      //使能GPIOF组时钟  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);    GPIO_InitStruct.GPIO_Pin  = GPIO_Pin_9|GPIO_Pin_10;    //引脚9 10  GPIO_InitStruct.GPIO_Mode  = GPIO_Mode_OUT;  //输出模式  GPIO_InitStruct.GPIO_OType  = GPIO_OType_PP;  //推挽输出  GPIO_InitStruct.GPIO_PuPd  = GPIO_PuPd_UP;    //上拉  GPIO_InitStruct.GPIO_Speed  = GPIO_Speed_50MHz; //速度   GPIO_Init(GPIOF, &GPIO_InitStruct);  GPIO_InitStruct.GPIO_Pin  = GPIO_Pin_13|GPIO_Pin_14;    //引脚13 14  GPIO_InitStruct.GPIO_Mode  = GPIO_Mode_OUT;  //输出模式  GPIO_InitStruct.GPIO_OType  = GPIO_OType_PP;  //推挽输出  GPIO_InitStruct.GPIO_PuPd  = GPIO_PuPd_UP;    //上拉  GPIO_InitStruct.GPIO_Speed  = GPIO_Speed_50MHz; //速度   GPIO_Init(GPIOE, &GPIO_InitStruct);    GPIO_SetBits(GPIOF, GPIO_Pin_9);  GPIO_SetBits(GPIOF, GPIO_Pin_10);  GPIO_SetBits(GPIOE, GPIO_Pin_13);  GPIO_SetBits(GPIOE, GPIO_Pin_14);}

# key.h

#ifndef __KEY_H#define __KEY_H#include "stm32f4xx.h"void Key_Init(void);#endif

# key.c

#include "key.h"/*********************************引脚说明:KEY0--PA0**********************************/void Key_Init(void){  GPIO_InitTypeDef  GPIO_InitStruct;  //使能GPIOA组时钟  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);  GPIO_InitStruct.GPIO_Pin  = GPIO_Pin_0;    //引脚0  GPIO_InitStruct.GPIO_Mode  = GPIO_Mode_IN;    //输入模式  GPIO_InitStruct.GPIO_PuPd  = GPIO_PuPd_UP;    //上拉  GPIO_Init(GPIOA, &GPIO_InitStruct);  }

# exti.h

#ifndef __EXTI_H#define __EXTI_H#include "stm32f4xx.h"void Exti_PA0_Init(void);#endif

# exti.c

#include "exti.h"/*********************************引脚说明:KEY0--PA0(选择下降沿触发)**********************************/void Exti_PA0_Init(void){  GPIO_InitTypeDef  GPIO_InitStruct;  EXTI_InitTypeDef  EXTI_InitStruct;  NVIC_InitTypeDef  NVIC_InitStruct;  //使能SYSCFG及GPIOA时钟:  RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);  //使能GPIOA组时钟  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);  //初始化IO口为输入。  GPIO_InitStruct.GPIO_Pin  = GPIO_Pin_0;    //引脚0  GPIO_InitStruct.GPIO_Mode  = GPIO_Mode_IN;    //输入模式  GPIO_InitStruct.GPIO_PuPd  = GPIO_PuPd_UP;    //上拉  GPIO_Init(GPIOA, &GPIO_InitStruct);    //设置IO口与中断线的映射关系。  SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource0);  EXTI_InitStruct.EXTI_Line  = EXTI_Line0;      //中断线0  EXTI_InitStruct.EXTI_Mode  = EXTI_Mode_Interrupt;  //中断模式  EXTI_InitStruct.EXTI_Trigger= EXTI_Trigger_Falling;  //下降触发  EXTI_InitStruct.EXTI_LineCmd= ENABLE;        //中断使能  //初始化线上中断,设置触发条件等。  EXTI_Init(&EXTI_InitStruct);  NVIC_InitStruct.NVIC_IRQChannel            = EXTI0_IRQn;     //中断通道,可在stm32f4xx.h文件当中查找  NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority  = 1;        //抢占优先级  NVIC_InitStruct.NVIC_IRQChannelSubPriority      = 1;        //响应优先级  NVIC_InitStruct.NVIC_IRQChannelCmd          = ENABLE;      //通道使能  //配置中断分组(NVIC),并使能中断。  NVIC_Init(&NVIC_InitStruct);}void delays(int n){  int i,j;  for(i=0; i<n; i++)    for(j=0; j<30000; j++);}/***************************************************************1、中断服务函数是满足条件后,CPU自行执行的函数不需要主动调用2、中断服务函数是不能传递值与返回值3、STM32的中断服务函数名可在startup_stm32f40_41xxx.s中查找****************************************************************///编写中断服务函数void EXTI0_IRQHandler(void){  //判断标志位是否1  if(EXTI_GetITStatus(EXTI_Line0) == SET)  {    if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0) == Bit_RESET)    {      //延时一段时间      delays(15);      if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0) == Bit_RESET)      {        GPIO_ToggleBits(GPIOF, GPIO_Pin_9);      }      }  }  //清空中断线0  EXTI_ClearITPendingBit(EXTI_Line0);    

# delay.h

#ifndef __DELAY_H#define __DELAY_H#include "stm32f4xx.h"void Delay_Init(void);void delay_us(u32 nus);void delay_ms(u32 nms);

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

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

相关文章

C++面向对象三大特征-----继承(详细版)

目录 继承 一、继承的基础介绍 普通版网页和继承版网页的区别 语法 二、继承方式 三种继承方式 三、继承中的对象模型 四、继承中构造和析构函数 五、继承同名成员的处理方式 访问同名成员&#xff1a; 作用域写法&#xff1a; 六、继承同名静态成员的处理方式 访问…

Python None 值

Python None 值 References 在 Python 中有一个值称为 None&#xff0c;它表示没有值。None 是 NoneType 数据类型的唯一值。就像布尔值 True 和 False 一样&#xff0c;None 必须大写首字母 N。 如果你希望变量中存储的东西不会与一个真正的值混淆&#xff0c;这个没有值的值…

Qt播放音乐代码示例

主界面 点击play按钮播放或暂停音乐&#xff0c;拖动进度条&#xff0c;音乐对应播放。 QWidget window;QPushButton* playButton new QPushButton("Play");// Qt 播放音乐// 创建 QMediaPlayer 对象QMediaPlayer* player new QMediaPlayer;// 指定音频文件的路径…

MySQL B+树索引 和 Redis 中跳表索引的区别

一、MySQL B树索引 和 Redis 中跳表索引 在 MySQL 中常用的索引是 B树索引&#xff0c;而 Redis 中&#xff0c;例如 zset 使用的的是跳表索引&#xff0c;两者有什么区别呢&#xff0c;MySQL 为什么不使用 跳表 呢&#xff1f;或者说 Redis 中为什么不使用 B树 呢&#xff1f…

AT25HP256/512

关于AT25HP256/512系列串行EEPROM&#xff08;电气可擦可编程只读存储器&#xff09;的数据手册&#xff0c;由Atmel公司发布。这些存储器通过串行外设接口&#xff08;SPI&#xff09;与微控制器等设备通信&#xff0c;并提供高可靠性的数据存储解决方案。以下是文档内容的翻译…

章节10实验--Ubuntu18.04 Qt MySQL libqsqlmysql.so

前言: 内容参考《操作系统实践-基于Linux应用与内核编程》一书的示例代码和教材内容&#xff0c;所做的读书笔记。本文记录再这里按照书中示例做一遍代码编程实践加深对操作系统的理解。 引用: 《操作系统实践-基于Linux应用与内核编程》 作者&#xff1a;房胜、李旭健、黄…

golang 对接第三方接口 RSA 做签(加密) 验签(解密)

一、过程 1.调用第三方接口前&#xff0c;一般需要按规则将参数按key1value1&key2value2 阿斯克码排序,sign参数不参与加密 2.将排序并连接好的参数字符串通过我方的私钥证书&#xff08;.pem&#xff09;进行加密得到加密串&#xff0c;当然加密得到的是 []byte 字节流&…

变量赋值篇

文章目录 变量赋值增量赋值多重赋值多元赋值合法的标识符 变量赋值 在Python中&#xff0c;变量赋值是一个简单的操作&#xff0c;你可以使用等号&#xff08;&#xff09;来将一个值赋给一个变量。以下是一些基本的变量赋值示例&#xff1a; # 整数赋值 x 10# 浮点数赋值 y…

Excel文件导入导出,SpringBoot整合EasyExcel批量导入导出,采用的JDBC+EasyExcel(附带整个Demo)

目录 0.为什么mybatis的foreach比JDBC的addBatch慢 1.引入依赖 2.Controller层 3.Service层 4.Utils工具类 5.自定义监听器 6.实体类 7Mapper层 不用Mybatis的原因就是因为在大量数据插入的时候jdbc性能比mybatis好1. 首先分批读取Excel中的数据 这一点EasyExcel有自己…

看完就等于拿捏浮点数在内存中的储存了

诸君又该学习了&#xff0c;今天我们继续来一睹浮点数的奥妙真容。 经过前面文章对整形提升相关的解释&#xff0c;我们都对整形和字符在内存空间上的储存已经有了大概的认知&#xff0c;那么现在我们就来好好讲讲浮点数在内存中的储存规则。 目录 浮点数与整形储存的不同 …

41-Vue-webpack基础

webpack基础 前言什么是webpackwebpack的基本使用指定webpack的entry和output 前言 本篇开始来学习下webpack的使用 什么是webpack webpack: 是前端项目工程化的具体解决方案。 主要功能&#xff1a;它提供了友好的前端模块化开发支持&#xff0c;以及代码压缩混淆、处理浏览…

自定义序列化

3.2.2.自定义序列化 RedisTemplate可以接收任意Object作为值写入Redis&#xff1a; 只不过写入前会把Object序列化为字节形式&#xff0c;默认是采用JDK序列化&#xff0c;得到的结果是这样的&#xff1a; 缺点&#xff1a; 可读性差内存占用较大 我们可以自定义RedisTempla…

NASA数据集——2015 年30 米分辨率的地衣地面覆盖率模型估计值

cABoVE: Lichen Forage Cover over Fortymile Caribou Range, Alaska and Yukon, 2000-2015 文件修订日期&#xff1a;2021-07-21 数据集版本: 1 摘要 本数据集提供了美国阿拉斯加东部内陆和加拿大育空地区 Fortymile 研究区 2015 标称年 30 米分辨率的地衣地面覆盖率模型估…

modbus代码思路整理

void main() { eMBinit(); eMBEnable();/*1.eRcvState = STATE_RX_INIT 2.USART:USART_RX->Enable & USART_TX->Disable 3.打开TIM(5ms):Enable 4.eMBState = STATE_ENABLE*/ while(1) {…

YOLOv8-ROS-noetic+USB-CAM目标检测

环境介绍 Ubuntu20.04 Ros1-noetic Anaconda-yolov8虚拟环境 本文假设ROS和anaconda虚拟环境都已经配备&#xff0c;如果不知道怎么配备可以参考&#xff1a; https://blog.csdn.net/weixin_45231460/article/details/132906916 创建工作空间 mkdir -p ~/catkin_ws/srccd ~/ca…

SQL注入四-PHP应用SQL二次注入堆叠执行DNS带外功能点黑白盒条件

演示案例&#xff1a; PHP-MYSQL-二次注入-DEMO&74CMSPHP-MYSQL-堆叠注入-DEMO&CTF强网PHP-MYSQL-带外注入-DEMO&DNSLOG #PHP-MYSQL-二次注入-DEMO&74CMS 1、DEMO-用户注册登录修改密码 2、CMS-74CMS个人中心简历功能 黑盒思路&#xff1a;分析功能有添加后对数…

dom元素+CSS实现阶梯动画效果

1.效果 2.代码实现 <template><div class"container"><div class"Box"><div class"box" style"background-color: red;"></div><div class"box" style"background-color: orange;&q…

湖北专升本报名照片需要<40kb怎么解决

湖北专升本报名照片需要<40kb怎么解决

vue 修改element-plus主题色

一、安装SCSS npm install sass --save-dev npm install sass-loader --save-dev npm install node-sass --save-dev npm install vue-style-loader --sava-dev 二、添加主题文件theme.scss forward "element-plus/theme-chalk/src/common/var.scss" with ($col…

特种兵旅游-扬州、南京

一、扬州 Day01 西安咸阳机场->扬州泰州机场&#xff08;扬州地界但是离泰州也嘎嘎近&#xff09;->大运河博物馆&#xff08;需要提前预约&#xff01;&#xff09;&#xff08;超级震撼&#xff09; Day02 瘦西湖&#xff08;门票有点贵&#xff0c;但是蛮值得&#x…