STM32F103输出可变频率的PWM信号
2018-03-17 08:07
706 查看
关于STM32定时器TIM4输出可变频率PWM控制信号的方法及原理 关于TIM4的使用我们首先必须要了解到一点,TIM4是什么?对于STM32内核来说,它是属于片上外设。内核如何使用片上外设?当然要通过内部的总线结构。以STM32F103为例,其内部总线结构如下两幅图所示:
通过这内部总线结构图我们知道,我们所想配置并使用的TIM4是挂载在内部中线APB1上的,所以我们知道我们要使用的库函数必然是和APB1总线相关的。期中与之相关的库函数包括:
RCC_APB1PeriphClockCmd()、RCC_APB1PeriphResetCmd() 其中RCC_APB1PeriphClockCmd()是用于使能或者失能 APB1 外设时钟的库函数,RCC_APB1PeriphResetCmd()是用于强制或者释放高速 APB(APB2)外设复位的函数,那么显然我们需要用到库函数RCC_APB1PeriphClockCmd()来使能挂载在APB1总线上的片上外设TIM4,然后我们才能使用这个片上外设。
在具体的使用前我们还需要对外设进行相应的配置,就是设置与之相对应的寄存器。但好在库函数已经对这些操作进行了封装,封装了相应的数据结构,利用这些抽象起来的数据结构,我们可以对这些寄存进行整体的设置。所以我们需要定义处相应的数据类型的数据。
TIM_TimeBaseInitTypeDef类型的数据就是官方函数库给出的用于配置TIMx的一种数据类型。定义好了以后,我们就需要利用相应的初始化函数来对TIMx进行相应的初始化操作,也就是调用TIM_TimeBaseInit()函数,并将设置好了数据的TIM_TimeBaseInitTypeDef类型的数据作为参数传入。
因为我们需要的是利用TIM4向外部输出PWM信号,就是片内外设需要向片外传送信号,所以我们需要通过相应的引脚才能达到我们的目的。既然如此我们就必须要配置使能合适的引脚。还有一点就是前面我们选择的是TIM4来作为PWM信号源,也就是使用TIM4的复用功能,查阅官方资料,我们不难了解TIM4的复用功能被映射到了GPIOB(也就是PB),然后我们继续查看TIM4的重映射表,选择我们所想要的IO口,这里我们选择PB8,那么我们同时就知道了相应的TIM4需要使用的相应通道为TIM4_CH3(通道三),TIM4_REMAP 需要设置为0。
以上的描述具体到代码上,我们还需要定义TIM_OCInit_Structure类型的数据来配置TIM4的PWM的具体参数,以及使用TIM_OC3Init()来完成TIM4的PWM的初始配置。当然也不能忘记定义GPIO_InitTypeDef类型的数据和使用GPIO_Init()来配置相应的IO口。
最后总结出我们在代码层所需要做的事情如下:
1、定义GPIO_InitTypeDef类型、TIM_TimeBaseInitTypeDef类型、TIM_OCInitTypeDef的数据,并进行设置具体参数。
2、RCC_APB1PeriphClockCmd()和CC_APB2PeriphClockCmd()使能IO口和定时器
3、调用GPIO_Init()、TIM_TimeBaseInit()、TIM_OC3Init()将我们在前面所设置的数据写入真实的内部寄存器。
4、调用TIM_OC3PreloadConfig()来配置TIM4的输出通道为通道三。
5、最后调用TIM_Cmd()来开启我们的定时器。
那么通过以上的步骤我们就能完成相应的基本配置,使得PB8能够输出TIM4产生一个固定占空比的脉冲信号。
要实现产生占空比可调的信号,我们可以将以上的操作进行封装,封装成一个函数:void Timer4_Init(u16 Period)。Period作为外部参数传入,然后内部设置TIM4的TIM_Period 时,通“TIM_TimeBaseInit_Structure.TIM_Period= Period;”的方式进行。那么我们只需要在合适的时候调用这个函数,并传入需要的合适值,便能够达到我们所想要的效果了。
通过这内部总线结构图我们知道,我们所想配置并使用的TIM4是挂载在内部中线APB1上的,所以我们知道我们要使用的库函数必然是和APB1总线相关的。期中与之相关的库函数包括:
RCC_APB1PeriphClockCmd()、RCC_APB1PeriphResetCmd() 其中RCC_APB1PeriphClockCmd()是用于使能或者失能 APB1 外设时钟的库函数,RCC_APB1PeriphResetCmd()是用于强制或者释放高速 APB(APB2)外设复位的函数,那么显然我们需要用到库函数RCC_APB1PeriphClockCmd()来使能挂载在APB1总线上的片上外设TIM4,然后我们才能使用这个片上外设。
在具体的使用前我们还需要对外设进行相应的配置,就是设置与之相对应的寄存器。但好在库函数已经对这些操作进行了封装,封装了相应的数据结构,利用这些抽象起来的数据结构,我们可以对这些寄存进行整体的设置。所以我们需要定义处相应的数据类型的数据。
TIM_TimeBaseInitTypeDef类型的数据就是官方函数库给出的用于配置TIMx的一种数据类型。定义好了以后,我们就需要利用相应的初始化函数来对TIMx进行相应的初始化操作,也就是调用TIM_TimeBaseInit()函数,并将设置好了数据的TIM_TimeBaseInitTypeDef类型的数据作为参数传入。
因为我们需要的是利用TIM4向外部输出PWM信号,就是片内外设需要向片外传送信号,所以我们需要通过相应的引脚才能达到我们的目的。既然如此我们就必须要配置使能合适的引脚。还有一点就是前面我们选择的是TIM4来作为PWM信号源,也就是使用TIM4的复用功能,查阅官方资料,我们不难了解TIM4的复用功能被映射到了GPIOB(也就是PB),然后我们继续查看TIM4的重映射表,选择我们所想要的IO口,这里我们选择PB8,那么我们同时就知道了相应的TIM4需要使用的相应通道为TIM4_CH3(通道三),TIM4_REMAP 需要设置为0。
以上的描述具体到代码上,我们还需要定义TIM_OCInit_Structure类型的数据来配置TIM4的PWM的具体参数,以及使用TIM_OC3Init()来完成TIM4的PWM的初始配置。当然也不能忘记定义GPIO_InitTypeDef类型的数据和使用GPIO_Init()来配置相应的IO口。
最后总结出我们在代码层所需要做的事情如下:
1、定义GPIO_InitTypeDef类型、TIM_TimeBaseInitTypeDef类型、TIM_OCInitTypeDef的数据,并进行设置具体参数。
2、RCC_APB1PeriphClockCmd()和CC_APB2PeriphClockCmd()使能IO口和定时器
3、调用GPIO_Init()、TIM_TimeBaseInit()、TIM_OC3Init()将我们在前面所设置的数据写入真实的内部寄存器。
4、调用TIM_OC3PreloadConfig()来配置TIM4的输出通道为通道三。
5、最后调用TIM_Cmd()来开启我们的定时器。
那么通过以上的步骤我们就能完成相应的基本配置,使得PB8能够输出TIM4产生一个固定占空比的脉冲信号。
要实现产生占空比可调的信号,我们可以将以上的操作进行封装,封装成一个函数:void Timer4_Init(u16 Period)。Period作为外部参数传入,然后内部设置TIM4的TIM_Period 时,通“TIM_TimeBaseInit_Structure.TIM_Period= Period;”的方式进行。那么我们只需要在合适的时候调用这个函数,并传入需要的合适值,便能够达到我们所想要的效果了。
相关文章推荐
- stm32输出可调频率和可调占空比的pwm信号
- 动态更改PWM波频率并输出一定数量PWM脉冲
- STM32 自定义频率与占空比PWM输出的方法
- STM32F4_TIM输出PWM波形(可调频率、占空比)
- STM32F4_TIM输出PWM波形(可调频率、占空比)
- STM32F4 定时器TIM1输出七路PWM信号【使用库函数】
- STM32 使用TIM2_CH1(PA15) 输出10K PWM信号
- 详解STM32的PWM输出及频率和脉宽(占空比)的计算——寄存器配置六步曲!
- STM32一个Timer输出4路不同频率、可调占空比的PWM
- STM32一个Timer输出4路不同频率、可调占空比的PWM
- LPC17xx之PWM输出脉宽和频率(周期)设置
- STM32 多个定时器PWM波输出频率不同。
- STM32F4 定时器TIM1输出七路PWM信号【使用库函数】
- STM32TIM输出比较的三种模式及一个定时器如何输出频率不同的PWM波
- 标记 Arduino M0 板子如何更改PWM输出频率
- stm32f103,定时器3通道3和4上能输出PWM
- 如何利用STM32通用定时器实现输出两路占空比和频率可调的互补PWM
- STM32F103 TIM1输出PWM设置
- 用51单片机做信号发生器,同时输出四种频率的方波
- 定时器的输出比较模式产生的PWM波的频率计算