本帖最后由 HonestQiao 于 2024-3-5 17:00 编辑
#申请原创# 在这片测评分享中,通过在STM32U599J-DK设置一个滑动变阻器,通过拨动滑片的位置,来调整PWM的输出,从而控制LED的亮度。
一、了解滑动变阻器
滑动变阻器共有四个接线柱。
使用时,选择“一上一下”两个接线柱连线。
选择不同的接线柱,滑动变阻器阻值变化特点不同。
判断滑动变阻器电阻变化规律的方法:
先判断滑片哪侧的电阻线连入了电路中;再判断滑片向某方向滑动时,连入电路的电阻线长度会变长还是变短;最后确定电阻是变大还是变小。
二、TIM16定时器了解
从STM32U59xx手册可以了解到,可供使用的定时器:
通过手册还能了解到,TIM16_CH1,可以输出到PE0:
而通过 STM32U599J-DK 的手册可以了解到,PE0连接到了绿色的用户LED:
因此,可以再程序中,利用TIM6来输出PWM控制板载绿色LED的亮度。
另外,定时器涉及到预分频,因此还需要了解TIM16使用的clock:
从上可以看出TIM16挂载APB2上,使用PLCK2。
三、TouchGFX界面设计
1. 准备图片:
首先准备好三张图片:
第一张为底图,第二张为滑动变阻器的图,第三张为滑动变阻器滑片的图:
2. 将图片添加到工程
新建一个STM32U599J-DK的工程,然后将图片都添加到工程中:
3. 设置底图
添加一个Image到Screen1,然后设置使用底图图片
4. 添加Slider
Slider分为三个部分,分别是默认图片,滑动后的图片,以及滑片的图片,依次设置如下:
使用滑动变阻器的图片设置到Slider后,就能够在屏幕上显示一个滑动变阻器了。
调整好滑动变阻器的位置,并设置好滑片的活动范围,以及对应的值的范围:
5. 模拟运行查看效果
6. 设置回调
滑动变阻器Slider值改变时,我们需要在程序中知道,并使用该值来改变PWM的占空比,所以需要进行如下设置:
7. 输出代码
点击右下角的代码图标,输出代码:
然后点击左则的Files,查看项目文件:
四、STM32CubeIDE开发
使用TouchGFX进行界面设计,已经完成了大部分的工作。
在STM32CubeIDE中,只需要启用TIM16,并且和滑片的回调关联起来,就可以了。
1. 进入STM32CubeMX设置
在STM32CubeIDE中,点击打开ioc文件,通过STM32CubeMX进行硬件设置:
2. 查看系统时钟:
从上图可以看到,PCLK2最大为160MHz
3. 设置TIM16
因为PCLK2为160MHz,所以这里使用160分频,TIM16工作频率为1MHz。
然后计数1000个周期,刚好就是1KHz,也就是对应1秒。
并设置TIM16使用PWM_CH1输出通道,然后设置PE0使用TIM16_CH1,刚好关联上。
设置完成后,关闭MX设置窗口,会提示生成代码。
4. 修改界面处理代码添加逻辑处理
在输出的代码Screen1ViewBase.cpp中,可以看到TouchGFX界面中,slider1的处理:
然后在Screen1View.hpp中,添加对应的调用声明:
在Screen1View.cpp中,添加具体的实现:
在上述代码中,使用了 SIMULATOR 宏定义,这是为了确保在TouchGFX模拟器中,还能继续运行模拟测试。
changePWM中,修改TIM16的CCR1,来修改其实际运行输出的占空比。
5. 启动TIM16
在main.c中,已经有TIM16默认的初始化配置了,我们只需要添加一个启动即可:
需要注意的是:
1. 代码要添加到一堆关联的USER CODE BEGIN和USER CODE END之间,否则使用TouchGFX和STM32CubeIMX设计生成后会让你很悲剧的。
2. 启动TIM16的代码,不要放在while(1)之前,否则可能无法运行。
经过以上的处理,相关的工作就完成了,可以编译看看是否有错:
五、实际效果
编译无误后,下载到开发板实际运行,具体效果如下:
六、参考资料
学习研究的过程中,参考了很多资料,表示感谢:
- STM32工程师笔记|TIM DMA burst 输出变频 PWM 波形-谷动谷力 (sunsili.com)
- 初中物理:图解滑动变阻器 (qq.com)
- STM32cubeMx系列小白学习教程(五)——定时器输出比较(PWM输出)_stm32cube 定时器比较输出-CSDN博客
- STM32F407+CubeMX-使用TIM产生PWM信号_stm32f4 示波器-CSDN博客
- STM32 PWM Example - Timer PWM Mode Tutorial – DeepBlue (deepbluembedded.com)
- 【STM32Cube_12】使用通用定时器产生PWM驱动蜂鸣器_51CTO博客_stm32定时器产生pwm波
- STM32定时器(TIM)之预分频器(PSC)详解 - 知乎 (zhihu.com)
- STM32定时器详解(一)系统滴答定时器做延时函数(STM32U5系列为例)(配合cubeMX)_系统滴答定时器与dma-CSDN博客
- 41、外围设备——STM32U5低功耗定时器 | STMCU中文官网
- 【STM32Cube笔记】13-使用定时器产生PWM输出_cubeide stm32 利用定时器输出 pwm-CSDN博客
- 【STM32】通用定时器的PWM输出(实例:PWM输出)_stm32 timer pwm-CSDN博客
|