S32K1xx Series Reference Manual
的pdf文档45章介绍的是FTM(FlexTimer Module)
, S32K148
有7个FTM:
本节中用到的是FTM4, Channel2, 使用引脚PTE22, 外挂一颗无源蜂鸣器:
蜂鸣器参数:
只要给4kHz, 50%占空比, 蜂鸣器就可以正常响了.
打开S32 Design Studio for ARM, 接下来步骤:
双击工程名, 点击Components窗口Components目录下的 pin_mux:PinSetting
, 找到FTM -> FTM4 -> Channel 2, 选择PTE22, Output:
Component Library中双击添加pwm_pal
组件, 配置pwm_pal
, 选择FTM4, Channel 2, 由于时钟源是System clock
(实际测试48MHz), 预分配1, 得到4kHz只需要设置Period为12000, 占空比50%取一半, duty设置为6000, 注意Period取值范围[2, 65535]:
点击生成代码:
main函数中系统和引脚的初始化:
/* Write your code here */
/* For example: for(;;) { } */
CLOCK_SYS_Init(g_clockManConfigsArr, CLOCK_MANAGER_CONFIG_CNT,
g_clockManCallbacksArr, CLOCK_MANAGER_CALLBACK_CNT);
CLOCK_SYS_UpdateConfiguration(0U, CLOCK_MANAGER_POLICY_AGREEMENT);
PINS_DRV_Init(NUM_OF_CONFIGURED_PINS, g_pin_mux_InitConfigArr);
初始化PWM:
/* Initialize PWM */
PWM_Init(&pwm_pal1Instance, &pwm_pal1Configs);
这一步后, 4kHz, 50%占空比的方波就出来了, 蜂鸣器直接就开始响了, 怎么关闭呢? 看一下pwm_pal
中可用的函数:
没有开始停止函数, 实际上, 只要把占空比设置为0, 就相当于停了, 这里让蜂鸣器响1s后停:
/* Initialize PWM */
PWM_Init(&pwm_pal1Instance, &pwm_pal1Configs);
for (uint32_t i = 0; i < 2989000; i++); //1s
uint32_t duty = 0;
uint8_t channel = pwm_pal1Configs.pwmChannels[0].channel;
PWM_UpdateDuty(&pwm_pal1Instance, channel, duty);
while(1) {
}
https://download.csdn.net/download/weifengdq/12012194
欢迎扫描二维码关注本人微信公众号, 及时获取或者发送给我最新消息: