找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5256|回复: 1
打印 上一主题 下一主题
收起左侧

STM32学习(设置TIM4输出4路 pwm J-LINK仿真验证)源码与教程

[复制链接]
跳转到指定楼层
楼主
STM32F103C8T6:
stm32的pwm输出只要设置好在主循环前调用一次即可, 对用的IO就可以持续的输出PWM
TIM4配置PWM过程程序:



J-LINK仿真配置

1. 选择“ Options for Target” 选项


2. 在“ Debug” 中选择“Use Simulator" 注意下面的配置


3. 配置好编译下




4.  选择Debug模式调试


5. 进入Debug模式后选择

6. 配置pwm输出引脚








配置好输出引脚直接”close“掉

7. 开始仿真运行







贴一下程序记录下:
  1. /*
  2. //TIM4 CH1 PWM 输出设置
  3. //PWM 输出初始化
  4. //arr:自动重装值
  5. //psc:时钟预分频数
  6. STM32F103C8T6
  7. PB6 - TIM4_CH1
  8. PB7 - TIM4_CH2
  9. PB8 - TIM4_CH3
  10. PB9 - TIM4_CH4
  11. */
  12. void Tim4_PWM_Init(u16 arr,u16 psc)
  13. {
  14.         GPIO_InitTypeDef GPIO_InitStructure;
  15.     TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
  16.     TIM_OCInitTypeDef TIM_OCInitStructure;

  17.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE); //使能 TIMx 外设
  18.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //使能 PB 时钟
  19.         TIM_DeInit(TIM4);

  20.   //设置该引脚为复用输出功能,输出 TIM4 CH1 的 PWM 脉冲波形
  21.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9; //TIM4_CH1
  22.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用功能输出
  23.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  24.         GPIO_Init(GPIOB, &GPIO_InitStructure); //初始化 GPIO

  25.         TIM_TimeBaseStructure.TIM_Period = arr; //设置自动重装载周期值
  26.         TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置预分频值 不分频
  27.         TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim
  28.         TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上计数
  29.         TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure); //初始化 TIMx
  30.         
  31.         
  32.         TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //CH1 PWM2 模式
  33.         TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
  34.         TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Disable;
  35.         
  36.         
  37.         TIM_OCInitStructure.TIM_Pulse = 200; //设置待装入捕获比较寄存器的脉冲值
  38.         TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //OC1 高电平有效
  39.         TIM_OC1Init(TIM4, &TIM_OCInitStructure); //根据指定的参数初始化外设 TIMx
  40.         TIM_OC2PreloadConfig(TIM4, TIM_OCPreload_Enable); //CH1 预装载使能
  41.         
  42.         
  43.         TIM_OCInitStructure.TIM_Pulse = 400; //设置待装入捕获比较寄存器的脉冲值
  44.         TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //OC2 高电平有效
  45.         TIM_OC2Init(TIM4, &TIM_OCInitStructure); //根据指定的参数初始化外设 TIMx
  46.         TIM_OC2PreloadConfig(TIM4, TIM_OCPreload_Enable); //CH2 预装载使能
  47.         
  48.         
  49.         TIM_OCInitStructure.TIM_Pulse = 600; //设置待装入捕获比较寄存器的脉冲值
  50.         TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //OC1 高电平有效
  51.         TIM_OC3Init(TIM4, &TIM_OCInitStructure); //根据指定的参数初始化外设 TIMx
  52.         TIM_OC3PreloadConfig(TIM4, TIM_OCPreload_Enable); //CH3 预装载使能
  53.         
  54.         
  55.         TIM_OCInitStructure.TIM_Pulse = 800; //设置待装入捕获比较寄存器的脉冲值
  56.         TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //OC1 高电平有效
  57.         TIM_OC4Init(TIM4, &TIM_OCInitStructure); //根据指定的参数初始化外设 TIMx
  58.         TIM_OC4PreloadConfig(TIM4, TIM_OCPreload_Enable); //CH4 预装载使能
  59.         
  60.         
  61.         TIM_ARRPreloadConfig(TIM4, ENABLE); //使能 TIMx 在 ARR 上的预装载寄存器
  62. //        TIM_CtrlPWMOutputs(TIM4,ENABLE);  //MOE 主输出使能,高级定时器必须开启
  63.         TIM_Cmd(TIM4, ENABLE); //使能 TIMx
  64. }
复制代码

评分

参与人数 1黑币 +100 收起 理由
admin + 100 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:406128 发表于 2018-11-27 10:07 | 只看该作者
多谢大佬的教程,很多时候我也想发些什么,但是技术达不到,怕误人
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表