STM32F10x 定时器

使用定时器实现:B5 E5的开关

添加相关的.h路径文件

添加相关的.c配置文件

led.h文件        用于声明LED函数

#ifndef __LED_H            //没有定义__LED_H
#define __LED_H            //就定义__LED_H

#define LED1_ON GPIO_ResetBits(GPIOB,GPIO_Pin_5)
#define LED1_OFF GPIO_SetBits(GPIOB,GPIO_Pin_5)

#define LED2_ON GPIO_ResetBits(GPIOE,GPIO_Pin_5)
#define LED2_OFF GPIO_SetBits(GPIOE,GPIO_Pin_5)

//里面放宏定义 函数申明
void LED_Lnit(void);

#endif

led.c文件        主要用于LED灯的配置

#include "stm32f10x.h"
#include "led.h"


void LED_Lnit(){
        //定义结构体变量
    GPIO_InitTypeDef GPIO_Initx;
    //打开GPIOB 5的时钟
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);
    //给结构体变量的属性的属性的值
    GPIO_Initx.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_Initx.GPIO_Pin = GPIO_Pin_5;
    GPIO_Initx.GPIO_Speed = GPIO_Speed_50MHz;
    
    
    //设置B5为推挽输出
    GPIO_Init(GPIOB,&GPIO_Initx);
    GPIO_Init(GPIOE,&GPIO_Initx);
    
}

tim.h文件        //用于声明定时器的函数

#ifndef __TIM_H
#define __TIM_H


#include "stm32f10x.h"
void Tim_init(u16 arr,u16 psc);

#endif

tim.c文件        用于配置定时器

#include "stm32f10x.h"
#include "led.h"

void Tim_init(u16 arr,u16 psc){
    
    TIM_TimeBaseInitTypeDef Tim2;
    NVIC_InitTypeDef NVIC_Initx;
    //1、开启定时器2时钟
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);    //开启TIM2时钟
    
    //2、定时器初始化
    Tim2.TIM_Period = arr;    //自动装载值    装载值10000-1
    Tim2.TIM_CounterMode=TIM_CounterMode_Up;    //计数模式 向上计数
    Tim2.TIM_ClockDivision=TIM_CKD_DIV1;    //时钟分割是输入捕获用的,故这里随便给
    Tim2.TIM_Prescaler=psc;    //预分频值        7200-1

    TIM_TimeBaseInit(TIM2,&Tim2);    
    //3、打开更新中断
    TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);    //此处有中断

    //4、优先级    有中断就有中断优先级
    NVIC_Initx.NVIC_IRQChannel = TIM2_IRQn;    //配置目标:中断线0
    NVIC_Initx.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Initx.NVIC_IRQChannelPreemptionPriority = 1;        //设置抢占优先级
    NVIC_Initx.NVIC_IRQChannelSubPriority = 2;                        //设置响应优先级
    NVIC_Init(&NVIC_Initx);
    
    
    //5、启动定时器
    TIM_Cmd(TIM2,ENABLE);
}


//构建中断服务函数,在.s启动文件中找
void TIM2_IRQHandler()
{
    //交替闪烁    
    //如果B5输出为1 则B5输出为0 E5输出1
    if(GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_5))
    {
        LED1_ON;
        LED2_OFF;
    }
    else    //如果B5输出为0 则B5输出为1 E5输出0
    {
        LED2_ON;
        LED1_OFF;
    }
    //                否则B5输出为1 E5输出为0
    
    //清除中断标记位        如何已经触发过来,再次使用不清除就一直是触发过后的高电平
    TIM_ClearITPendingBit(TIM2,TIM_IT_Update);
}

 

main.c文件 

#include "stm32f10x.h"
#include "led.h"
#include "tim.h"

int main()
{
    //中断分组
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);

    LED_Lnit();    //配置IO程序
    Tim_init(9999,7199);
    //编写程序功能
    while(1){;
    //当前程序没有其他功能
    }
    return 0;
}
 

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

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

相关文章

PMP好考吗,有多大的价值?

非常好考!PMP目前大陆地区的笔试是只有选择题的,运气好的话 蒙一个都能对,所以PMP的通过率高,这也是很多人考了吐槽PMP没用,是“水证”,但是每年考PMP 的人不减反增,大家可以想一下,…

css:项目

这是一个完整的网站制作的流程 美工会先制作一个原型图: 原型图写的不详细,就是体现一个网页大致的布局 然后美工再做一个psd样例图片 然后再交给程序员 项目 模块化开发:把代码的不同的样式封装起来,需要用到相同样式的标签就…

VsCode 插件推荐(个人常用)

VsCode 插件推荐(个人常用)

黑马程序员Java项目实战《苍穹外卖》Day01

苍穹外卖-day01 课程内容 软件开发整体介绍苍穹外卖项目介绍开发环境搭建导入接口文档Swagger 项目整体效果展示: ​ 管理端-外卖商家使用 ​ 用户端-点餐用户使用 当我们完成该项目的学习,可以培养以下能力: 1. 软件开发整体介绍 作为一…

Python双向链表、循环链表、栈

一、双向链表 1.作用 双向链表也叫双面链表。 对于单向链表而言。只能通过头节点或者第一个节点出发,单向的访问后继节点,每个节点只能记录其后继节点的信息(位置),不能向前遍历。 所以引入双向链表,双…

k8s网络服务

k8s 中向外界提供服务的几种方法port-forward、NodePort,以及 更加常用的提供服务的资源ingress。 1 kubectl port-forward service/redis 6379:6379 现在k8s中有一个pod运行在6379,本机访问映射到6379上,它可以针对部署,服务&…

eduSRC挖洞思路

声明 学习视频来自 B 站UP主泷羽sec,如涉及侵权马上删除文章。 笔记的只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负。 ✍🏻作者简介:致…

Leetcode - 周赛424

目录 一,3354. 使数组元素等于零 二, 3355. 零数组变换 I 三,3356. 零数组变换 II 四,3357. 最小化相邻元素的最大差值 一,3354. 使数组元素等于零 本题实际上是一个前/后缀和的问题,就是判断前缀和与后…

Vue2中 vuex 的使用

1.安装 vuex 安装vuex与vue-router类似,vuex是一个独立存在的插件,如果脚手架初始化没有选 vuex,就需要额外安装。 yarn add vuex3 或者 npm i vuex3 233 Vue2 Vue-Router3 Vuex3 344 Vue3 Vue-Router4 Vuex4 2. 新建 store/index.j…

数据结构C语言描述5(图文结合)--队列,数组、链式、优先队列的实现

前言 这个专栏将会用纯C实现常用的数据结构和简单的算法;有C基础即可跟着学习,代码均可运行;准备考研的也可跟着写,个人感觉,如果时间充裕,手写一遍比看书、刷题管用很多,这也是本人采用纯C语言…

Windows修复SSL/TLS协议信息泄露漏洞(CVE-2016-2183) --亲测

漏洞说明: 打开链接:https://docs.microsoft.com/zh-cn/troubleshoot/windows-server/windows-security/restrict-cryptographic-algorithms-protocols-schannel 可以看到: 找到:应通过配置密码套件顺序来控制 TLS/SSL 密码 我们…

深度学习图像视觉 RKNN Toolkit2 部署 RK3588S边缘端 过程全记录

深度学习图像视觉 RKNN Toolkit2 部署 RK3588S边缘端 过程全记录 认识RKNN Toolkit2 工程文件学习路线: Anaconda Miniconda安装.condarc 文件配置镜像源自定义conda虚拟环境路径创建Conda虚拟环境 本地训练环境本地转换环境安装 RKNN-Toolkit2:添加 lin…

controller中的参数注解@Param @RequestParam和@RequestBody的不同

现在controller中有个方法:(LoginUserRequest是一个用户类对象) PostMapping("/test/phone")public Result validPhone(LoginUserRequest loginUserRequest) {return Result.success(loginUserRequest);}现在讨论Param("login…

Android按键点击事件三种实现方法

1. 在xml文件中为 Button 添加android:onclick属性 由于没有onclick这个函数,onclick下面会提示红色波浪线错误,然后单击一下"onclick"按住键盘上AltEnter键,选择在activity中生成函数 public void onclick(View view) {Toast.makeText(this,&…

全景图像(Panorama Image)向透视图像(Perspective Image)的跨视图转化(Cross-view)

一、概念讲解 全景图像到透视图像的转化是一个复杂的图像处理过程,它涉及到将一个360度的全景图像转换为一个具有透视效果的图像,这种图像更接近于人眼观察世界的方式。全景图像通常是一个矩形图像,它通过将球面图像映射到平面上得到&#xf…

RabbitMQ7:消息转换器

欢迎来到“雪碧聊技术”CSDN博客! 在这里,您将踏入一个专注于Java开发技术的知识殿堂。无论您是Java编程的初学者,还是具有一定经验的开发者,相信我的博客都能为您提供宝贵的学习资源和实用技巧。作为您的技术向导,我将…

C#开发合集

用C#轻松搞定m3u8视频下载与合并 嘿,程序员们!今天咱们来聊聊如何用C#写个小程序,轻松下载和合并m3u8视频文件。没错,就是那种分段的流媒体视频。准备好了吗?让我们开始吧! 准备工作 在动手之前&#xf…

HarmonyOS4+NEXT星河版入门与项目实战(22)------动画(属性动画与显示动画)

文章目录 1、属性动画图解2、案例实现-小鱼移动游戏1、代码实现2、代码解释3、资源图片4、实现效果3、显示动画4、案例修改-显示动画5、总结1、属性动画图解 这里我们用一张完整的图来汇整属性动画的用法格式和使用的主要属性范围,如下所示: 2、案例实现-小鱼移动游戏 1、代…

【rustdesk】客户端和服务端的安装和部署(自建服务器,docker,远程控制开源软件rustdesk)

【rustdesk】客户端和服务端的安装和部署(自建服务器,docker) 一、官方部署教程 https://rustdesk.com/docs/zh-cn/client/mac/ 官方服务端下载地址 https://github.com/rustdesk/rustdesk-server/releases 我用的docker感觉非常方便&am…

Qt程序发布及打包成exe安装包

参考:Qt之程序发布以及打包成exe安装包 目录 一、简述 Qt 项目开发完成之后,需要打包发布程序,而因为用户电脑上没有 Qt 配置环境,所以需要将 release 生成的 exe 文件和所依赖的 dll 文件复制到一个文件夹中,然后再用 Inno Setup 打包工具打包成一个 exe 安装包,就可以…