STM32F103输出可变频率的PWM信号
2019-08-21 来源:eefocus
关于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;”的方式进行。那么我们只需要在合适的时候调用这个函数,并传入需要的合适值,便能够达到我们所想要的效果了。
- 基于STM32F103的AS5600磁编码器角度数据采集
- 基于STM32F103单片机的示波器设计
- STM32F103C8T6开发板+GY521制作无刷四轴飞控详细图文教程
- 入门STM32F103-GPIO输入
- STM32F103C8T6制作舵机/电调测试仪详细图文教程 | 定时器触发ADC | DMA传输 | PWM输出
- STM32F103的硬件I2C调试记录
- 【讲义】STM32的IAP技术,基于CAN总线的STM32F103 BootLoader设计
- 【 STM 系列 】STM32F103 流水灯仿真
- 基于STM32F103C8T6和L298N电机驱动模块调速实验NO.1
- 使用Makefile在Windows环境下编译STM32F103C8T6标准库工程,脱离Keil的指南
- 六大全新产品系列推出,MCX A微控制器家族迎来创新
- 意法半导体全新STM32C5系列,重新定义入门级微控制器性能与价值,赋能万千智能设备
- 从控制到系统:TI利用边缘AI重塑嵌入式MCU的边界
- 模组复用与整机重测在SRRC、CCC、CTA/NAL认证中的实践操作指南
- 有源晶振与无源晶振的六大区别详解
- 英飞凌持续巩固全球微控制器市场领导地位
- 使用 Keil Studio for Visual Studio Code开发 STM32 设备
- LoRa、LoRaWAN、NB-IoT与4G DTU技术对比及工业无线方案选型分析
- 意法半导体中国本地造STM32微控制器启动规模量产
- 蓝牙信道探测技术原理与开发套件实践
- I2C复位期间,scl sda是高,复位后,scl sda产生一个周期的信号后,一直拉低
- WinCE 4.2增加一个分区的问题
- ESP32的电子书:MicroPython for ESP32 Development Workshop
- 为什么三极管 9013 的 基极-发射极饱和压降是1.2v 不应该是 0.7V 吗
- 今天上午10:00 TI&文晔邀请您共赴一场豪门盛宴【有奖直播:C2000在电机控制中的应用】
- STM32V3.0.0库编译出错
- waveout系列函数如何播放连续的PCM片段
- 2013 TI 车用 LDO 产品介绍
- wince下数据存储问题
- 【那些让人受不了的BUG】这不是BUG,是“新特性”——流氓特性




