CM4上使用定时器产生PWM信号输出 为了灵活的控制外设,CM4需要产生一个占空比可以调整的PWM信号。产生PWM信号需要定时器,因此,需要为CM4核分配定时器和相应的引脚输出。
T8 u8 F. \- C. ~0 j
根据系统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>0 F9 m8 }6 r, O! }! P! r
- <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>
复制代码
- C8 [9 H+ [2 |* x禁用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>" w! `% r* a) X
- <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>
复制代码 # T4 S- K7 ~+ w/ @
重新编译设备树文件,并将生成的dtb文件更新到开发板中。 重新启动装置,让设备树生效。 2. 创建CM4的应用程序2.1. 资源设定我们可以使用以前创建的应用程序,增加相关的资源使用就可以了。双击ioc文件,并且打开资源配置工具。 选择PH11引脚,并选择引脚功能为TIM5_CH2. % V/ y: U2 l" h7 e9 D/ Z
选择Timers->TIM5,如下图所示设定,时钟源选择“internal clock”,Channel2选择为“PWM Generation CH2”。 . f- }+ H) o$ Z v% a
8 l B7 r% e! D; a
选择“ParameterSettings”,选择合适的预分频和计数周期; 设置PWMGenertion Channel 2: Mode : PWM mode 1 Pulse : 根据占空比需求,添加一个你需要的值 CHPolarity:Low(这个状态取决于你的最终输出PWM波形状态) ) e, j. T; M4 a2 X
9 R- f, ~4 q7 |8 X! ^3 T# _
9 y3 W1 N7 F( P保存修改,并生成驱动程序文件。 2.2. 启动PWM输出 我们需要在应用程序的合适位置调用系统函数启动PWM输出: HAL_TIM_PWM_Start(&htim5, TIM_CHANNEL_2); 3. 结果展示 按照之前的使用经验,下载CM4的固件,启动运行。通过示波器监视输出引脚PH11,我们可以看到输出了一个PWM的波形信号。
3 S$ b6 }. [5 _( J1 `6 p
& ~0 b/ N9 Q" a7 h5 _* m* d3 c* @8 L5 M% s4 P( f7 R
|