找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4928|回复: 1
收起左侧

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

[复制链接]
ID:81424 发表于 2018-11-26 13:14 | 显示全部楼层 |阅读模式
STM32F103C8T6:
stm32的pwm输出只要设置好在主循环前调用一次即可, 对用的IO就可以持续的输出PWM
TIM4配置PWM过程程序:
A.png


J-LINK仿真配置

1. 选择“ Options for Target” 选项

1.png

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

3. 配置好编译下
3.png



4.  选择Debug模式调试
4.png

5. 进入Debug模式后选择
5.png
6. 配置pwm输出引脚
6.png

7.png



8.png

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

7. 开始仿真运行

9.png


0.png


贴一下程序记录下:
  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 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:406128 发表于 2018-11-27 10:07 | 显示全部楼层
多谢大佬的教程,很多时候我也想发些什么,但是技术达不到,怕误人
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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