当前位置: 首页 > news >正文

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.lryc.cn/news/490955.html

相关文章:

  • 从0开始学PHP面向对象内容之常用设计模式(适配器,桥接,装饰器)
  • 玩转数字与运算:用C语言实现24点游戏的扑克牌魅力
  • 前端入门之VUE--基础与核心
  • logback 初探学习
  • 在Elasticsearch中,是怎么根据一个词找到对应的倒排索引的?
  • 1992-2021年 各省市县经过矫正的夜间灯光数据(GNLD、VIIRS)区域汇总:省份、城市、区县面板数据
  • linux实战-黑链——玄机靶场
  • 鸿蒙NEXT开发案例:字数统计
  • uniapp vue2项目迁移vue3项目
  • 16.C++STL 3(string类的模拟,深浅拷贝问题)
  • 神经网络10-Temporal Fusion Transformer (TFT)
  • “iOS profile文件与私钥证书文件不匹配”总结打ipa包出现的问题
  • 《图像梯度与常见算子全解析:原理、用法及效果展示》
  • 【c++篇】:探索c++中的std::string类--掌握字符串处理的精髓
  • LlamaIndex ollama 搭建本地RAG应用,建立本地知识库
  • draggable的el-dialog实现对话框标题可以选择
  • 2024年Android面试总结
  • 树莓派3:64位系统串口(UART)使用问题的解决方法
  • SemiDrive E3 硬件设计系列---唤醒电路设计
  • 淘宝接口高并发采集核心要点解读,开启电商数据智能应用新纪元
  • C#里怎么样快速使用LINQ实现查询?
  • 2024新版微软edge浏览器输入百度网址时自动补全tn=68018901……小尾巴的解决
  • uni-app打包H5自定义微信分享
  • 大模型专栏--大模型应用场景
  • 骑砍2霸主MOD开发(29)-顶点动画
  • -Dspring.profiles.active=dev与--spring.profiles.active=dev的区别
  • 面向对象高级(2)单例设计对象与代码块
  • 47小型项目的规划与实施
  • 堤防安全监测系统方案
  • 聊聊Flink:这次把Flink的window分类(滚动、滑动、会话、全局)、窗口函数讲透