文章目录
实现用PWM子系统控制风扇、蜂鸣器、马达的速率
一、PWM子系统框架
二、电路连接
(一)蜂鸣器
由图可知,使用了定时器4的通道1,该引脚连到了主控板的PB6引脚
(二)风扇
使用了定时器1的通道1,连接了PE9引脚
(三)马达
连接引脚PF6
三、配置内核
-
开启STM32定时器
Device Drivers ---> Multifunction device drivers ---> {*} Support for STM32 Timers
-
开启STM32 PWM控制器
Device Drivers ---> [*] Pulse-Width Modulation (PWM) Support ---> <*> STMicroelectronics STM32 PWM <*> STMicroelectronics STM32 PWM LP
-
开启基于PWM⼦系统的pwm-beeper驱动
如果不使用内核自带的pwm-beeper驱动,该配置不要选配,选nDevice Drivers ---> Input device support ---> [*] Miscellaneous devices ---> <*> PWM beeper support
四、设备树
(一)timer定时器
打开stm32mp151.dtsi文件,找到timers4节点
timers4: timer@40002000 {
#address-cells = <1>;
#size-cells = <0>;
compatible = "st,stm32-timers";
reg = <0x40002000 0x400>;
clocks = <&rcc TIM4_K>;
clock-names = "int";
dmas = <&dmamux1 29 0x400 0x80000001>,
<&dmamux1 30 0x400 0x80000001>,
<&dmamux1 31 0x400 0x80000001>,
<&dmamux1 32 0x400 0x80000001>;
dma-names = "ch1", "ch2", "ch3", "ch4";
status = "disabled";
};
打开内核帮助文档,找到相关示例
st,stm32-timer.yaml
36 examples:
37 - |
38 #include <dt-bindings/interrupt-controller/arm-gic.h>
39 #include <dt-bindings/clock/stm32mp1-clks.h>
40 timer: timer@40000c00 {
41 compatible = "st,stm32-timer";
42 reg = <0x40000c00 0x400>;
43 interrupts = <50>;
44 clocks = <&clk_pmtr1>;
45 };
对比可见,定时器基本配置已经配置完毕。因此只需要配置相关的引脚控制。
定时器4节点
&timers4 {
/delete-property/dmas;
/delete-property/dma-names;
status = "okay";
pwm4: pwm {
pinctrl-0 = <&pwm4_pins_c>;
pinctrl-1 = <&pwm4_sleep_pins_c>;
pinctrl-names = "default", "sleep";
#pwm-cells = <2>;
status = "okay";
};
timer@3 {
status = "disabled";
};
};
引脚配置
pinmux 用于配置引脚复用功能
可见,TIM4的通道1功能,需要将PB6引脚配置为AF2
同理,TIM1_CH1,需要将PE9复用为AF1
TIM16_CH1,需要将PF6复用为AF1
&pinctrl {
pwm4_pins_c: pwm4-0 {
pins {
pinmux = <STM32_PINMUX('B', 6, AF2)>;
/* TIM4_CH1 */
bias-pull-down; //下拉
drive-push-pull; //推挽
slew-rate = <0>;
};
};
pwm4_sleep_pins_c: pwm4-sleep-0 {
pins {
pinmux = <STM32_PINMUX('B', 6, ANALOG)>; /* TIM4_CH1 */
};
};
};
(二)PWM
然后打开PWM的帮助文档
pwm.txt ---- 介绍用户节点
pwm.yaml ---- 介绍控制器节点
在pwm.txt中可以获得关于pwm用户节点的介绍:
#pwm-cells = <2>;
使用两个元素来描述PWM设备
第一个元素描述PWM通道号,0表示使用PWM控制器的第一个通道。
第二个元素描述PWM频率,单位是赫兹(Hz)
pwms:这是一个必需的属性,用于列出设备将要使用的PWM设备。它的值是一个或多个pwm-list结构
pwm-list属性的列表来指定想要使用的PWM设备
蜂鸣器节点
/{
//蜂鸣器
beeper {
compatible = "pwm-beeper"