根据系统GPIO扩展接口的分配,我们选择
tiM5定时器和它的通道2,PH11,作为PWM信号的测试端口。
1. 资源分配通过修改设备树文件,我们将选中的TIM5和PH11分配给CM4内核。
&timers5 {
/delete-property/dmas;
/delete-property/dma-names;
pwm {
pinctrl-0 = <&pwm5_pins_a>;
pinctrl-1 = <&pwm5_sleep_pins_a>;
pinctrl-names = "default", "sleep";
status = "disabled";
};
timer@4 {
status = "disabled";
};
};
&m4_timers5{
pinctrl-names = "default", "sleep";
pinctrl-0 = <&pwm5_pins_a>;
pinctrl-1 = <&pwm5_sleep_pins_a>;
status = "okay";
};
禁用Linux内核的timer5和pwm输出功能,使能CM4内核的timer5资源占用,并将pwm引脚分配给timer5 。
其中pmw5_pins_a的引脚定义为:
pwm5_pins_a:pwm5-0 {
pins {
pinmux= <
STM32_PINMUX('H', 11, AF2)>; /* TIM5_CH2 */
bias-pull-down;
drive-push-pull;
slew-rate= <0>;
};
};
pwm5_sleep_pins_a:pwm5-sleep-0 {
pins {
pinmux= ; /* TIM5_CH2 */
};
};
重新编译设备树文件,并将生成的dtb文件更新到
开发板中。
重新启动装置,让设备树生效。
2. 创建CM4的应用程序2.1. 资源设定我们可以使用以前创建的应用程序,增加相关的资源使用就可以了。双击ioc文件,并且打开资源配置工具。
选择PH11引脚,并选择引脚功能为TIM5_CH2.
选择Timers->TIM5,如下图所示设定,时钟源选择“internal Clock”,Channel2选择为“PWM Generation CH2”。
选择“ParameterSettings”,选择合适的预分频和计数周期;
设置PWMGenertion Channel 2:
Mode : PWM mode 1
Pulse : 根据占空比需求,添加一个你需要的值
CHPolarity:Low(这个状态取决于你的最终输出PWM波形状态)
保存修改,并生成驱动程序文件。
2.2. 启动PWM输出我们需要在应用程序的合适位置调用系统函数启动PWM输出:
HAL_TIM_PWM_Start(&htim5, TIM_CHANNEL_2);
3. 结果展示按照之前的使用经验,下载CM4的固件,启动运行。通过示波器监视输出引脚PH11,我们可以看到输出了一个PWM的波形信号。
`