历史上的今天

今天是:2024年08月30日(星期五)

正在发生

2021年08月30日 | 玩转STM32CubeMX | PWM输出

发布者:科技探险者 来源: eefocus关键字:STM32CubeMX  PWM输出  脉冲宽度调制 手机看文章 扫描二维码
随时随地手机看文章

1.PWM简介

脉冲宽度调制(PWM,Pulse Width Modulation)简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。即对脉冲宽度的控制,PWM原理如下图示:

图中我们假定定时器是工作在向上计数PWM模式,且当CNT < CCRx时输出0,当CNT >= CCRx时输出1,那么就可以得到如上的PWM示意图:当CNT < CCRx时,IO口输出低电平;当CNT >= CCRx时,IO口输出高电平;当CNT值达到ARR的时候,重新归零,然后重新向上计数,依次循环。改变CCRx的值就可以改变PWM输出的占空比,改变ARR的值就可以改变PWM输出的频率

  • 输出模式有两种:PWM1和PWM2

  • 输出极性:高电平有效和低电平有效

2.硬件设计

本实验通过TIM3的通道1输出PWM信号,控制D7指示灯的亮度:

*     指示灯D7

*     定时器TIM31.2.3.


此处由于TIM3的CH1通道对应的管脚是PA6,开发板上的LED并没有连接在PA6上,如果要让这个通道映射到LED所接的IO口上,需要使用GPIO的复用功能重映射功能将PA6重映射到PC6

3.软件设计

3.1 STM32CubeMX设置

➡️ RCC设置外接HSE,时钟设置为72M;TIM3的时钟挂载在APB1 Time Clocks上为72MHz

➡️ 选择TIM3、设置定时器时钟源为内部时钟源、设置通道1为PWM模式(对应管脚PA6自动开启,此时应该选中PC6的TIM3_CH1完成重映射)、自行选择是否开启定时器中断

➡️ 预分频系数设置为72-1,向上计数,自动重装载值设为500-1,则计时器时钟频率为1MHz,计时器周期为1us,定时器溢出周期(即PWM周期)为 500 * 1 = 500us,溢出频率(即PWM频率)为1/500us = 2KHz

➡️ PWM模式选择PWM1,Pulse默认为0,PWM极性设置为低电平(由于LED低电平点亮)

➡️输入工程名,选择路径(不要有中文),选择MDK-ARM V5;勾选Generated periphera initialization as a pair of ‘.c/.h’ files per IP ;点击GENERATE CODE,生成工程代码


3.2 MDK-ARM软件编程


➡️ 在tim.c文件中可以看到定时器的初始化函数


void MX_TIM3_Init(void)

{

  TIM_ClockConfigTypeDef sClockSourceConfig = {0};

  TIM_MasterConfigTypeDef sMasterConfig = {0};

  TIM_OC_InitTypeDef sConfigOC = {0};


  htim3.Instance = TIM3;

  htim3.Init.Prescaler = 72-1;

  htim3.Init.CounterMode = TIM_COUNTERMODE_UP;

  htim3.Init.Period = 500-1;

  htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;

  htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;

  if (HAL_TIM_Base_Init(&htim3) != HAL_OK){

    Error_Handler();

  }

  sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;

  if (HAL_TIM_ConfigClockSource(&htim3, &sClockSourceConfig) != HAL_OK){

    Error_Handler();

  }

  if (HAL_TIM_PWM_Init(&htim3) != HAL_OK){

    Error_Handler();

  }

  sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;

  sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;

  if (HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig) != HAL_OK){

    Error_Handler();

  }

  sConfigOC.OCMode = TIM_OCMODE_PWM1;

  sConfigOC.Pulse = 0;

  sConfigOC.OCPolarity = TIM_OCPOLARITY_LOW;

  sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;

  if (HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_1) != HAL_OK){

    Error_Handler();

  }

  __HAL_TIM_DISABLE_OCxPRELOAD(&htim3, TIM_CHANNEL_1);

  HAL_TIM_MspPostInit(&htim3);

}


➡️ 在main函数中编写代码,周期性的改变CCR1的值来改变PWM占空比


int main(void){

  /* USER CODE BEGIN 1 */

  uint8_t dir = 1;

  uint16_t ledpwmval = 0;

  /* USER CODE END 1 */

  HAL_Init();

  SystemClock_Config();

  MX_GPIO_Init();

  MX_TIM3_Init();

  /* USER CODE BEGIN 2 */

  //开启定时器PWM输出

  HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1);

  /* USER CODE END 2 */

  while (1){

    HAL_Delay(10);

    if(dir)

        ledpwmval++;

    else

ledpwmval--;

    if(ledpwmval > 300)

dir = 0;

    if(ledpwmval == 0)

dir = 1;

    //更改CCR1的值来改变PWM的占空比

    TIM3->CCR1 = ledpwmval;

  }

}


4.下载验证

编译无误后下载到开发板,可以看到D7指示灯有暗变亮,再由亮变暗,呈现呼吸灯的效果

关键字:STM32CubeMX  PWM输出  脉冲宽度调制 引用地址:玩转STM32CubeMX | PWM输出

上一篇:stm32cubeMX配置串口
下一篇:stm32cubemx配置编码器

推荐阅读

8月15日-8月19日,在北京亦庄国际会展中心举办了为期五天的2018世界机器人大会。展区内,国产与外资机器人同台亮相,机器人的应用场景覆盖到各行各业。《中国机器人产业发展报告2018》显示,过去6年我国机器人市场平均增长率接近30%。2018年国内机器人市场规模预计达87.4亿美元,约占全球1/3。但华丽的数据背后,也有一些刺眼的“冷”数据。比如,我国连...
8月29日,在“2019全球创投峰会”上,“西安龙门榜TOP20”、“2019西安未来之星TOP100”评选榜单正式揭晓。据悉,“西安龙门榜”是西安市在打造“西安未来之星”外新增设的榜单,旨在选出有上市前景的优秀本土企业,进一步完善西安企业梯度培育,针对性差异化服务企业,助力入围企业与全球优秀投资机构深度对接。值得注意的是,今年评选出的“西安龙门榜TO...
8月28日,商务部会同科技部调整发布了《中国禁止出口限制出口技术目录》。此次调整有何意义?带来哪些管理新规?对科创企业影响几何?记者就此采访了长期跟踪研究技术贸易法规的中国对外经济贸易大学教授崔凡。对技术出口实行负面清单管理是国际惯例此次并非我国首次调整《中国禁止出口限制出口技术目录》。商务部服贸司负责人就此答记者问时说,上一次目...
近日,国产射频芯片制造商广西芯百特微电子有限公司(简称“芯百特”)宣布完成近两亿元人民币的B轮融资,本轮融资由珠海横琴零壹资管十一号投资合伙(有限合伙)、福建鼎保股权投资合伙企业(有限合伙)、南京鹰盟中芯启航创业投资合伙企业(有限合伙)领投,宁波大榭鹏创股权投资合伙企业(有限合伙)、海南玖睿捌号私募股权投资基金合伙企业(有限合伙...

史海拾趣

问答坊 | AI 解惑

I2C总线忽悠记

一般串行数据通讯都有时钟和数据之分,有异步和同步之别. 有单线,双线和三线等. I2C肯定是2线的(不算地线). I2C协议确实很科学,比3/4线的SPI要好,当然线多通讯速率相对就快了. I2C的原则是: 在SCL=1(高电平)时,SDA千万别忽悠!!! 否 ...…

查看全部问答∨

Protel99SE设计软件使用手册

解决一下在使用软件过程中经常需要查找资料的难题!建议大家先读一遍再实践!…

查看全部问答∨

职场警示录:别做工作中的笨角色

职场上,学习高深的理论,钻研有难度的技术,对于职场人来说都算不上是难事,只要你肯下功夫,都能攻下堡垒。最难的就是与人打交道,特别是与那些可怕的人打交道。所以,千万小心,别做职场里的笨角色。   笨事一:你不理会谣言   错了!谣 ...…

查看全部问答∨

51实用子程序

51实用子程序,声明:纯汇编语言…

查看全部问答∨

君正的挂起后不能唤醒进入正常工作状态,如何解决?急急急急急!!!请高手指点指点

君正的挂起后不能唤醒进入正常工作状态,如何解决?急急急急急!!! 背光的调节从哪里控制?按键是可调的,应用程序不可用,请高手指点指点!!!!谢谢!!!!!…

查看全部问答∨

help me!WINCE系统启动问题?

我用的QQ2440的开发板,从nor flash启动将一个系统nk.bin从烧到开发板后启动正常,然后关机从nand flash启动却一直停留在开发板的欢迎界面,而不能启动系统,请问是否有人遇到过这种问题,为什么会这样呢?…

查看全部问答∨

eboot的问题

eboot在startup打开mmu后,操作虚拟地址可以点灯,但是b main 后再main函数点灯就无反应,怎么问题。…

查看全部问答∨

pb定制新SDK的问题

使用的环境是vc2005和pb5.0 用pb5定制新sdk,配置开发语言的时候,只发现evc4.0,只好选了,勾上cf。 sysgen,mksdk,安装好这个sdk, 在vc2005下,在工具/仿真设备下 ,出现 由于前面的错误,Smart Device Configuration Package ({D245F354-3 ...…

查看全部问答∨

自动排气扇电路

本帖最后由 jameswangsynnex 于 2015-3-3 20:04 编辑 …

查看全部问答∨

菜鸟之基于SX1212的低功耗无线模块

基于SX1212的低功耗无线模块,主控芯片采用同样低功耗的STM8L101.其中SX1212和MCU之间采用SPI通信。自己刚学单片机不久,经验不足,英语也不太好。所以在看1212的手册时有点吃力,刚开始了解通信这方面,时序图也没看过几个(希望前辈们能分享点经 ...…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
更多往期活动
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved