STM32定时器及中断简单程序

发布者:春林初盛最新更新时间:2018-12-03 来源: eefocus关键字:STM32  定时器  中断 手机看文章 扫描二维码
随时随地手机看文章

//----------------------------main()--------------------


//stm32f103c8t6有3个普通1个高级定时器

//每次进入中断服务程序间隔时间为

//((1+TIM_Prescaler )/72M)*(1+TIM_Period )=((1+7199)/72M)*(1+9999)=1秒

#include

#define D13_ON GPIO_ResetBits(GPIOC,GPIO_Pin_13)

#define D13_OFF GPIO_SetBits(GPIOC,GPIO_Pin_13)


void GPIO_Config(void);

void TIM2_Config(u16 arr,u16 psc);

void NVIC_Config(void);


//主函数

int main(void)

{

    GPIO_Config();

    //((1+arr )/72M)*(1+psc )=((1+1999)/72M)*(1+35999)=1秒

    TIM2_Config(1999,35999);

    NVIC_Config();

    while(1);


}


//初始化GPIO

void GPIO_Config(void)

{

    GPIO_InitTypeDef GPIO_InitStructure;

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);


    //PC13灯

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;

    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

    GPIO_Init(GPIOC,&GPIO_InitStructure);

    GPIO_ResetBits(GPIOC,GPIO_Pin_13); //关闭LED

}



//初始化TIM2定时器及中断

//每次进入中断服务程序间隔时间为

//((1+arr )/72M)*(1+psc )=((1+1999)/72M)*(1+35999)=1秒

void TIM2_Config(u16 arr,u16 psc)

{

    //定时器时间是1s


    TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;

    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);

    //清除中断标志位

    TIM_ClearITPendingBit(TIM2,TIM_IT_Update);//TIM_ClearFlag(TIM2,TIM_FLAG_Update);//两者作用相同


    //自动装载的周期值0-0xffff,72M/36000=2000

    TIM_TimeBaseStructure.TIM_Period = arr;

    //时钟除数预分频值0-oxffff,下面是36000分频

    TIM_TimeBaseStructure.TIM_Prescaler = psc;

    ////普通和高级才有下面两行

    //时钟分割,暂时为0,高级应用才用

    TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;

    //计数模式,向上下,中央对齐123

    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;


    TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure);


    //开启中断

    TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);

    //开启外设

    TIM_Cmd(TIM2,ENABLE);

}


//初始化中断向量控制器NVIC


void NVIC_Config(void)

{

    NVIC_InitTypeDef NVIC_InitStructure;

    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);

    NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;

    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;

    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;

    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

    NVIC_Init(&NVIC_InitStructure);

}




//--------------------stm32f10x_it.c------------------------

//中断函数中自己编写

void TIM2_IRQHandler(void)

{

    //判断TIM3更新中断是否发生

    if(TIM_GetITStatus(TIM2,TIM_IT_Update)!=RESET)

    {

        //必须清楚标志位

    TIM_ClearITPendingBit(TIM2,TIM_IT_Update);

    //状态取反

    GPIO_WriteBit(GPIOC,GPIO_Pin_13,(BitAction)(!GPIO_ReadOutputDataBit(GPIOC,GPIO_Pin_13)));

    }


}

关键字:STM32  定时器  中断 引用地址:STM32定时器及中断简单程序

上一篇:STM32中断进行分组
下一篇:stm32 tim6、tim7中断配置以及注意事项

推荐阅读最新更新时间:2024-03-16 16:19

STM32—数组作为被调用函数的入口参数时定义成指针
STM32—数组作为被调用函数的入口参数时,要两个条件, 1:数组首地址 2:数组长度 在被调用函数中,比如把数据保存到数组pbuffer 中,那么在入口参数定义时要定义成指针u8 *pbuffer, 1 而在调用时,比如要保存到tab 中,要在入口参数处强制转换成(u8 *)tab,
[单片机]
<font color='red'>STM32</font>—数组作为被调用函数的入口参数时定义成指针
使用MSP430F1121中断须要注意的问题
MSP430F1121(下面简称F1121)是TI公司新近推出的一款廉价的20引脚低功耗16位Flash单片机。它所具备的多种中断功能使其应用灵活,并适用于各种不同的应用领域。 不过,我们在应用开发中发现,厂家提供的技术文件虽然不少,但是对有关中断的说明却不那么详尽,这就给应用开发造成了诸多不便。为此,我们专门用程序进行了一些试验,并从中明确了一些问题。在这里,我们就把这些问题说明一下,供大家参考。 在说明这些问题之前,有必要先来看一下F1121的中断,如表1所列。 表1 F1121中断 F1121的各个中断都有对应的中断向量和中断优先级,通常被分为三类:系统复位、(非)屏蔽中断和可屏蔽中断。此外,F1121的各
[单片机]
使用MSP430F1121<font color='red'>中断</font>须要注意的问题
STM32移植UCGUI实现GPS
在MDK环境下,终于将3.90版本的UCGUI移植到STM32下了,在网上看到的都是例程代码,很少看到有关于在STM32下移植UCGUI的教程方法,为了方便大家,特写此移植方法,大家可以借鉴(有错误之处,望大家指点出来共同讨论!) 移植步骤: 第一步:首先,得把你的TFT底层驱动写好,既在裸机下,可以正常显示。 第二步:加入UCGUI程序包。 第三步:配置LCDConf.h GUIConf.h GUITouchConf.h(由于我的液晶不带触摸功能,此配置在此不讲。) 配置LCDConf.h文件如下: #ifndef LCDCONF_H #define LCDCONF_H #define LCD_XSIZE (160) //配置T
[单片机]
<font color='red'>STM32</font>移植UCGUI实现GPS
stm32---ADC
adc.c #include adc.h void ADCx_Init() { GPIO_InitTypeDef GPIO_InitStructure; ADC_InitTypeDef ADC_InitStructure; //1*时钟开启并配置ADC分频系数 RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1|RCC_APB2Periph_GPIOA,ENABLE); RCC_ADCCLKConfig(RCC_PCLK2_Div6);//6分频,72/6=12Mhz,函数在rcc.h中 //2*GPIO配置 GPIO_InitStructur
[单片机]
s3c2440中断程序(烧录到NORFlash,运行在SDRAM中)
现在正在看韦东山的《嵌入式Linux应用开发完全手册》,看到了中断部分。书上是将程序烧录到NANDFlash中,由于当mini2440板子从NANDFlash启动的时候,会自动将其中的前4KB程序拷贝到CPU内部的SRAM(4KB大小)中,并且将该SRAM的起始地址映射为0x0。所以当中断发生的时候,PC指针指向0x0+offset(如:IRQ就是0x18),可以找到中断服务程序的入口。 但是有4KB的限制,加上U-BOOT一般都烧录到NORFlash中,再将程序搬移到SDRAM中再运行的,恰好手底下有JLINK设备,所以决定写一个烧录到NORFlash,运行在SDRAM中的中断测试程序。 先说一下整体思路:将系统启动时寻找的八个
[单片机]
STM32 GPIO 简单操作函数
STM32库函数太多,而且不能识别大小写,经常记错,GPIO简单记忆。 ---第一步--模式配置 void GPIO_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); //对应GPIO所在的总线时钟必须打开 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1; //哪个GPIO口 GPIO_InitStructu
[单片机]
Cortex-M3中断服务程序设计
是嵌入式应用系统获取各种事件的基本手段。而事件是实时性问题的讨论基础和事件计算的起点。 中断优先级 不同中断服务程序应有不同优先级,在允许中断嵌套时,最高优先级的中断总是能够得到响应。 只要没关中断,ISR可以中断任何任务的运行,比最高优先级的任务还要高。 Cortex-M3中断资源 抢占优先级:实现中断嵌套 子优先级:当抢占优先级相同的两个中断同时发生时,子优先级高的中断可以首先获得运行权。 中断优先级安排原则 紧迫性:触发中断的事件允许耽误的时间越短,优先级越高。 关键性:触发中断的事件越关键,越高 频繁性:触发中断的事件发生越频繁,越高 快捷性:前三项相近,ISR处理越快,越高。 ISR功能应尽量简单,只要
[单片机]
Cortex-M3<font color='red'>中断</font>服务程序设计
新款STM32U5:让便携产品拥有惊艳图效
凝聚ST超低功耗微控制器技术精华的STM32U5于2021年问世,是一款堪称可改变游戏规则的低功耗MCU。 作为STM32高性能低功耗系列旗舰产品, STM32U5延续STM32F2/F4/F7的应用范围,同时又有更低的能耗,具有更高的性价比。 在工业控制系统中,U5可以承担主控器、系统监控以及图形显示等核心职能。 高性能,低功耗,丰富的数字外设和更高性能的模拟接口,强大的安全特性,以及支持图形加速,让STM32U5在工业控制、工业表计和医疗健康,个人穿戴设备等应用领域取得良好的表现,为泛工业系统创新赋能。在这个视觉统治一切的时代,人们对图形效果的追求永远没有止境,同时也希望实现起来更简单快速,性价比更高。“如果只
[单片机]
新款STM32U5:让便携产品拥有惊艳图效
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved