STM32 TIM2通道重映射 PWM 无输出波形

发布者:画意人生最新更新时间:2017-10-24 来源: eefocus关键字:STM32  TIM2  通道重映射  PWM  输出波形 手机看文章 扫描二维码
随时随地手机看文章

使用TIM2输出PWM来驱动舵机转动,使用TIM2CH3 (PB11引脚)输出驱动波形,通过数据手册知道,PB10默认的复用功能为USART3_TX,可以通过重映射作为TIM2_CH3用。

TIM2_CH3按照如下步骤配置为PWM输出模式:


1、配置时钟、管脚模式

         开启GPIOB、TIM2、AFIO时钟,配置PB10为复用功能推挽输出模式。

 

         //TIM2_CH3管脚重映射

         GPIO_PinRemapConfig(GPIO_PartialRemap2_TIM2,ENABLE);  //PB10 TIM2_CH3

2、配置TIM2相关参数

         //配置定时器时钟分频、定时周期

TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure);

 

         //配置CH3比较输出模式、PWM脉宽

        TIM_OC3Init(TIM2,&TIM_OCInitStructure);             //PB3 PWM输出

 

         //比较输出预装载使能

        TIM_OC3PreloadConfig(TIM2,TIM_OCPreload_Enable);     

 

         //定时器自装载使能

        TIM_ARRPreloadConfig(TIM2, ENABLE);

         //开中断

        TIM_ITConfig(TIM2, TIM_IT_CC3,  ENABLE );

 

        //使能定时器

        TIM_Cmd(TIM2, ENABLE);

 

         //配置中断优先级

  NVIC_InitStruct.NVIC_IRQChannel = TIM2_IRQn;

  NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0;

  NVIC_InitStruct.NVIC_IRQChannelSubPriority = 0;

  NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;

  NVIC_Init(&NVIC_InitStruct);

3、中断服务程序

         TIM_ClearITPendingBit(TIM2,TIM_IT_CC3);

         TIM_SetCompare3(TIM2,Pulse_value);           //改变PWM占空比

 

按照以上配置好后,编译下载没有看到期望的波形,但先前按照此步骤写的一个测试程序就能够正常输出波形。非常郁闷,比较两套程序,配置步骤一样,运行时各个寄存器的配置也完全一样,但是后来写的程序就是没有波形。找了一整天的问题,也没有发现问题的原因,下班后无意看到一篇文章的一句话,

STM32 某些通道PWM无法输出波形解决

如果同时开启默认的复用功能(USART3_TX)和重映射后的复用功能(TIM2_CH3)的时钟,外设功能会产生冲突,造成工作异常的情况。

 

检查工程中与USART3时钟初始化的代码,发现如下语句,

RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2|RCC_APB1Periph_USART3, ENABLE);

删除后,编译、下载,波形输出终于出来了。


关键字:STM32  TIM2  通道重映射  PWM  输出波形 引用地址:STM32 TIM2通道重映射 PWM 无输出波形

上一篇:stm32 高级定时器产生PWM
下一篇:stm32实际运用中遇到的问题

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

STM32的中断理解笔记
1、基本理解 ARM Cortex_m3内核支持256个中断(16个内核和240个外部)和可编程256级中断优先级的设置。然而,STM32并没有全部使用M3内核东西,STM32目前支持的中断为84个,16个内核加上68个外部以及16级可编程中断优先级的设置。 由于STM32只能管理16级中断的优先级,所以只是使用到中断优先级寄存器的高四位。 有两种优先级: (1)抢占式优先级,库函数设置为NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=x(x为0~15,具体要看下面的优先级组别的选择); (2)响应优先级,库函数设置为NVIC_InitStructure
[单片机]
STM32从入门到精通-万物溯源
本片介绍的是以工程师的观点来看如何学习STM32的开发。 工程师往往不是从头开始学或者从头开始搞一个作品,而是站在巨人的肩膀上,如何找一个巨人是工程师最需要掌握的能力,站在巨人的肩上可以轻松地做得更好、跑得更快。 题目中所说的“万物溯源”的意思是我们在刚开始学习时要正确找到学习的东西。 ST给用户提供了很多种开发板,包括 验证版本:功能齐全,价格昂贵; Discovery:常用功能,价格可以接受; Nucleo:极简核心板,根据arm公司要求定制。 Discovery板卡 Nucleo板卡 那我们应该选择什么样的板子来学习或设计呢? 比如说我们的设计需要一个液晶屏,那可以选择discovery板卡,它可以支持液晶显
[单片机]
<font color='red'>STM32</font>从入门到精通-万物溯源
一步步写STM32 OS【三】PendSV与堆栈操作
一、什么是PendSV PendSV是可悬起异常,如果我们把它配置最低优先级,那么如果同时有多个异常被触发,它会在其他异常执行完毕后再执行,而且任何异常都可以中断它。更详细的内容在《Cortex-M3 权威指南》里有介绍,下面我摘抄了一段。 OS 可以利用它“缓期执行”一个异常——直到其它重要的任务完成后才执行动 作。悬起 PendSV 的方法是:手工往 NVIC的 PendSV悬起寄存器中写 1。悬起后,如果优先级不够 高,则将缓期等待执行。 PendSV的典型使用场合是在上下文切换时(在不同任务之间切换)。例如,一个系统中有两个就绪的任务,上下文切换被触发的场合可以是: 1、执行一个系统调用 2、系统滴答定时器(S
[单片机]
一步步写<font color='red'>STM32</font> OS【三】PendSV与堆栈操作
STM32的DAC深入探究之一
1、简述: 12位数字输入,电压输出,DAC可以配置为8位或12位模式。有2个输出通道。在双DAC模式下,两个通道可以独立地工作。 特殊功能: 噪声波形生成,三角波形生成,外部触发转换,双DAC同时或者分别转换;每个通道都有DMA功能; 参考电压:2.4V~ 3.3V 因为一旦使能DAC通道,那么相应的GPIO便自动地连接到DAC转换器,因此,模拟输出前应该设置成模拟输入,目的是避免寄生的干扰和额外的功耗; 2、函数介绍: (1)缺省函数 DAC_Init(); (2)DAC_Init(DAC_Channel_1,&DAC_InitStructure);初始化函数 DAC_InitTypeDef
[单片机]
关于stm32 APB总线上的"接口时钟使能"与"外设时钟使能"
今天看 例说stm32 上的RTC时钟,发现他没有使能APB1的上BKP时钟,就能读出BKP寄存器里的内容.很是不解,又看了一遍发现APB总线上的时钟使能分为两种,一种是时接口时钟一种是外设时钟. 又仔细观查了一下时钟树发现在APB外设时钟使能寄存器上表现为接口时钟的都已经有了自己的时钟,再经实验证明所有这种不需要在APB上使能就有自已时钟的外设(即在APBxENR的某一位上代表的是这个外设的接口时钟的外设)在不需要使能接口时钟的情况下就能读出这种外设的寄存器的内容!
[单片机]
STM32的中断优先级详解
中断优先级设置步骤: 系统运行后先设置中断优先级分组。在主函数调用函数: void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup); 整个系统执行过程中,只设置一次中断分组。 针对每个中断,设置对应的抢占优先级和响应优先级: void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct);//配置过程 NVIC_InitTypeDef NVIC_InitStructure; NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;//串口1中断,此处可改为任何有中断功能
[单片机]
stm32专题二十:扩展SRAM
STM32 控制器芯片内部有一定大小的 SRAM 及 FLASH 作为内存和程序存储空间,但当程序较大,内存和程序空间不足时,就需要在 STM32芯片的外部扩展存储器了。注意,STM32F103VET6是不支持外扩SRAM的,因为引脚数量不够,而ZET6可以。 这里以IS62WV51216BLL为例: 芯片引脚图如下(40引脚来驱动): 结构框图如下: 引脚说明(要注意UB和LB,也就是高字节和低字节): 读操作时序要求: 可以看到,当给出地址后,最少要经过tAA的时间,才能去读取数据,以及输出时能后,要经过tODE的时间。只有满足这些时间要求,读到的数据才是正确的。 具体的时间参数: 同样的,写操作时
[单片机]
<font color='red'>stm32</font>专题二十:扩展SRAM
STM32的基本系统是怎样的?
电源 无论是否使用模拟部分和AD部分,MCU外围出去VCC和GND,VDDA、VSSA、Vref(如果封装有该引脚)都必需要连接,不可悬空 对于每组对应的VDD和GND都应至少放置一个104的陶瓷电容用于滤波,并接该电容应放置尽量靠近MCU 用万用表测试供电电压是否正确,调试时最好用数字电源供电,以便过压或过流烧坏板子,电压最好一步一步从进线端测试到芯片供电端 复位、启动选择 Boot引脚与JTAG无关。其仅是用于MCU启动后,判断执行代码的起始地址 在电路设计上可能Boot引脚不会使用,但要求一定要外部连接电阻到地或电源,切不可悬空;STM32三种启动模式对应的存储介质均是芯片内置的,它们是: 用户闪存 = 芯片内置的Fla
[单片机]
<font color='red'>STM32</font>的基本系统是怎样的?
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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