|**银杏科技有限公司旗下技术文档发布平台** |||| |技术支持电话|**0379-69926675-801** ||| |技术支持邮件|Gingko@vip.163.com ||| ^ 版本 ^ 日期 ^ 作者 ^ 修改内容 ^ | V1.0 | 2020-04-13 | gingko | 初次建立 | ===== STM32CubeMX教程九——定时器PWM实验 ===== 1. 新建工程:在主界面选择File-->New Project 或者直接点击ACCEE TO MCU SELECTOR {{ :icore3:icore3_cube_9_1.png?direct | }} 2. 出现芯片型号选择,搜索自己芯片的型号,双击型号,或者点击Start Project进入配置 在搜索栏的下面,提供的各种查找方式,可以选择芯片内核、型号等等,可以帮助你查找芯片。本实验选取的芯片型号为:STM32F407IGTx。 {{ :icore3:icore3_cube_9_2.png?direct | }} 3. 配置RCC,使用外部时钟源 {{ :icore3:icore3_cube_9_3.png?direct | }} 4. 配置调试引脚 {{ :icore3:icore3_cube_9_4.png?direct | }} 5. 设置定时器 {{ :icore3:icore3_cube_9_5.png?direct | }} * 在Parameter Settings页面配置 {{ :icore3:icore3_cube_9_6.png?direct | }} 6. 引脚模式配置 {{ :icore3:icore3_cube_9_7.png?direct | }} 7. 时钟源设置,选择外部高速时钟源,配置为最大主频 {{ :icore3:icore3_cube_9_8.png?direct | }} 8. 工程文件的设置, 这里就是工程的各种配置 我们只用到有限几个,其他的默认即可 IDE我们使用的是 MDK5 {{ :icore3:icore3_cube_9_9.png?direct | }} 9. 点击Code Generator,进行进一步配置 {{ :icore3:icore3_cube_9_10.png?direct | }} * **Copy all used libraries into the project folder** * 将HAL库的所有.C和.H都复制到所建工程中 * 优点:这样如果后续需要新增其他外设又可能不再用STM32CubeMX的时候便会很方便 * 缺点:体积大,编译时间很长 * **Copy only the necessary library files** * 只复制所需要的.C和.H(推荐) * 优点:体积相对小,编译时间短,并且工程可复制拷贝 * 缺点:新增外设时需要重新用STM32CubeMX导入 * **Add necessary library files as reference in the toolchain project configuration file** * 不复制文件,直接从软件包存放位置导入.C和.H * 优点:体积小,比较节约硬盘空间 * 缺点:复制到其他电脑上或者软件包位置改变,就需要修改相对应的路径 自行选择方式即可 10. 然后点击GENERATE CODE 创建工程 {{ :icore3:icore3_cube_9_11.png?direct | }} 创建成功,打开工程。 \\ \\ \\ \\ ===== 实验九:定时器PWM实验——呼吸灯 ===== ==== 一、 实验目的与意义 ==== - 了解STM32 TIMER结构。 - 了解STM32 TIMER特征。 - 掌握EXTI中断的使用方法。 - 掌握STM32 HAL库中TIMER属性的配置方法。 - 掌握KEIL MDK 集成开发环境使用方法。 ==== 二、 实验设备及平台 ==== - iCore3 双核心板。[[https://item.taobao.com/item.htm?spm=a1z10.1-c.w4024-251734887.3.5923532fXD2RIN&id=524229438677&scene=taobao_shop|点击购买]] - JLINK(或相同功能)仿真器。[[https://item.taobao.com/item.htm?spm=a1z10.5-c.w4002-251734908.13.20822b61MmPeNN&id=554869837940|点击购买]] - Micro USB线缆。 - Keil MDK 开发平台。 - STM32CubeMX开发平台。 - 装有WIN XP(及更高版本)系统的计算机。 ==== 三、 实验原理 ==== === 1、PWM简介 === * PWM即脉冲宽度调制,是一种模拟控制方式,其根据相应载荷的变化来调制晶体管基极或MOS管栅极的偏置,来实现晶体管或MOS管导通时间的改变,从而实现开关稳压电源输出的改变。这种方式能使电源的输出电压在工作条件变化时保持恒定,是利用微处理器的数字信号对模拟电路进行控制的一种非常有效的技术。 * PWM的主要应用:在STM32中如调节屏幕亮度、音调等应用都可以通过PWM控制占空比进行实现。下面我们会为大家举例介绍如何利用PWM控制LED的亮暗,以实现呼吸灯的效果。 === 2、PWM的工作原理 === * 脉宽调制基本原理:其控制方式就是对电路开关器件的通断进行控制,使输出端得到一系列幅值相等的脉冲,用这些脉冲来代替正弦波或所需要的波形。也就是在输出波形的半个周期中产生多个脉冲,使各脉冲的等值电压为正弦波形,所获得的输出平滑且低次谐波少。按一定的规则对各脉冲的宽度进行调制,即可改变电路输出电压的大小,也可改变输出频率。 * **脉宽调制原理**:脉宽调制模式可以生产一个由TIMx_ARR寄存器确定频率,由TIMx_CCRx确定占空比的信号。如下图所示: {{ :icore3:icore3_arm_hal_9_1.png?direct&400 |}} * 图中可知0到t2为一个周期时间,而占空比由CCRx值决定。一个周期时间可以由以下公式计算: * **T=(ARR+1)(PSC+1)/TCLK** * 其中: * ARR为重新装载值; * PSC为预分频系数; * TCLK为定时器时钟频率。 * 如本次实验中TCLk为84M,选择ARR为499,PSC为83,其一个周期为0.5ms。 ** PWM工作步骤解析: ** **1、**CCR1捕获比较值寄存器设置比较值,将其与当前值寄存器的值比较,要说明的是修改TIM_CCMR1寄存器的OC1M[2:0]位可控制 PWM模式,方法如下: * 110:PWM模式1 * 向上计数时,一旦TIMx_CNTTIMx_CCR1时通道1为无效电平(OC1REF=0),否则有效电平(OC1REF=1)。 * 111:PWM模式2 * 在向上计数时,一旦TIMx_CNTTIMx_CCR1时通道1为有效电平,否则为无效电平。 **2、**经过输出控制器后,得到OC1ref电平还要经过一个选择,其由TIMx_CCRE寄存器的CC1P位控制:输入/捕获1输出极性。0:高 电平有效。1:低电平有效。 **3、**选择完成后经过输出电路来输出,输出电路由TIM_xCCRE寄存器的CC1E位控制。 * 控制方式为: * 0:关闭 * 1:打开 ==== 四、 实验程序 ==== === 1. 主函数 === int main(void) { uint16_t dutyCycle = 0; HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_TIM8_Init(); HAL_TIM_PWM_Start(&htim8,TIM_CHANNEL_1); //开启定时器通道8输出PWM方波。 while (1) //红色LED灯循环由亮变暗,由暗变亮 { while (dutyCycle < 300) { dutyCycle ++; __HAL_TIM_SET_COMPARE(&htim8, TIM_CHANNEL_1, dutyCycle); //修改比较值,修改占空比 HAL_Delay(5); } while (dutyCycle) { dutyCycle --; __HAL_TIM_SET_COMPARE(&htim8, TIM_CHANNEL_1, dutyCycle); //修改比较值,修改占空比 HAL_Delay(5); } HAL_Delay(50); } } ==== 五、 实验步骤 ==== - 把仿真器与iCore3的SWD调试口相连(直接相连或者通过转接器相连); - 把iCore3通过Micro USB线与计算机相连,为iCore3供电; - 打开Keil MDK 开发环境,并打开本实验工程; - 烧写程序到iCore3上; - 也可以进入Debug 模式,单步运行或设置断点验证程序逻辑。 ==== 六、 实验现象 ==== * iCore3 双核心板红色LED灯亮度从亮到暗然后再从暗到亮。