打印
[STM32U5]

【STM32U599J-DK测评】屏幕滑动变阻器PWM控制LED亮度

[复制链接]
2713|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 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博客



使用特权

评论回复
沙发
xuanhuanzi| | 2024-2-29 22:34 | 只看该作者
真不错,还有动画演示图片

使用特权

评论回复
板凳
HonestQiao|  楼主 | 2024-3-1 19:52 | 只看该作者
xuanhuanzi 发表于 2024-2-29 22:34
真不错,还有动画演示图片

不能上传视频。

转换后的gif有点大,请耐心等待就能看了!

使用特权

评论回复
地板
问天少年| | 2024-3-11 13:40 | 只看该作者
好详细的文章,厉害

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

37

主题

94

帖子

2

粉丝