STM32单片机通用定时器的编程设计806699.com


更新时间: 2019-10-09

  从图中可以看出,定时器的时钟不是直接来自APB1或APB2,而是来自于输入为APB1或APB2的一个倍频器,图中的蓝色部分。

  下面以通用定时器2的时钟说明这个倍频器的作用:当APB1的预分频系数为1时,这个倍频器不起作用,定时器的时钟频率等于APB1的频率;当APB1的预分频系数为其它数值(即预分频系数为2、4、8或16)时,这个倍频器起作用,定时器的时钟频率等于APB1的频率两倍。

  可能有同学还是有点不理解,OK,我们举一个例子说明。806699.com,假定AHB=36MHz,因为APB1允许的最大频率为36MHz,所以APB1的预分频系数可以取任意数值;

  有人会问,既然需要TIM2~7的时钟频率=36MHz,为什么不直接取APB1的预分频系数=1?答案是:APB1不但要为TIM2~7提供时钟,而且还要为其它外设提供时钟;设置这个倍频器可以在保证其它外设使用较低时钟频率时。

  再举个例子:当AHB=72MHz时,APB1的预分频系数必须大于2,因为APB1的最大频率只能为36MHz。如果APB1的预分频系数=2,则因为这个倍频器,TIM2~7仍然能够得到72MHz的时钟频率。能够使用更高的时钟频率,无疑提高了定时器的分辨率,这也正是设计这个倍频器的初衷。

  步骤二:GPIO的配置,使用函数为GPIO_cfg();,该函数的实现如下:

  步骤三:嵌套中断控制器的配置,我们照样使用函数NVIC_Config();只是初始化的过程略有不同。这里我们也把函数实现列出来:

  从以上函数实现来看,实际上只是改动了结构体成员NVIC_IRQChannel的值,现在需要的通道是TIM2的通道,因此初始化值为TIM2_IRQChannel。从这里也可以看出,这个函数实际上可以看做一个模型,可以拿去别的程序中改动后直接使用。

  步骤四:定时器的初始化配置,使用Timer_Config();。OK,关键部分出来了。

  我们每个语句都来解释一下。首先我们想使用定时器,就必须使能定时器的时钟,这就是函数RCC_APB1PeriphClockCmd();,通过它开启RCC_APB1Periph_TIM2。

  TIM_DeInit(TIM2);该函数主要用于复位TIM2定时器,使之进入初始状态。

  然后我们对自动重装载寄存器赋值,TIM_Period的大小实际上表示的是需要经过TIM_Period次计数后才会发生一次更新或中断。接下来需要设置时钟预分频数TIM_Prescaler,这里有一个公式,我们举例来说明:例如时钟频率=72MHZ/(时钟预分频+1)。说明当前设置的这个TIM_Prescaler,直接决定定时器的时钟频率。通俗点说,就是一秒钟能计数多少次。比如算出来的时钟频率是2000,也就是

  一秒钟会计数2000次,而此时如果TIM_Period设置为4000,即4000次计数后就会中断一次。由于时钟频率是一秒钟计数2000次,因此只要2秒钟,就会中断一次。

  再往后的代码,还有一个需要注意的,TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;就是我们一般采用向上计数模式,即每次计数就会加1,直到寄存器溢出发生中断为止。最后别忘了,需要使能定时器!!

  步骤五:编写中断服务程序。同样需要注意的,一进入中断服务程序,第一步要做的,就是清除掉中断标志位。由于我们使用的是向上溢出模式,因此使用

  每隔一秒,发生中断时,进入此中断函数执行程序,让LED闪一下,此中断程序所在文件stm32f10x_it.c

  睡眠模式:内核停止,外设如NVIC,系统时钟Systick仍运行。 停止模式:所有时钟都已停止....

  音阶是音乐必不可少的要素,主要由声音的频率决定。通过给蜂鸣器不同频率的音频脉冲,可以产生不同的音阶,....

  根据手册和开发板给的源码,直接实现停止模式,但是发现退出时就发生死机现象,并没有进入恢复正常,只执行....

  要注意的是,一般不使用内置SRAM启动(BOOT1=1 BOOT0=1),因为SRAM掉电后数据就丢....

  自动ISP,把BOOT0与地直接连接,那么每次上电就会运行程序,而且只要点击电脑上的“下载”按钮,就....

  DSP是为运算而生的芯片,他最强大的地方就在与它的数**算性能,那是由它的指令集支持的。那些拿DSP....

  将程序下载到开发板上后,LED灯会不断地亮灭,当按下KEY2键超过3s时,LED灯灭,标志着单片机进....

  GPIO的输出状态可以配置为推挽或开漏加上上拉或下拉。输出数据既可以来自输出数据寄存器,也可以由其他....

  在学习单片机的时候,我们经常遇到一组名词:上拉电阻和下拉电阻,通过学习我们知道上下拉电阻不仅能使当前....

  STM32单片机的每组IO口都有4个32位配置寄存器用于配置GPIOx_MODER, GPIOx_O....

  不管是什么单片机,在使用串口通信的时候,有一个非常重要的参数:波特率。什么是波特率:波特率就是每秒传....

  NEC码位的定义:一个脉冲对应560us的连续载波,一个逻辑1传输需要2.25ms(560us脉冲+....

  除新增的功能强化型外设接口外,STM32互连系列还提供与其它STM32微控制器相同的标准接口,这种外....

  一、定时器可以在任何时刻关闭,就算计数不满也要停 二、定时器在再次开启时可以从0计数 三....

  SPI_InitStructure.SPI_Direction = SPI_Direction_2L....

  GPIO设置如下 void GPIO_Configuration(void) { ....

  因为STM32 HAL库中仅有对HAl_Delay()毫秒级的延时,为实现精确的微秒级延时,就不得不....

  该系统采用STM32单片机,采集温湿度数据,并将温湿度数据通过GPRS模块上传到中国移动物联网云平台....

  小白一枚,目前有四个电机,车架,STM32F103VET6最小系统板一个,还有一个L293D驱动模块,循迹,避障模块都在...

  IDLE就是串口收到一帧数据后,发生的中断。什么是一帧数据呢?比如说给单片机一次发来1个字节,或者一....

  在学习单片机的时候,我们经常遇到一组名词:上拉电阻和下拉电阻,通过学习我们知道上下拉电阻不仅能使当前....

  STM32RTC使用步骤: 打开PWR时钟和Backup区数据访问 若使用外部低速时钟(....

  DS18B20 是由 DALLAS 半导体公司推出的一种的“一线总线”接口的温度传感器。与传统的热敏....

  通用定时器是一个通过可编程预分频器驱动的16位自动装载计数器构成。它适用于多种场合,包括测量输入信号....

  测试原理及现象:主机间隔500ms发送10个字符(0-9),从机开启SPI中断接收数据,接收满10字....

  VDDA为所有的模拟电路部分供电,包括:ADC模块,复位电路,PVD(可编程电压监测器),PLL,上....

  以前GPIO上接的电路都是低电平触发的那种,新画了个板子有一个按键设计的是高电平触发,结果IO口设置....

  1.与非总线位SRAM接口 FSMC配置 SRAM存储器和NOR闪存存储器共用....

  一些产品,当系统复位后(非上电复位),可能要求保持住复位前RAM中的数据,用来快速恢复现场,或者不至....

  此项功能是用来控制一个输出波形,或者指示一段给定的的时间已经到时。 当计数器与捕获/比较寄存器....

  电阻触摸屏的屏体部分是一块多层复合薄膜,由一层玻璃或有机玻璃作为基层,表面涂有一层透明的阻性材料组成....

  该函数位于在bsp.c文件下面; 使能RCC时钟:RCC_APB1Periph_DAC 这里DA....

  因为是共阳所以12,9,8,6为电源输入,其他引脚均为接地,所以对于芯片来说12,9,8,6高位输出....

  在硬件复位后,bxCAN工作在睡眠模式以节省电能,同时CANTX引脚的内部上拉电阻被激活。软件通过对....

  电流的测量用的是万用表,串联在电源的输入端,也就是说,实际测量的电流值为电路板消耗电流。电机、喇叭、....

  1、时钟配置,开启相应IO端口的时钟,以及串口模块的时钟。 串口1模块时钟寄存器:RCC_AP....

  ST提供的固件库当中,有提供一个stm32f10x_it.c文件,打开之后会发现里面放的都是些空函数....

  1.ADC_DeInit函数的功能是将外设ADCx的全部寄存器重设为默认值。 ADC_DeIn....

  首先在网上看到大部分移植FreeRTOS 都是选择修改他的启动文件,我个人感觉这样不是很好,毕竟是汇....

  在CMSIS中提供的函数是SysTick_Config(uint32_t ticks); 该函数设置....

  1 硬件电路配置 这里还是借用前面LED电路我就不贴图片。 2 时钟说明 SysT....

  理论上,需要数字电路,模拟电路,C语言编程基础,单片机会一点就更好了,这样的线的编....

  使用stm32f10x调试串口通讯时,发现一个出错的现象,硬件复位重启之后,发送测试数据0x01 0....

  STM32内部自带PVD功能,用于对MCU供电电压VDD进行监控。通过电源控制寄存器中的PLS[2:....

  你提到的时钟先分频再倍频,这个需要深入到STM32的内部去一探究竟了,在其技术参考手册的第7.2节C....

  主 PLL 时钟的时钟源要先经过一个分频系数为 M 的分频器,然后经过倍频系数为 N 的倍频器出来之....

  1什么是中断 暂停原先的程序或事情,执行另外一些程序或事情,执行完成后返回原来的程序。 ....

  在项目中单片机会与服务器进行网络通讯。需要对通讯加密,我选择了TEA加密算法。 *说明:TEA....

  首先,要包含头文件“stdio.h” 第二:printf()函数使用了int fputc(in....

  JTAG:JTAG(Joint Test Action Group;联合测试工作组)是一种国际标准测....

  分别实现普通收发,中断收发,DMA收发,问题是所有函数要求发送和接收的buf必须要事先知道长度,也没....

  STM32八种IO口模式区别 (1)GPIO_Mode_AIN模拟输入 (2)GPIO_....

  1、将正点原子的《触摸屏移植实验》中HARDWRAE/TOUCH目录复制到已经建立好的ucGUI工程....

  SPI是英语Serial Peripheralinterface的缩写,顾名思义就是串行外围设备接口....

  串口设置的一般步骤可以总结为如下几个步骤: 1)串口时钟使能,GPIO时钟使能 2)串口....

  1,新建项目,在新建工程的目录下新建几个文件夹: A,CORE (用来存放启动文件) B....

  STM32启动文件详细解析(V3.5.0) 以:startup_stm32f10x_hd.s为例 ....

  STM32的串口有监测总线是否处于空闲的功能,我们可以使用这个功能,当数据传输完总线变成空闲状态时产....

  先占优先级的概念等同于51单片机中的中断。假设有两中断先后触发,已经在执行的中断先占优先级如果没有后....

  1 /* 2 ::按键控制 3 PA8接LED,PE2接按键 4 */ 5 ....

  STM32有两个DMA控制器(DMA2只存在于大容量产品中),DMA1有7个通道,DMA2有5个通道....

  [table] [tr][td] 一、序言 在学习51单片机的时候,经常会使用keil+protues的方式来做一些实验,这样的模拟仿真为我...

  [table=98%,transparent] [tr=transparent][td] 实现STM32之间的串口通信,设置为主从机。 所...

  [table] [tr][td] 一、序言 在学习51单片机的时候,经常会使用keil+protues的方式来做一些实验,这样的模拟仿真为我...

  目前有6种方法用来检测电路的电流 1、检流电阻 2、晶体管 3、电流互感器(只可用于变化的电流) 4、罗氏线圈(电流...