| 银杏科技有限公司旗下技术文档发布平台 | 
	
		| 技术支持电话 | 0379-69926675-801 | 
	
		| 技术支持邮件 | Gingko@vip.163.com | 
	
		| 版本 | 日期 | 作者 | 修改内容 | 
	
		| V1.0 | 2020-07-27 | gingko | 初次建立 | 
STM32CubeMX教程六——PWM输出实验
1. 在主界面选择File–>New Project   或者直接点击ACCEE TO MCU SELECTOR  
 
2. 出现芯片型号选择,搜索自己芯片的型号,双击型号,或者点击Start Project进入配置在搜索栏的下面,提供的各  种查找方式,可以选择芯片内核,型号,等等,可以帮助你查找芯片。本实验选取的芯片型号为:STM32H750IBKx。
 
3. 配置RCC,使用外部时钟源
 
4. 时基源选择SysTick
 
5. 设置定时器
 
在Parameter Settings页面配置
 
6. 引脚模式配置
 
7. 时钟源设置,选择外部高速时钟源,配置为最大主频
 
8. 工程文件的设置, 这里就是工程的各种配置 我们只用到有限几个,其他的默认即可  IDE我们使用的是 MDK V5.27
 
9. 点击Code Generator,进行进一步配置
 
-  Copy all used libraries into the project folder 
-  将HAL库的所有.C和.H都复制到所建工程中 
-  Copy only the necessary library files 
-  只复制所需要的.C和.H(推荐) 
-  Add necessary library files as reference in the toolchain project configuration file 
-  不复制文件,直接从软件包存放位置导入.C和.H 
-  自行选择方式即可 
10. 然后点击GENERATE CODE  创建工程
 
创建成功,打开工程。
 
实验六:PWM输出实验——呼吸灯
一、实验目的与意义
-  了解STM32 TIMER结构 
-  了解STM32 TIMER 特征 
-  掌握TIMER使用方法 
-  掌握STM32 HAL库中TIMER属性的配置方法 
-  掌握KEILMDK 集成开发环境使用方法 
 
二、实验设备及平台
- 
-  JLINK(或相同功能)仿真器 
-  Micro USB线缆 
-  Keil MDK 开发平台 
-  STM32CubeMX开发平台 
-  装有WIN XP(及更高版本)系统的计算机 
 
三、实验原理
1、PWM简介
-  PWM即脉冲宽度调制,是一种模拟控制方式,其根据相应载荷的变化来调制晶体管基极或MOS管栅极的偏置,来实现晶体管或MOS管导通时间的改变,从而实现开关稳压电源输出的改变。这种方式能使电源的输出电压在工作条件变化时保持恒定,是利用微处理器的数字信号对模拟电路进行控制的一种非常有效的技术。 
-   PWM的主要应用:在STM32中如调节屏幕亮度、音调等应用都可以通过PWM控制占空比进行实现。下面我们会为大家举例介绍如何利用PWM控制LED的亮暗,以实现呼吸灯的效果。 
 
2、PWM的工作原理
-  脉宽调制基本原理:其控制方式就是对电路开关器件的通断进行控制,使输出端得到一系列幅值相等的脉冲,用这些脉冲来代替正弦波或所需要的波形。也就是在输出波形的半个周期中产生多个脉冲,使各脉冲的等值电压为正弦波形,所获得的输出平滑且低次谐波少。按一定的规则对各脉冲的宽度进行调制,即可改变电路输出电压的大小,也可改变输出频率。 
-  脉宽调制原理: 
-  脉宽调制模式可以生产一个由TIMx_ARR寄存器确定频率,由TIMx_CCRx确定占空比的信号。如下图所示: 
 
-  图中可知0到t2为一个周期时间,而占空比由CCRx值决定。一个周期时间可以由以下公式计算: 
-  T=(ARR+1)(PSC+1)/TCLK 
-  其中:ARR为重新装载值;PSC为预分频系数;TCLK为定时器时钟频率。如本次实验中TCLk为240M,选择ARR为499,PSC为239,其一个周期为0.5ms。 
-  PWM工作步骤解析:         
-  (1)CCR1捕获比较值寄存器设置比较值,将其与当前值寄存器的值比较,要说明的是修改TIM_CCMR1寄存器的OC1M[2:0]位可控制 PWM模式,方法如下: - 
-  110:PWM模式1——向上计数时,一旦TIMx_CNT<TIMx_CCR1时通道1为有效电平,否则为无效电平;在向下计数时,一旦TIMx_CNT>TIMx_CCR1时通道1为无效电平(OC1REF=0),否则有效电平(OC1REF=1)。 
-  111:PWM模式2——在向上计数时,一旦TIMx_CNT<TIMx_CCR1时通道1为无效电平,否则为有效电平;在向下计数时,一旦TIMx_CNT>TIMx_CCR1时通道1为有效电平,否则为无效电平。 
 
-  (2)经过输出控制器后,得到OC1ref电平还要经过一个选择,其由TIMx_CCRE寄存器的CC1P位控制:输入/捕获1输出极性。0:高 电平有效。1:低电平有效 
-  (3)选择完成后经过输出电路来输出,输出电路由TIM_xCCRE寄存器的CC1E位控制。 
-  控制方式为0:关闭  1:打开。 
 
四、实验程序
主函数
int main(void)
{
  int brightness = 0;
  float temp = 0.0;
  int data = 0;
 
  HAL_Init();
  SystemClock_Config();
  i2c.initialize();
  axp152.initialize();
  axp152.set_dcdc1(3500);//[ARM & FPGA]
  axp152.set_dcdc2(1200);//[FPGA INT]
 
  axp152.set_dcdc3(3300);//[DCOUT3]
  axp152.set_dcdc4(3300);//[DCOUT4]
 
  axp152.set_aldo1(3300);//[BK3]
  axp152.set_aldo2(3300);//[ALDOOUT2]
  axp152.set_dldo1(3300);//[BK0]
  axp152.set_dldo2(3300);//[BK1]
  HAL_Delay(200);
 
  MX_GPIO_Init();
  MX_TIM1_Init();
//红色LED灯循环由亮变暗,由暗变亮
  while (1)
  {
      HAL_Delay(30);
      if(brightness == 100){
          brightness = 0;
      }
      temp =  199 * (sin(2 * PI / 99.0 * brightness) * 0.5 + 0.5);
      data = (int)temp;
      set_compare(data); //修改占空比
      brightness ++;
  }
}
 
五、实验步骤
-  把仿真器与iCore4TX的SWD调试口相连(直接相连或者通过转接器相连); 
-  把iCore4TX通过Micro USB线与计算机相连,为iCore4TX供电; 
-  打开Keil MDK 开发环境,并打开本实验工程; 
-  烧写程序到iCore4TX上; 
-  也可以进入Debug 模式,单步运行或设置断点验证程序逻辑。 
 
六、实验现象
iCore4TX 双核心板红色LED灯亮度从亮到暗然后再从暗到亮。