STM32MP135的PF13无法映射至TIM2_CH1 PWM输出——一次发现手册有误的经验分享
问题现象
stm32mp135faf7配置PF13为TIM2_CH1 pwm无输出
源码及编译
源码下载:
buildroot:https://github.com/bootlin/buildroot.git 分支:st/2024.02.3
buildroot-external-st:https://github.com/bootlin/buildroot-external-st.git 分支:st/2024.02.3
编译编译:
$ cd buildroot/
$ make BR2_EXTERNAL=../buildroot-external-st st_stm32mp135f_dk_demo_defconfig
$ make
电路原理图
stm32mp135数据手册
设备树配置如下
tim2_pwm_pins_mx: tim2_pwm_mx-0 {
pins {
pinmux = <STM32_PINMUX('F', 13, AF1)>; /* TIM2_CH1 */
bias-pull-up;
drive-push-pull;
slew-rate = <3>;
};
};
tim2_pwm_sleep_pins_mx: tim2_pwm_sleep_mx-0 {
pins {
pinmux = <STM32_PINMUX('F', 13, ANALOG)>; /* TIM2_CH1 */
};
};
&timers2{
status = "okay";
/* USER CODE BEGIN timers2 */
/* USER CODE END timers2 */
pwm{
pinctrl-names = "default", "sleep";
pinctrl-0 = <&tim2_pwm_pins_mx>;
pinctrl-1 = <&tim2_pwm_sleep_pins_mx>;
status = "okay";
/* USER CODE BEGIN timers2_pwm */
/* USER CODE END timers2_pwm */
};
};
pwm输出使能测试
代码编译烧录到板子上后,使用如下命令使能pwm输出
cd /sys/class/pwm/pwmchip0
echo 0 > export
echo 100000000 > pwm0/period
echo 60000000 > pwm0/duty_cycle
echo 1 > pwm0/enable
pwm使用参考st官方wiki:PWM overview – stm32mpu
验证PWM
同时内核驱动对PF13的支持也只有ETR,但PA5却明确显示支持CH1和ETR
验证过程及方法
下面通过几方面来验证TIM2_CH1工作情况
验证TIM2是否工作
使能4路pwm,验证TIM2是否能正常工作,结果是PA3 PB3 PB4对应的TIM2的三路channel有pwm输出,唯独PF13无pwm输出,说明TIM2能正常工作
tim2_pwm_pins_mx: tim2_pwm_mx-0 {
pins1 {
pinmux = <STM32_PINMUX('A', 3, AF1)>, /* TIM2_CH4 */
<STM32_PINMUX('B', 3, AF1)>, /* TIM2_CH2 */
<STM32_PINMUX('B', 10, AF1)>; /* TIM2_CH3 */
bias-disable;
drive-push-pull;
slew-rate = <0>;
};
pins2 {
pinmux = <STM32_PINMUX('F', 13, AF1)>; /* TIM2_CH1 */
bias-pull-up;
drive-push-pull;
slew-rate = <3>;
};
};
tim2_pwm_sleep_pins_mx: tim2_pwm_sleep_mx-0 {
pins {
pinmux = <STM32_PINMUX('A', 3, ANALOG)>, /* TIM2_CH4 */
<STM32_PINMUX('F', 13, ANALOG)>, /* TIM2_CH1 */
<STM32_PINMUX('B', 3, ANALOG)>, /* TIM2_CH2 */
<STM32_PINMUX('B', 10, ANALOG)>; /* TIM2_CH3 */
};
};
验证CH1能否输出到其它GPIO
配置TIM2_CH1到PA5引脚,发现PA5能有pwm输出。led灯也能通过调试占空比改变亮度。说明TIM2_CH1本身功能正常,那只能怀疑是PF13引脚不支持pwm输出,可能文档有误
tim2_pwm_pins_mx: tim2_pwm_mx-0 {
pins {
pinmux = <STM32_PINMUX('A', 5, AF1)>; /* TIM2_CH1 */
bias-pull-up;
drive-push-pull;
slew-rate = <3>;
};
};
tim2_pwm_sleep_pins_mx: tim2_pwm_sleep_mx-0 {
pins {
pinmux = <STM32_PINMUX('A', 5, ANALOG)>; /* TIM2_CH1 */
};
};
裸机验证PF13输出PWM
想着可能是内核驱动有问题,用裸机验证,虽然裸机代码确实有TIM2CH1配置,但PF13还是无pwm输出,led灯不亮
裸机开发建立工程参考:【STM32MP135】基于HAL库创建适用于STM32MP135平台的Bare Metal裸机工程并从SD卡启动-CSDN博客
st论坛求助
Solved: Re: TIM2_CH2 PWM not work – STMicroelectronics Community
结论
stm32mp135的官方手册有误 正确配置如下:
作者:huangguansong