CM4上使用定时器产生PWM信号输出 为了灵活的控制外设,CM4需要产生一个占空比可以调整的PWM信号。产生PWM信号需要定时器,因此,需要为CM4核分配定时器和相应的引脚输出。 8 d7 `4 f, t6 }0 O6 d
根据系统GPIO扩展接口的分配,我们选择tiM5定时器和它的通道2,PH11,作为PWM信号的测试端口。 1. 资源分配通过修改设备树文件,我们将选中的TIM5和PH11分配给CM4内核。 - <div align="left">&timers5 {</div><div align="left"> /delete-property/dmas;</div><div align="left"> /delete-property/dma-names;</div><div align="left"> pwm {</div><div align="left"> pinctrl-0 = <&pwm5_pins_a>;</div><div align="left"> pinctrl-1 = <&pwm5_sleep_pins_a>;</div><div align="left"> pinctrl-names = "default", "sleep";</div><div align="left"> status = "disab<font color="#4298ba"><font style="font-size: 15px">LED</font></font>";</div><div align="left"> };</div><div align="left"> timer@4 {</div><div align="left"> status = "disabled";</div><div align="left"> };</div><div align="left">};</div>
2 g9 c. b. x7 F4 U2 } - <div align="left">&m4_timers5{</div><div align="left"> pinctrl-names = "default", "sleep";</div><div align="left"> pinctrl-0 = <&pwm5_pins_a>;</div><div align="left"> pinctrl-1 = <&pwm5_sleep_pins_a>;</div><div align="left"> status = "okay";</div><div align="left">};</div>
复制代码
& V6 r4 z0 j9 l; E% s禁用Linux内核的timer5和pwm输出功能,使能CM4内核的timer5资源占用,并将pwm引脚分配给timer5 。 其中pmw5_pins_a的引脚定义为: - <div align="left"> pwm5_pins_a:pwm5-0 {</div><div align="left"> pins {</div><div align="left"> pinmux= <<font color="#4298ba"><font style="font-size: 15px">STM32</font></font>_PINMUX('H', 11, AF2)>; /* TIM5_CH2 */</div><div align="left"> bias-pull-down;</div><div align="left"> drive-push-pull;</div><div align="left"> slew-rate= <0>;</div><div align="left"> };</div><div align="left"> };</div>
* [. E& R5 v4 x9 E& a - <div align="left"> pwm5_sleep_pins_a:pwm5-sleep-0 {</div><div align="left"> pins {</div><div align="left"> pinmux= <STM32_PINMUX('H', 11, <font color="#4298ba"><font style="font-size: 15px">analog</font></font>)>; /* TIM5_CH2 */</div><div align="left"> };</div><div align="left"> };</div>
复制代码 8 l! n% M( a4 W2 O. e
重新编译设备树文件,并将生成的dtb文件更新到开发板中。 重新启动装置,让设备树生效。 2. 创建CM4的应用程序2.1. 资源设定我们可以使用以前创建的应用程序,增加相关的资源使用就可以了。双击ioc文件,并且打开资源配置工具。 选择PH11引脚,并选择引脚功能为TIM5_CH2. $ b$ k+ V1 F1 N+ Y% }: Q
选择Timers->TIM5,如下图所示设定,时钟源选择“internal clock”,Channel2选择为“PWM Generation CH2”。 ( ?+ U9 U6 f, o- z
9 { P. i/ L2 j4 `0 { 选择“ParameterSettings”,选择合适的预分频和计数周期; 设置PWMGenertion Channel 2: Mode : PWM mode 1 Pulse : 根据占空比需求,添加一个你需要的值 CHPolarity:Low(这个状态取决于你的最终输出PWM波形状态)
) h* D; z7 V3 x% B; @5 u8 J% m : l# }& I) I; y+ `
. N, n8 E X9 o% p+ ~9 K保存修改,并生成驱动程序文件。 2.2. 启动PWM输出 我们需要在应用程序的合适位置调用系统函数启动PWM输出: HAL_TIM_PWM_Start(&htim5, TIM_CHANNEL_2); 3. 结果展示 按照之前的使用经验,下载CM4的固件,启动运行。通过示波器监视输出引脚PH11,我们可以看到输出了一个PWM的波形信号。 ; j7 s! D, M& _3 D0 c
3 @2 Y* N2 d0 I
# ^8 Z& n3 H. _* O
|