STM32定时器单脉冲输出

发布者:WanderlustSoul最新更新时间:2017-09-27 来源: eefocus关键字:STM32  定时器  单脉冲输出 手机看文章 扫描二维码
随时随地手机看文章

使用stm32cubemx配置外设,代码使用HAL stm32f1 v1.3.1库。

用的是stm32l152c开发板,时钟频率32MHZ。





这里,没有配置中断。



上图的意思是,TI2收到1给正脉冲,触发TIM1开始计数,经过 tDelay后,OC1输出低,经过一个tPulse后,OC1又恢复为高。


The OPM waveform is defined by writing the compare registers (taking into account the clock frequency and the counter prescaler).
• The tDELAY is defined by the value written in the TIMx_CCR1 register.
• The tPULSEis defined by the difference between the auto-reload value and the compare value (TIMx_ARR - TIMx_CCR + 1).

Let’s say you want to build a waveform with a transition from ‘0 to ‘1 when a compare match occurs and a transition from ‘1 to ‘0 when the counter reaches the auto-reload value. 

To do this you enable PWM mode 2 by writing OC1M=111 in the TIMx_CCMR1 register. You can optionally enable the preload registers by writing OC1PE=1 in the 
TIMx_CCMR1 register and ARPE in the TIMx_CR1 register. In thiscase you have to write the compare value in the TIMx_CCR1 register, the auto-reload value in the 
TIMx_ARR register, generate an update by setting the UG bit and wait for external trigger event on TI2. CC1P is written to ‘0 in this example.

向比较寄存器写入数值(考虑时钟频率和计数分频来计算)来定义OPM波形。

1)tDelay值是TIMx_CCR1寄存器值

2)tPulse的值是 自动重装值减掉比较值: (TIMx_ARR - TIMx_CCR + 1)


假如,当比较相符发生时,你希望得到从0到1的波形,而当计数器达到自动重装值时,波形又从1变到0.

这种情况,使用PWM模式2,TIMx_CCMR1 寄存器的OC1M要为111。可选:使能重装寄存器。 在此例子中,你需要把比较值写到TIMx_CCR1 寄存器,自动重装值写到TIMx_ARR寄存器,设置UG位产生一个更新事件,并且等待TI2的外部触发事件。CC1P被写为 0.


看了手册上面的描述,就明白了:

我按下按钮,延时2秒,点亮绿灯,停1秒,绿灯灭。


如果是控制可控硅,就是:

检测到零点,延时x微秒,触发可控硅,停1毫秒,关掉可控硅。 生成触发脉冲。

可以让硬件自己处理,不用中断。


开发板实现描述1.


  1. while (1)  

  2. {  

  3. /* USER CODE END WHILE */  

  4.   

  5. /* USER CODE BEGIN 3 */  

  6.   

  7.   if (HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0) == GPIO_PIN_SET) {  

  8.     HAL_Delay(100);  

  9.       

  10.     if (HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0) == GPIO_PIN_SET) {  

  11.       __HAL_TIM_ENABLE(&htim4);  

  12.       HAL_TIM_OnePulse_Start(&htim4, TIM_CHANNEL_2);  

  13.     }  

  14.   }  

  15.     

  16. }  

  17. /* USER CODE END 3 */  


HAL_TIM_OnePulse_Start函数有问题,它总是使能1、2两个通道,而且它不启用定时器的计数。


因此,在它之前要使用宏 __HAL_TIM_ENABLE,置位 TIMx_CR1的CEN。


需要注意到,单脉冲功能,只能在1、2通道上做。


关键字:STM32  定时器  单脉冲输出 引用地址:STM32定时器单脉冲输出

上一篇:stm32f103 编码器模式总结
下一篇:stm32F1使用us-100超声波测距

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

基于ESP8266和STM32单片机的程序代码编写
ESP8266模块在STM32上做Server时,外部对其端口进行收发数据的程序,大部分代码都备注了说明。 因为是从client代码改来的,所以函数名不去改它了。 #include“sta_tcpclent_test.h” #include “SysTick.h” #include “usart.h” #include “esp8266_drive.h” #include #include volaTIle u8 TcpClosedFlag = 0;//定义失去连接标志 void ESP8266_STA_TCPClient_Test(void) { u8 res; u32 ul=0; char str[100]={0},*
[单片机]
基于ESP8266和<font color='red'>STM32</font>单片机的程序代码编写
关于STM32的 一个TIM1 的PWM程序和PWM简单使用
高级定时器与通用定时器比较类似,下面是一个TIM1 的PWM 程序,TIM1是STM32唯一的高级定时器。共有4个通道有 死区有互补。 先是配置IO脚: GPIO_InitTypeDef GPIO_InitStructure; /* PA8设置为功能脚(PWM) */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); /*P
[单片机]
关于<font color='red'>STM32</font>的 一个TIM1 的PWM程序和PWM简单使用
stm32 TIM1PWM多通道捕获模式测速
因为一个项目的要求,需要测速,之前就想学一下stm32的捕获模式了,借这个机会,刚好利用一下,现在分享出来。 硬件: MCU:stm32f103zet6 平台:航太电子流行7号智能小车 显示:mini12864 软件: 语言:C语言 IDE:keil5 测速部分环境是典型的测速方法,测速码盘加光电对管,单片机采集光电对管模块传来的PWM波,要对两个轮子测速,实际速度取俩轮的较大值。 软件上采用了TIM1的捕获模式,使用了通道CH1和CH4,分别对应PA8和PA11,先看下官方对输入捕获模式的描述: 在输入捕获模式下,当检测到ICx信号上相应的边沿后,计数器的当前值被锁存到捕获/比
[单片机]
STM32 I2C从机发送数据_中断方式
在调试stm32 I2C中断方式发送数据时,发现上篇介绍的内容有很多不足之处,对I2C时序也有了新的认识。 上篇文章介绍在数据发送完成后,发送NACK和STOP,然后向从机DR寄存器写了一个没用的数据,目的是为了清楚传输完成事件。其实文档中说的很明白,再倒数第二个数之后发送NACK和STOP,当时没有理解,现在看来确实是这样。 利用中断方法时,对发送NACK及STOP要求比较严格,调试时在多个位置都测试了下,发现只有在读取寄存器最后一个数据之前发送NACK和STOP,但要在主机接收事件之后,逻辑代码如下: //这段代码顺序不能改变,否则无法终止总线 { /*检测主机接收数据完成事件*/
[单片机]
单片机定时器实现实时时钟程序-lcd1602显示
本程序所用的原理图下载: http://www.51hei.com/f/HL-1V6.5.pdf ,单片机芯片使用的stc89c52;找到1602液晶部分的原理图即可.这是一张单片机开发板的整体图. 下面是程序的源代码: /** *功能:在LCD1602上显示当前时间(Time)和日期(Date) * 自动计时,可计时年月日(包括平年和闰年) * 可用按键调整时间和日期 * L ***************************** * C * Time: 00 Date: * * D * 00:00 2013-06-05 * * ****************************** *作者:徐冉
[单片机]
牛人对STM32的NVIC_PriorityGroupConfig使用及优先级分组方式理解
STM32有43个channel的settable的中断源;AIRC(Application Interrupt and Reset Register)寄存器中有用于指定优先级的4 bits。这4个bits用于分配preemption优先级和sub优先级,在STM32的固件库中定义如下 /* Preemption Priority Group -------------------------------------------------*/ #define NVIC_PriorityGroup_0 ((u32)0x700) /* 0 bits for pre-emption priority
[单片机]
STM32的GPIO电路原理详解
GPIO是通用输入/输出端口的简称,是STM32可控制的引脚。GPIO的引脚与外部硬件设备连接,可实现与外部通讯、控制外部硬件或者采集外部硬件数据的功能。 STM32F103ZET6芯片为144脚芯片,包括7个通用目的的输入/输出口(GPIO)组,分别为GPIOA、GPIOB、GPIOC、GPIOD、GPIOE、GPIOF、GPIOG,同时每组GPIO口组有16个GPIO口。通常简略称为PAx、PBx、PCx、PDx、PEx、PFx、PGx,其中x为0-15。 STM32的大部分引脚除了当GPIO使用之外,还可以复用为外设功能引脚,比如串口。 GPIO基本结构 每个GPIO内部都有这样的一个电路结构,这个结构在本文下面
[单片机]
<font color='red'>STM32</font>的GPIO电路原理详解
STM32开发中的位带操作机制
为了像51单片机一样能够对某个管脚单独操作,引入了位带操作这样的操作机制。 如下图,位带(Bit band)区就是就是你想单独操作的IO的区域,比如PA1、PA2。而位带别名区就是你给每一位重新起了个名字的那一片地址区域。可以看下表,M3内核存储器映射表,你能看到1M内存的BitBand区,还有与之对应的32M内存的BitBand别名区,因为你将每一位膨胀成为了一个32位的地址,所以相应的别名区的内存也会是位带区的32倍。 想进行位带操作,应该先去找该位对应的别名区的地址,找到了这个地址,对这个地址进行操作,那么实际上也就是对该位进行操作了。 官方给出了如下相应的计算公式: AliasAddr=0x42000000+((A‐0
[单片机]
<font color='red'>STM32</font>开发中的位带操作机制
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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