STM32配置最简单的PWM波 需要设置哪些东西?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STM32配置最简单的PWM波 需要设置哪些东西?相关的知识,希望对你有一定的参考价值。
用TIM2, TIM_Channel_3, GPIOA, GPIO_Pin_2。配置最简单的PWM波
/********************************************************************* 函数功能 :TIM定时器参数设置
* 入口参数 :None
* 出口参数 : None
* 其他描述 :
********************************************************************/
void TIM_Configuration(void)
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_TimeBaseStructure.TIM_Period = 1000; // 设置计数值
TIM_TimeBaseStructure.TIM_Prescaler = 0; // 分频值+1
TIM_TimeBaseStructure.TIM_ClockDivision = 0; // 时钟分割(可不管)
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; // 向上计数模式
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); // 写入配置
/********************************************************************
* 函数功能 :TIM输出通道设置
* 入口参数 :None
* 出口参数 : None
* 其他描述 :50%占空比
********************************************************************/
void TIM_OC_Configuration(void)
TIM_OCInitTypeDef TIM_OCInitStructure;
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; // 使用PWM功能
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse = 500; // 设置分割点
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; // 设置默认输出极性
TIM_OC3Init(TIM3, &TIM_OCInitStructure); // 将配置写入TIM2,通道2
TIM_OC3PreloadConfig(TIM3,TIM_OCPreload_Enable); // 将CCR预装载功能打开
/********************************************************************
* 函数功能 :GPIO初始化
* 入口参数 :None
* 出口参数 : None
* 其他描述 :
********************************************************************/
void TIM_GPIO_Configuration(void)
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; // PB0 -> TIM3通道3
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
/********************************************************************
* 函数功能 :pwm初始化
* 入口参数 :None
* 出口参数 : None
* 其他描述 :
********************************************************************/
void tim_init(void)
// 给时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
TIM_GPIO_Configuration( ); // IO初始化
TIM_Configuration( ); // 定时器配置
TIM_OC_Configuration( ); // 输出通道设置
TIM_ARRPreloadConfig(TIM3, ENABLE); // 将APR预装载功能打开
TIM_Cmd(TIM3, ENABLE); // 开始计数
追问
系统时钟配置了吗
追答系统时钟和GPIO的时钟不在这里
追问肯定还要配置系统时钟啊。而且我改了例程里面GPIO_Pin以后就不能输出PWM波了。改回原来的Pin又能输出了,难道PWM和GPIO还有绑定的吗?
追答有,上面的代码里用的是TIM3的通道3对应PB0
参考技术A 需要帮你做吗STM32F0xx_DAC输出电压配置详细过程
前言
数模转换DAC的功能在现实应用中所占的分量,相对定时器TIM、串口USART等要小的多,这也是ST为什么内部集成DAC模块相对来说不是那么多的原因。但在有需要使用数模转换功能的项目中,自带的这个DAC模块基本上可以取代外挂一片DAC芯片,因为自带的这个模块功能也很强大,只需要简单的配置一下就可以输出指定的电压信号(如:PWM波形、三角波、正选波),中途无需要软件干预。当然,今天提供的软件工程只有输出电压的基本操作,没有输出特殊的波形。但是,当你了解输出电压的原理之后,以后你想输出这些特殊的波形,也就容易多了。
STM32F0系列的DAC功能大部分是单通道,相对比较简单。只有STM32F072系列芯片是两路输出通道、有DAC控制单元输出三角波形等。
今天主要是总结DAC输出电压基本操作。输出三角波、正选波相对复杂一点的功能后期整理一份,敬请等待。
本着免费分享的原则,如果你觉得分享的内容对你有用,认可我分享的文章,就请用微信搜索“EmbeddDeveloper” 或者扫描下面二维码、关注,还有更多精彩内容等着你。
下载
ST标准外设库和参考手册、数据手册等都可以在ST官网下载,你也可以到我的360云盘下载。关于F0系列芯片的参考手册有多个版本(针对F0不同芯片),但有一个通用版本,就是“STM32F0x128参考手册V8(英文)2015-07”建议参考该手册,以后如果你换用一种型号芯片也方便了解。
今天的软件工程下载地址(360云盘):
https://yunpan.cn/cSIyxQKbvcQi6 访问密码 3e6b
STM32F0xx的资料可以在我360云盘下载:
https://yunpan.cn/cS2PVuHn6X2Bj 访问密码 8c37
准备工作
今天总结的软件工程是基于“TIM基本延时配置详细过程”修改而来,因此需要将该软件工程下载准备好。打开软件工程,新建源程序文件(dac.c 和 dac.h),在工程中添加新建的源程序文件dac.c和使用到标准外设库stm32f0xx_dac.c。添加的源代码响应的源文件代码就OK了。
数模转换原理
从系统框图中可以看的出,这个控制单元相对比较简单,所以软件在操作的这些寄存器的时候也是相对较简单的。
文章开头说了DAC可以输出指定的电压信号(如:PWM波形、三角波、正选波),其实这些信号产生的原理很简单,就是使用定时器来触发DAC输出,信号幅度需要用特定的算法生成(更加项目需求而定)。当然,今天提供的工程是固定输出一个电压信号,只需配置输出值就行了。
配置过程详情
①RCC时钟
该函数位于bsp.c文件下面;
我个人习惯第一步配置时钟,ST官方提供的例程也是把配置时钟放在前面。关于RCC时钟的配置比较重要,有好几次我就是由于忘记配置相应RCC时钟,让我找了很久的问题,最后才发现是RCC时钟没有配置。
注意:
外设时钟不要随便添加,比如:RCC_APB1外设不要配置在RCC_APB2时钟里面【如:RCC_APB2PeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);这样能编译过,但是错误的】
我每次都提醒RCC时钟,是因为很多人就是因为时钟而导致软件运行有问题,所以,提醒更多人要注意配置RCC.
②DAC输出引脚配置
该函数位于dac.c文件下面;
注意:
这里引脚PA4配置是针对输出通道而定,必须匹配才行(请看数据手册中的引脚说明)。F0芯片中只有STM32F072才有两个通道,也就是只有它才能配置PA5。
③DAC输出配置
该函数位于dac.c文件下面;
重点注意:
这里红色标记三项都需要注意,特别的产生波形这一个参数,只有F0芯片中只有STM32F072才能是别的值,其他芯片都是固定这个参数。同样,通道也是。
④输出电压的计算
该函数位于dac.c文件下面;
由于F0芯片的参考电压固定为VDD,不像其他型号可以使用外部参考电压,所以这里的计算方式中3.3就是参考电压的值,4096是2的12次方。不懂的请自行想一下哦。
说明
或许你硬件芯片不是提供工程里面的芯片,但是STM32F0的芯片软件兼容性很好,可以适用于F0其他很多型号的芯片,甚至是F2、F4等芯片上(具体请看手册、或者亲自测试)。
今天的工程是基于工程“STM32F0xx_TIM基本延时配置详细过程”修改而来,以上实例总结仅供参考,若有不对之处,敬请谅解。
最后
如果你喜欢我分享的内容,你又想了解更多相关内容,请关注文章开头的微信公众号,新内容持续更新中,后期将会有更多精彩内容出现。
以上是关于STM32配置最简单的PWM波 需要设置哪些东西?的主要内容,如果未能解决你的问题,请参考以下文章