STM32学习之:定时器 软件计时

发布者:和谐的24号最新更新时间:2018-08-31 来源: eefocus关键字:STM32  定时器  软件计时 手机看文章 扫描二维码
随时随地手机看文章

#include "led.h"

#include "delay.h"

#include "key.h"

#include "sys.h"

#include "lcd.h"

#include "usart.h"

#include "timer.h"

#include "beep.h"

     

 extern u32  sec;

 int  main(void)

 {    


  

  delay_init();                //延时函数初始化      

    NVIC_Configuration();      //设置NVIC中断分组2:2位抢占优先级,2位响应优先级

    uart_init(9600);             //串口初始化为9600

     LED_Init();                    

    LCD_Init(); 

  BEEP_Init(); 

  TIM3_Int_Init(9999,7199);//10Khz的计数频率,  延时1s == 1000 000us 

    

while(1)

{     

       LCD_ShowString(30,70,200,16,16,"Zhaocundang:14160310317");       

       LCD_ShowString(30,162,200,2,16,"Second Clock:");       

       LCD_ShowNum(150,162,sec,2,16);



    }



#include "timer.h"

#include "led.h"

#include "sys.h"

#include "usart.h"

#include "lcd.h"

#include "beep.h"

#include "delay.h"

//////////////////////////////////////////////////////////////////////////////////     

//本程序只供学习使用,未经作者许可,不得用于其它任何用途

//ALIENTEK战舰STM32开发板

//定时器 驱动代码       

//正点原子@ALIENTEK

//技术论坛:www.openedv.com

//修改日期:2012/9/3

//版本:V1.0

//版权所有,盗版必究。

//Copyright(C) 广州市星翼电子科技有限公司 2009-2019

//All rights reserved                                      

////////////////////////////////////////////////////////////////////////////////// 

volatile u32  sec=0;

 

//通用定时器3中断初始化

//这里时钟选择为APB1的2倍,而APB1为36M

//arr:自动重装值。

//psc:时钟预分频数

//这里使用的是定时器3!


// TIM3完成定时60s

void TIM3_Int_Init(u16 arr,u16 psc)

{

    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;

    NVIC_InitTypeDef NVIC_InitStructure;


    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //时钟使能

    

    //定时器TIM3初始化

    TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值    

    TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值

    TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割:TDTS = Tck_tim

    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式

    TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据指定的参数初始化TIMx的时间基数单位

 

    TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE ); //使能指定的TIM3中断,允许更新中断


    //中断优先级NVIC设置

    NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;  //TIM3中断

    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;  //先占优先级0级

    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;  //从优先级3级

    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能

    NVIC_Init(&NVIC_InitStructure);  //初始化NVIC寄存器



    TIM_Cmd(TIM3, ENABLE);  //使能TIMx                     

}


//定时器3中断服务程序

void TIM3_IRQHandler()   //TIM3中断

{   

 

    if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)  //检查TIM3更新中断发生与否

        {

         TIM_ClearITPendingBit(TIM3, TIM_IT_Update  );  //清除TIMx更新中断标志 

     LED1=!LED1; 

      }

        sec++;

        if(sec==60)

            {

//赵存档 QQ463431476  http://www.cnblogs.com/xiaobo-Linux/

                LED0=0;

                delay_ms(100);

                LED0=1;

                delay_ms(100);

            LED0=0;

                delay_ms(100);

                LED0=1;

                delay_ms(100);

                

                BEEP=1;

                delay_ms(200);

                BEEP=0;

              sec=0;

            }    

     

}


关键字:STM32  定时器  软件计时 引用地址:STM32学习之:定时器 软件计时

上一篇:STM32库函数EXTI_GetFlagStatus和EXTI_GetITStatus的区别
下一篇:基于stm32的简单多任务切换设计

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

FreeRTOS移植,基于STM32 HAL库
一、硬件准备 一个STM32开发板(STM32F429IGT6),及其电源线等; 一个ST-Link下载器及其连接线等。 二、软件准备 FreeRTOS源码(V9.0.0); 一个基于STM32 HAL库的基础例程(跑马灯例程)。 三、移植FreeRTOS 3.1 添加FreeRTOS源码至工程 添加源代码至工程目录,添加至工程分组中,添加相关头文件路径 编译,提示找不到 FreeRTOSConfig.h 3.2 添加 FreeRTOSConfig.h 文件来源:事先参考众多例程中的 FreeRTOSConfig.h 后,总结出来的 编译结果为:2个error。SVC_Handler() 和 PendSV_Handler()
[单片机]
STM32芯片的内部架构如何
STM32芯片主要由内核和片上外设组成,STM32F103采用的是Cortex-M3内核,内核由ARM公司设计。STM32的芯片生产厂商ST,负责在内核之外设计部件并生产整个芯片。这些内核之外的部件被称为核外外设或片上外设,如 GPIO、USART(串口)、I2C、SPI 等。 芯片内部架构示意图 芯片内核与外设之间通过各种总线连接,其中驱动单元有 4 个,被动单元也有 4 个,具体如上图所示。可以把驱动单元理解成是内核部分,被动单元都理解成外设。 ICode 总线 ICode总线是专门用来取指令的,其中的I表示Instruction(指令),指令的意思。写好的程序编译之后都是一条条指令,存放在 FLASH中,内核通过ICod
[单片机]
<font color='red'>STM32</font>芯片的内部架构如何
基于STM32设计的数码相册
一、项目介绍 项目是基于 STM32 设计的 数码 相册,能够通过LCD显示屏解码显示主流的图片,支持bmp、jpg、gif等格式。用户可以通过按键或者触摸屏来切换图片,同时还可以旋转显示,并能够自适应居中显示,小尺寸图片居中显示,大尺寸图片自动缩小显示(超出屏幕范围)。图片从 SD 卡中获取。 二、设计思路 2.1 硬件 设计 本项目所需的主要硬件: STM32F103ZET6 LCD屏幕 SD卡模块 按键和触摸屏 2.2 软件设计 (1)解码图片 在STM32 芯片 中,解码图片需要将读取到的数据存入图形缓冲区中,以便进行图画显示。常用的解码 算法 有JPEG解码和BMP解码。 (2)图片显示 为了更好的实现
[单片机]
基于<font color='red'>STM32</font>设计的数码相册
串口通讯(DMA模式)
在高级语言中,I/O 流输入(input)操作一般都要求指定要读取的数据的最大长度(字节数)。当接收到至少1字节、最多所指定的字节数时,函数返回。 STM32 串口接收数据时,HAL API 要求指定数据长度。但无论轮询、中断或是DMA方式,都必须完整地接收到这么多字节,程序流程才继续。如何接收变长消息,我想不到特别好的实现方式。一种方式是,轮询加超时。另一种方式是,设计消息协议,使消息头为定长,且消息头内包含消息体的长度。但是,如果通讯异常,导致消息数据错误或丢失,那么,还是缺少“提前返回”的机制。 相对来说,轮询加超时的方式似乎更好些。效率低,但是是可靠的。我也不确定。 DMA是STM32内的一个硬件模块,它独立于
[单片机]
STM32 LL 为什么比 HAL 高效?
STM32的标准外设库、HAL、LL软件库,都有很多巧妙之处值得大家借鉴。 今天讲讲STM32Cbue LL库中巧妙运用“静态内联”使代码更高效。 概述 有些应用要求MCU能高效处理,特别是跑一些算法时,对CPU执行效率要求较高。 网上有很多文章说STM32CubeHAL执行效率不高,代码量大等问题,导致很多还没有入门,或初学的读者就产生各种各样的疑惑。 说实话,HAL相对标准外设库来说确实存在代码效率不高、代码量大灯这些问题,那么与之对应的STM32Cube LL恰好避免了这样的问题。 LL能高效的原因 简单总结一下原因:巧妙运用C语言静态、内联函数直接操作寄存器。 当然,这是其中重要的原因,还有一些其它原因,这
[单片机]
基于STM32的简单电子书的实现
今天玩了会液晶屏,原来显示汉字都是也取模软件区模后在液晶屏上显示,显示内容改变以后还需要重新做字模,比较麻烦。这两天有时间,参考网友资料,实现了读取汉字的内码从SD卡的GB2312点阵字库读取点阵在液晶屏上显示,字库的生成软件用的是易木雨的点阵字库生成器。能生成很多种语言的字库。做完了读取显示后,我自己又琢磨了一下,简单的实现了从SD卡中读取txt文档然后再液晶屏上显示txt内容。 取模过程注意点阵的宽、高和字体大小的关系,宽、高是我们在液晶屏上要显示的像素大小,字体是汉字大小,如果宽、高一定,字体大小太到的话,字在液晶屏上只能显示一部分,可以在左侧的预览区看出来,如果字体在宽高像素点的范围内则可以在液晶上显示完整的字,如果不
[单片机]
stm32单片机GPIO端口的特点及应用解析
一、GPIO的综合描述 stm32每一个GPIO端口拥有2个32bits的configuration寄存器(GPIOx_CRL,GPIOx_CRH),2个32bits的数据寄存器(GPIOx_IDR,GPIOx_ODR),1个32bits的set/reset寄存器(GPIOx_BSRR),1个16bits的reset寄存器(GPIOx_BRR)和1个32bits的Lock寄存器(GPIOx_LCKR)。 (一)每一个IO引脚都可以使用软件配置为以下几种模式: 1. 浮空输入 2. 带上拉输入 3. 带下拉输入 4. 模拟输入 5. 开漏输出——(此模式可实现hotpower说的真双向IO) 6. 推挽输出 7. 复用功能的推挽
[单片机]
完美实现STM32单总线挂多个DS18B20
一般常见的STM32的关于DS18B20的例程都是检测一个传感器,代码一般都是跳过ROM检测,直接获取温度值。这种写法并不适用于单总线上挂载多个DS18B20的情况,Sandeepin的这个代码就是针对这种情况完善的单总线挂多个DS18B20检测,实现获取每个DS18B20的ID和温度。 主要的DS18B20时序代码没变,增加了搜索ROM函数,获取温度时先匹配ID。 核心代码如下: DS18B20.c文件代码: #include DS18B20.h #include Delay.h #include stdio.h // printf用 #define DS18B20_GPIO_NUM
[单片机]
完美实现<font color='red'>STM32</font>单总线挂多个DS18B20
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
热门活动
换一批
更多
设计资源 培训 开发板 精华推荐

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

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

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